基准积分与双积分程序

时间:2013-01-01 20:56:31

标签: matlab integral

我有一个关于在MATLAB中实现双积分的问题。

众所周知 enter image description here

利用

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

上述程序(调用F11,F22和F33的公式)得出如下结果: enter image description here

现在问题是:

我想通过仅包含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

1 个答案:

答案 0 :(得分: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);

以匹配您的图表。