3

MATLABでの二重積分の実装について質問があります。

それは知られています ここに画像の説明を入力してください

を利用する

k1 = 1E-04:0.001:1E + 04; k2 = 1E-04:0.001:1E + 04; k3 = 1E-04:0.001:1E + 04;

上記の手順(F11、F22、およびF33の式を呼び出す)により、以下に示す結果が得られます。 ここに画像の説明を入力してください

ここで質問があります:

phi11、phi22、phi33のみを含む二重積分(またはk2とk3の入れ子になった単一積分)を使用して同じ結果を達成したいので、F11、F22、F33の式を直接呼び出す必要はありません。

今まで私はこのコードを使用しています(F11計算に制限されています):

clc,clear all,close all
k1 = (1E-04:0.01:10000);
k2 = (1E-04:0.01:10000);
k3 = (1E-04:0.01:10000);
F_11_benchmark = ((9/55)*1.453)*(1./(1+k1.^2).^(5/6));
count = 0;
F_11 = zeros(1,numel(k1));
for i = 2:numel(k1)
count = count + 1;
phi_11 = @(k2,k3) (1.453./(4.*pi)).*((k2.^2+k3.^2)./((1 + k1(count).^2 + k2.^2+k3.^2).^(17/6)));
F_11(count) = dblquad(phi_11,k2(i-1),k2(i),k3(i-1),k3(i));
end

最後の図に示されているのと同じベンチマーク結果にはつながりません。

この問題にどのように取り組むことを提案しますか?よろしくお願いします。

よろしく、FPE

4

1 に答える 1

1

dblquadを間違って使用しています。これを行う方法では、各k1について、小さなボックス[k1(i-1)k1(i)] x [k1(i-1)k1(i)]の積分が計算されます。これは、ドメイン全体を近似するものではありません。統合の。代わりにintegral2コマンドを使用してください。

F_11(count) = integral2(phi_11,-100,100,-100,100);

また

F_11(count) = integral2(phi_11,-Inf,Inf,-Inf,Inf);

これはより正確であるはずですが、遅くなります。k1にはるかに大きな解像度を使用することもおそらく回避できます。使用しました

k1=10.^(-4:.01:3);

グラフに一致させるために。

于 2013-01-02T04:18:14.960 に答える