Matlab 基于不同分辨率的乘积规则数值积分问题

Matlab 基于不同分辨率的乘积规则数值积分问题,matlab,integration,numerical-methods,calculus,Matlab,Integration,Numerical Methods,Calculus,在用两个数据集进行数值积分计算时,我遇到了一些问题。 对于集成,我使用辛普森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

在用两个数据集进行数值积分计算时,我遇到了一些问题。 对于集成,我使用辛普森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,它们都依赖于同一个变量。 变量在相同的范围内。所以下限和上限是一样的

$\int_a^b \! f(x) *g(x) \, \mathrm{d} x.$
这里x的分辨率不同。对于f(x),我们有1000个数据,而对于g(x),我们有1700个数据点。因此,不能进行元素对元素的乘法


如何解决这种整合

您需要将一个函数,
f
g
插入到其他函数点,以实现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相同的元素。

我正要进行插值。但如果我这样做了,那么我需要选择各个点。这将是一项乏味的工作。有没有最简单的方法…(这里我说的是Microsoft Excel数据插值)我不明白它有什么烦人之处。。。既然你有XI,那么设置什么,而不是席,其他向量“代码> x=林空间(席席(1),席(端),N)< /代码>?对不起我的评论。因为我在excel文件中有所有数据,所以我尝试使用excel进行插值。此链接显示一些图形表示。我想我需要使用游标获取每个值。无论如何,谢谢你的帮助。我现在正在matlab中尝试这一切。现在我看到了另一个问题。您显示x1和x2计算的方式具有一致的差异/分辨率。在我的数据集中,问题是x与x2之间的间隔相等,其中as-x1不相等(x1具有非均匀数据,其中as-x2具有均匀数据)。x1为实际数据。所以人们做的计算范围是不均匀的。如何处理这个问题。x1和x2是点的向量,它们不需要统一才能实现
interp1
。请看我编辑的answe,我将x2定义为随机向量,它仍然有效。