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 回答