Проблема с численной оценкой вероятности покрытия с использованием MATLAB
Я пытаюсь численно оценить сложное выражение вероятности покрытия через 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 ответов на вопрос
Похожие вопросы
-
1
Simulink для Matlab, как _______ для Mathematica?
-
1
webMathematica для Mathematica, как _________ для Matlab
-
6
Где мое программное обеспечение установлено в Linux?
-
-
4
Как ускорить выполнение программы Matlab?
-
1
Измените файл с .mat на .txt
-
1
MATLAB столбец обернуть
-
1
Как я могу использовать командное окно Matlab из Emacs?
-
2
Как настроить удаленный компьютер, чтобы разрешить запуск Matlab через ssh и x11 forwarding
-
1
Различие между а / б версиями Matlab?
-
1
функция 'ttest' не работает в Matlab