如何在MATLAB中对向量进行数值积分?

5

我有一个由358个数字组成的向量。我想对这个向量进行数值积分,但是我不知道它的函数。

我发现可以使用trapz或quad,但我不太明白如何在没有函数的情况下进行积分。


请看我对类似问题的回答,其中我使用trapz进行积分:https://dev59.com/G03Sa4cB1Zd3GeqPtDBZ#2641824 - Jonas
我会把这个作为注释添加,因为它太短了,不足以作为一个合适的回答。如果不使用MATLAB内置函数进行集成,就需要考虑使用数值方法。梯形法是最简单的方法之一;你只需找到相邻点之间由一条线连接的图形下方的面积(假设x轴间隔为1,因为问题中没有提到间隔)。在做出这种假设的情况下,“fx”向量的一个简单而朴素的方案将是(fx(2:end)+fx(1:end-1))/2。 - JS Ng
trapz和quad所使用的数值方案在文档中有所描述,您可以在MATLAB的帮助文件或在线上查找。如果您希望获得更完整的简单算法描述,请告诉我,我会添加更详细的回复。 - JS Ng
3个回答

8
如果您知道矢量的水平间距,您可以使用 trapz 来进行积分,而不需要函数。例如,要在 0 到 pi 的范围内积分 y=sin(x),使用 358 个部分:
x=0:pi/357:pi;
y=sin(x);
area=trapz(x,y);

如果你只使用trapz(y),你会得到一个更大的数字,因为默认点之间的距离被假定为1。通过乘以x点之间的距离可以解决这个问题:
area=pi/357*trapz(y);

6
你不需要知道函数来进行数值积分;这就是 trapzquad 的优点。只需将你的向量传递给 trapz 即可。这里是文档链接

1

将集成视为查找由向量形成的曲线下面积。好吧,它实际上不是曲线,而是多边形链。TRAPZ函数正在做什么,它找到由您的向量中每两个相邻点及其在X轴上的投影形成的梯形的每个区域的总和。如果您的点之间距离不均匀或距离不相等,请参阅函数文档。

您可以在Wikipedia上阅读更多关于此方法的信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接