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.
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 .
Tags matlab