多维数据整合(matlab)

问题描述 投票:0回答:1

我有一个(有点复杂的表达式)三维空间,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),这是一种计算上合理的方法吗?

performance matlab numerical-integration
1个回答
0
投票

如果这是您想要积分的函数形式,@(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
,这将大大减少你的计算时间成本

© www.soinside.com 2019 - 2024. All rights reserved.