統合

2016-04-05 11 views
0

私は三次元、X、Y、Zに(多少複雑な式)を有します。私はそれらのうちの1つの累積積分に興味があります。これまでの私の最善の解決策は、3Dグリッドを作成し、あらゆる点で表現を評価し、次にcumtrapzで3次元に統合することです。これは私が達成しようとしているものの単なるスケールダウン例です:ベクトルの大きさ(X、Y〜100、Z〜5000)を考えると、これはこれを行うには、計算賢明な方法である統合

%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 

+0

の時間コストを削減しますcos(x)=(exp(ix)+exp(ix))/2は、/あなたはコードレビューにこれを投稿したい場合がありますスピードアップ(http://codereview.stackexchange.com/) – Alessiox

答えて

0

これはあなたがオーバー統合する関数形、@(x、y、z)のsin(x).*cos(y).*exp(z/80).*cos((x-z/20))xyであれば、zを個別に統合することができ、積分は解析的にsin(x)=(exp(ix)-exp(ix))/2iを置き換えることにより、複素数を使って解くことができ、あなたのコードが動作し、改善を探しているなら大幅に計算

+0

ああ、私はあまりにも単純な私の例を作った。実際の表現は分離できませんが、細かい点です。 – ConfusinglyCuriousTheThird