具有非均匀网格的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
。两人意见一致。
我知道如何使用 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
。两人意见一致。