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 个数据点。所以不能进行逐个元素的乘法。

如何解决这种整合..

4

1 回答 1

1

您需要将您的一个函数 f或插入g到其他函数点,以获得可使用interp1.

例如:

% 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 相同的元素数。

于 2013-01-13T18:45:31.643 回答