具有非均匀网格的matlab中的双积分

Double integral in matlab with non-uniform grid

我知道如何使用 trapezoidal rule for non-uniform grid 进行单次积分。如果我的函数是 f(x,y),那么在 MATLAB 中 dx 的单积分看起来像

m1=(sum(diff(x,1,2).*(f(:,1:end-1)+f(:,2:end)),2))/2

现在如果我有函数 f(x,y,z) 如何在 MATLAB 中使用非均匀网格的梯形法则对 dydz 执行二重积分?

请注意它的网格不均匀。

使用 MATLAB 中的内置函数 trapz,您可以做到这一点。这是一个例子:

>> x = -3:.1:3;
y = -5:.1:5;
z = -10:0.1:10;
[X,Y,Z] = meshgrid(x,y,z);
F = X.^2 + Y.^2 + Z.^2;
I = trapz(y,trapz(x,F,2));
I = squeeze(I);

我正在做的是创建一个由小写 x,y,z 表示的数据点组成的网格,并评估该函数,在本例中为 X^2+y^2+Z^2。您已经有了替代数据。请记住,您始终可以使用 griddata 统一重新网格化数据。

然后我使用 trapz 两次来整合 x 和 y 维度。 trapz 专门针对不等于 1 的第一个矩阵维度进行积分,允许我这样做(请参阅此处的文档:http://www.mathworks.com/help/matlab/ref/trapz.html)。

最后,我对数据使用挤压以删除所有单一维度和 return 向量。如果我沿着剩余维度绘制数据,我得到:

>> plot(z,I);

与我的原始函数相比,如果在 -3 <= x <= 3-5 <= y <= 5 之间进行分析整合,我得到:680 + 60 z^2。两人意见一致。