我有一个三维的(有点复杂的表达式),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),这在计算上是一种合理的方法吗?
发布于 2016-04-06 05:24:26
如果这是您想要积分的函数形式,则可以分别对@(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来解析求解该积分,这将大大减少计算的时间成本
https://stackoverflow.com/questions/36436465
复制相似问题