我有一个关于在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
答案 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);
以匹配您的图表。