我有一个(有点复杂的表达式)三维空间,x,y,z。我对其中之一的累积积分感兴趣。到目前为止,我最好的解决方案是创建一个 3D 网格,评估每个点的表达式,然后使用 cumtrapz 在三维上进行积分。这只是我想要实现的目标的缩小示例:
%integration
xvec = linspace(-pi,pi,40);
yvec = linspace(-pi,pi,40);
zvec = 1:160;
[x,y,z] = meshgrid(xvec,yvec,zvec);
f = @(x,y,z) sin(x).*cos(y).*exp(z/80).*cos((x-z/20));
output = cumtrapz(f(x,y,z),3);
%(plotting)
for j = 1:length(output(1,1,:));
surf(output(:,:,j));
zlim([-120,120]);
shading interp
pause(.05);
drawnow;
end
考虑到向量的大小 (x,y~100, z~5000),这是一种计算上合理的方法吗?
如果这是您想要积分的函数形式,@(x,y,z)
sin(x).*cos(y).*exp(z/80).*cos((x-z/20))
, x
,y
,z
可以单独积分,积分可以使用复数解析求解通过替换sin(x)=(exp(ix)-exp(ix))/2i
和cos(x)=(exp(ix)+exp(ix))/2
,这将大大减少你的计算时间成本