Ein Problem mit der numerischen Bewertung der Abdeckungswahrscheinlichkeit unter Verwendung von MATLAB

336
Lod

Ich versuche, einen komplizierten Überdeckungswahrscheinlichkeitsausdruck mit MATLAB unter Verwendung dieses Codes numerisch auszuwerten:

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) 

Beim Ausführen des Codes erhalte ich die folgende Fehlermeldung:

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

Der Code sollte einen numerischen Wert ausgeben Pcova, der in diesem speziellen Fall sein sollte 0.29. Es scheint jedoch, dass MATLAB die Integrale in A und B nicht symbolisch lösen konnte, was die Differenzierung zu einer schwierigen Aufgabe machte. Ich habe verschiedene Wege ausprobiert, um diesen Fehler zu beheben, aber keiner hat funktioniert.

HINWEIS:

Ich weiß, dass der Ausdruck ziemlich kompliziert ist, aber aufgrund der Richtlinie kein Foto posten konnte. Ich habe jedoch versucht, Mathematica zu verwenden, um denselben Ausdruck auszuwerten, konnte es aber noch nicht. Ich habe eine Frage (mit einem Foto des zu bewertenden Ausdrucks) in Mathematica StackExchange gepostet, um Hilfe zu erhalten. Sie können es von hier aus ansehen .

0

0 Antworten auf die Frage