2013-01-13 55 views
0

在使用两个数据集计算数值积分时,我遇到了一些问题。 为了整合,我使用了simpsons 1/3规则。由于差分分辨率而产品规则的数值积分问题

function I = Simpsons(f,a,b,n) 
    if numel(f)>1 % If the input provided is a vector 
     n=numel(f)-1; h=(b-a)/n; 
     I= h/3*(f(1)+2*sum(f(3:2:end-2))+4*sum(f(2:2:end))+f(end)); 
    else 
     h=(b-a)/n; xi=a:h:b; 
     I= h/3*(f(xi(1))+2*sum(f(xi(3:2:end-2)))+4*sum(f(xi(2:2:end)))+f(xi(end))); 
    end 

此代码正确计算积分。

现在问题发生在乘法值的计算过程中。

例如我有两个函数f和g都取决于相同的变量。 变量在相同的范围内。 SO下限和上限相同。

$\int_a^b \! f(x) *g(x) \, \mathrm{d} x.$ 

这里x的分辨率是不同的。对于f(x)我们有1000个数据,对于g(x)我们有1700个数据点。所以逐元素乘法不能完成。

如何解决这个整合..

回答

1

你需要进行插补的功能之一,fg,其他的功能点,即达到使用interp1 1D功能。

例如:

% x1 an x2 have the same limits but different # of elements 

x1 = linspace(-10,10,100); 
x2 = sort(rand(1,170)*20-10); # non-unifrom points from -10 to 10 

f1 = sin(x1); 
f2 = cos(x2); 

现在说,我们要乘F1 * F2,我们需要他们有元素#,所以

f2i= interp1(x2,f2,x1,'spline'); 

将使F2具有相同#元素为f1,或者代替

f1i= interp1(x1,f1,x2,'spline'); 

将使f1具有与f2相同的元素。

+0

我正要做插值。但是,如果我这样做,那么我需要选择个人点。这将是一项乏味的工作。是否有任何最简单的方法..(这里我说的是Microsoft Excel数据插值) – salmannsu

+0

我不明白什么是单调乏味的...因为你有xi,所以很难设置而不是xi其他矢量'x = linspace(XI(1),XI(结束),N)'? – bla

+0

对不起,我的意见。由于我有Excel文件中的所有数据,我尝试使用excel进行插值。 http://peltiertech.com/WordPress/excel-interpolation-formulas/此链接显示一些图形表示。我以为我需要使用游标来获取每个值。无论如何感谢您的帮助。我正在尝试matlab中的所有内容。 – salmannsu