MATLAB错误:轮廓端点和航点必须是有限的

时间:2018-09-22 01:49:12

标签: matlab integration

我正在尝试评估以下代码:

% Parameters
theta=0;
v=1;

lamdaA= 0.0001;
ha=170;
pta=1;
etaa=2.8;
maL=1;

lamdaG= 0.001;
hg=60;
ptg=1;
etag=3.5;
maG=1;

Aa=0.3575;
Ag=1-Aa;

%Numerical Evaluation
syms ra rg wi ss xg

Eg=(((pta/ptg)^(2/etaa))*((rg^2+hg^2)^(etag/etaa)))-ha^2;
Egg=matlabFunction(Eg);
Ea=(((ptg/pta)^(2/etag))*((ra^2+ha^2)^(etaa/etag)))-hg^2;
Eaa=matlabFunction(Ea);
sEg=@(xg) sqrt(Egg(xg));

Iaaa=matlabFunction(wi*(1-((1+((pta*ss*(wi^(-etaa)))/maL))^(-maL))));
LIa=@(ss,xg) integral(@(wi)Iaaa(ss,wi),sEg(xg), Inf(1));

sg=@(xg) (theta(v))./(ptg.*((xg.^2+hg.^2).^(-etag./2)));
Pcovg2inh=@(xg) exp(((-2.*pi.*lamdaG.*((xg.^2)+(hg.^2)).*theta(v).*maG)/(etag-2)).*hypergeom([1 1-(2/etag)],2-(2/etag),-theta(v).*maG))...
    .*exp(-2.*pi.*lamdaA.*LIa(sg(xg),xg));

fxg1= @(xg) 2.*pi.*lamdaG.*xg.*exp(-pi.*lamdaG.*xg.^2);
fxg2= @(xg) ((2.*pi.*lamdaG)./Ag).*xg.*exp(-pi.*(lamdaA.*Egg(xg)+lamdaG.*xg.^2));

Pcovg11= @(xg) fxg1(xg).*Pcovg2inh(xg);
Pcovg22= @(xg) fxg2(xg).*Pcovg2inh(xg);

if Eaa(0)<=0
    Pcovg2h(v)=integral(Pcovg22,0,Inf(1),'ArrayValued', true)
else
    Pcovg1(v)=integral(Pcovg11,0,Eaa(0),'ArrayValued', true);
    Pcovg2(v)=integral(Pcovg22,Eaa(0),Inf(1),'ArrayValued', true);
    Pcovg2h(v)=Pcovg1(v)+Pcovg2(v)
end

但是我收到以下错误消息:

Error using integralCalc (line 34)
Contour endpoints and waypoints must be finite.

该问题似乎来自LIa=@(ss,xg) integral(@(wi)Iaaa(ss,wi),sEg(xg), Inf(1));。由于某些原因,MATLAB无法评估最后的积分。我在网上搜索,但找不到解决此问题的方法。有什么帮助吗?

1 个答案:

答案 0 :(得分:0)

Inf是问题所在。替换

LIa=@(ss,xg) integral(@(wi)Iaaa(ss,wi),sEg(xg), Inf(1));

使用

LIa=@(ss,xg) integral(@(wi)Iaaa(ss,wi),sEg(xg), 9999);

或其他更适合您的应用的数字。