2016-08-07 18 views
0

二重積分を評価するためにガウス - ルジャンドル直交を使用したいと思います。私は、重みと横を生成するために、表記脚(X1、X2、m)を使用し、次のコードガウス - ルジャンドル直交を使用した二重積分

m=5000; 

%generate weights and abscissas 
[wx,xx]=leg(-1,1,m); 
[wy,xy]=leg(-1,1,m); 

%define function 
[email protected](x,y) hypergeom(-1./4,3./2,x.^2.*y.^6); 


%integrate with respect to x 
intx=zeros(1,m); 
for num=1:m 
    intx(num)=sum(wx.*psi(xx,yx(num))); 
end 

sum(wy.*intx) 

を思い付きました。

このコードをより高速に実行する方法はありますか?

+1

なぜforループの外側にPSIを定義していませんか?しかし、これはあなたのボトルネックではありません。コードのプロファイリングを試しましたか?ボタン "Run and time"でアクセスできます –

+0

psiをfor loppの外に置くと、エラーが発生します。それは可読性yが定義されていないと言います – PhilCsar

+0

あなたの提案を試みましたが、コードはまだ非常に遅く実行されます – PhilCsar

答えて

1

WはあなたがY、X、次に行列乗算を複製する関数meshgridを使用することができる行ベクトルであると仮定すると:

m = 5000; 
[w,x]=leg(-1,1,m); 
[X, Y] = meshgrid(x); 
[email protected](x,y) hypergeom(-1./4,3./2,x.^2.*y.^6); 
result = w * psi(X,Y) * w'; 
+0

ありがとう!追加の質問:もし私が異なる制限を持っていたら?最初は-1から1まで、2番目は1から3までです。 – PhilCsar

+0

はあなたのための練習として残っています:-)。あなたはmeshgridをmeshgrdi(xx、yy)と書くことができ、wxとwyを持つことができます – rahnema1

関連する問題