Проблема с численной оценкой вероятности покрытия с использованием MATLAB

254
Lod

Я пытаюсь численно оценить сложное выражение вероятности покрытия через MATLAB, используя этот код:

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) 

Когда я запускаю код, я получаю следующее сообщение об ошибке:

 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)) 

Код должен выводить числовое значение для Pcova, которое в данном конкретном случае должно быть 0.29. Однако, похоже, что MATLAB не смог символически решить интегралы в A и B, что сделало дифференцирование сложной задачей. Я пробовал несколько способов решения этой ошибки, но ни один из них не сработал.

НОТА:

Я знаю, что выражение довольно сложное, но не смог опубликовать фото из-за политики. Тем не менее, я пытался использовать Mathematica для оценки того же выражения, но до сих пор не смог. Я отправил вопрос (с фотографией выражения для оценки) в Mathematica StackExchange, чтобы обратиться за помощью. Вы можете просмотреть это здесь .

0

0 ответов на вопрос

Похожие вопросы