Uma questão com avaliação numérica da probabilidade de cobertura usando o MATLAB

0

Eu estou tentando avaliar numericamente uma expressão de probabilidade de cobertura complicada via MATLAB usando este código:

clc;
clear;

beta_dB=0;
beta=10^(beta_dB/10);
N=50;
ra=4*10^3;
h=120;
alpha=2.5;
m=2;
x0=500;
s_p= ra + x0;
s_m= ra - x0;
w_p =sqrt(s_p^2+h^2);
w_m =sqrt(s_m^2+h^2);
d=sqrt(ra^2+h^2);

syms wa ua rr ss

s= @(rr) m*beta*rr^(alpha);

thetaa= acos((wa^2 + x0^2 - d^2)/(2*x0*sqrt(wa^2 - h^2)));
phi= acos((x0^2 + d^2 - wa^2)/(2*x0*ra));

f_w1= (2*wa)/(ra)^2;
F_w1= (wa^2 - h^2)/(ra)^2;

f_w2= ((2*wa)/(pi*(ra)^2))*thetaa;
F_w2= (((wa^2 - h^2)/(pi*(ra)^2))*(thetaa-(0.5*sin(2*thetaa)))) + ((1/pi)*(phi-(0.5*sin(2*phi))));

f_rr1= N*((1-subs(F_w1,wa,rr))^(N-1))*subs(f_w1,wa,rr);
f_rr2= N*((1-subs(F_w2,wa,rr))^(N-1))*subs(f_w2,wa,rr);
f_rr1fun=matlabFunction(f_rr1);
f_rr2fun=matlabFunction(f_rr2);

MGF_gammaL=(1+((ss*ua^(-alpha))/(m)))^(-m);

for k=1:m
    D_MGF(k)=diff(MGF_gammaL,ss,k-1);
end

f_Ua11= subs(f_w1,wa,ua)/(1-subs(F_w1,wa,rr));
f_Ua21= subs(f_w2,wa,ua)/(1-subs(F_w1,wa,rr));
f_Ua22= subs(f_w2,wa,ua)/(1-subs(F_w2,wa,rr));

AaL1HAT= MGF_gammaL*f_Ua11;
AaL2HAT= MGF_gammaL*f_Ua21;
AaL1HATfun=matlabFunction(AaL1HAT);
AaL2HATfun=matlabFunction(AaL2HAT);
integAaL1HAT=@(rr,ss)integral(@(ua)AaL1HATfun(rr,ss,ua),rr ,w_m,'ArrryValued', true);
integAaL2HAT=@(rr,ss)integral(@(ua)AaL2HATfun(rr,ss,ua),w_m, w_p,'ArrayValued', true);
LAaLHAT= @(rr,ss) (integAaL1HAT(rr,ss)+ integAaL2HAT(rr,ss)).^(N-1);

BaLHAT= MGF_gammaL*f_Ua22;
BaLHATfun=matlabFunction(BaLHAT);
integBaLHAT=@(rr,ss)integral(@(ua)BaLHATfun(rr,ss,ua),rr ,w_p,'ArrayValued', true);
LBaLHAT=@(rr,ss)(integBaLHAT(rr,ss)).^(N-1);

LAsum=0;
for kk=1:m
    d_fA=@(rr,ss) diff(LAaLHAT(rr,ss),ss,kk-1);
    d_fA1=@(rr) d_fA(rr,s(rr));
    LAsum= @(rr) (LAsum+ ((-1)^(kk-1)/factorial(kk-1))*d_fA1(rr));
end
LAFinal= LAsum(rr);

LBsum=0;
for kk=1:m
    d_fB=@(rr,ss) diff(LAaLHAT(rr,ss),ss,kk-1);
    d_fB1=@(rr) d_fB(rr,s(rr));
    LBsum= @(rr) (LBsum+ ((-1)^(kk-1)/factorial(kk-1))*d_fB1(rr));
end
LBFinal= LBsum(rr);

integrandaA=@(rr) LAFinal(rr).*f_rr1fun(rr);
integrandaB=@(rr) LBFinal(rr).*f_rr2fun(rr);
Pcova= int(integrandaA(rr), h, w_m)+ int(integrandaB(rr), w_m, w_p)

Quando executo o código, recebo a seguinte mensagem de erro:

  Error using integral (line 85)
  A and B must be floating-point scalars.

  Error in @(rr,ss)integral(@(ua)AaL1HATfun(rr,ss,ua),rr,w_m,'ArrryValued',true)

  Error in @(rr,ss)(integAaL1HAT(rr,ss)+integAaL2HAT(rr,ss)).^(N-1)

  Error in @(rr,ss)diff(LAaLHAT(rr,ss),ss,kk-1)

  Error in @(rr)d_fA(rr,s(rr))

  Error in @(rr)(LAsum+((-1)^(kk-1)/factorial(kk-1))*d_fA1(rr))

O código deve gerar um valor numérico para Pcova , que nesse caso específico deve ser 0.29 . No entanto, parece que o MATLAB não conseguiu resolver as integrais em A e B simbolicamente, o que tornou a diferenciação uma tarefa difícil. Eu tentei várias maneiras de resolver esse erro, mas nenhuma delas funcionou.

NOTA:

Eu sei que a expressão é bastante complicada, mas não foi possível postar uma foto devido à política. No entanto, tentei usar o Mathematica para avaliar a mesma expressão, mas ainda não consegui. Eu postei a pergunta (com uma foto da expressão a ser avaliada) no Mathematica StackExchange para procurar ajuda. Você pode visualizá-lo em aqui .

    
por Lod 19.07.2018 / 01:58

0 respostas

Tags