Error (Unable to perform assignment because value of type 'sym' is not convertible to 'double'.)

26 次查看(过去 30 天)
Hi everone,
Can anyone help with the code below? I got the error (Unable to perform assignment because value of type 'sym' is not convertible to 'double'.)
% theoretical
clear all; clear; clc;
d0=0;
h_A=40;
% k=0.003;
k=0.07512;
a1 = 8;
b1 = 0.2;
aL = 2; % LOS path loss exponent
aN = 4; % NLOS path loss exponent
betaL = 61.4;
betaN = 72;
CL = 10^(-betaL/10); % LoS path loss
CN = 10^(-betaN/10); % NLoS path loss
beta = 1/141.4; % Parameters of density and size of the blockage
N =10; % Fixed number of UAVs (for BPP)
h=exprnd(1);
rc =500; % Avg. Cell radius in meters for the simulation
L=(3*10^8)^2/(4*pi*1.05*10^12)^2; % Free space path loss constant
GA_dB = 25;
GA = 10^(GA_dB/10);
gA_dB = -10;
gA = 10^(gA_dB/10);
thetaA = 30; % beamwidth of the main lobe at the ABS
Gu_dB = 15;
Gu = 10^(Gu_dB/10);
gu_dB = -10;
gu = 10^(gu_dB/10);
thetau = 30; % beamwidth of the main lobe at the user
W = 100; % BW MHz
Q = 10; % Noise figure
np_dB = -90 +10*10*log10(W) + Q; % noise power dBm
np = 10^(np_dB/10); % noise power in Watt
PA_dBm= 10; % ABS power dBm
PA = 10^(PA_dBm/10); % ABS power in Watt
A= PA * GA * Gu * L *h_A; % Overall signal strength constant
beta = 1/141.4; % parameters of density and size of the blockage
cr = thetaA/360;
ct = thetau/360;
B = [GA*Gu, GA*gu, gu*GA, gA*gu]; % directivity gain of the interfernce link
pa = [cr*ct, cr*(1-ct), (1-cr)*ct, (1-cr)*(1-ct)]; % probablity of the directivity gain of the interfernce link
av = pa./(GA*Gu);
thresh_dB = 0:5:10;
thresh = 10.^(thresh_dB./10);
syms x r w
xm = sqrt((rc - d0)^2 + h_A^2);
xu = sqrt((rc + d0)^2 + h_A^2);
f(x) = piecewise(x >= h_A & x <= xm, (2 * x) / rc^2, x > xm & x <= xu, (2 * x) / ( pi*rc^2) * acos(((x^2)+ d0^2 - rc^2 - h_A^2 ) / (2 * d0 * sqrt(x^2 - h_A^2))),0);
PL(r) = exp(-beta.*r);
PN(r) = 1-PL(r);
PL(x) = exp(-beta.*x);
PN(x) = 1-PL(x);
PL(w) = exp(-beta.*w);
PN(w) = 1-PL(w);
D1(r) = (aN /k) *lambertw(0, (k/aN)* exp((k *r)/aN) * r^(aL/aN));
D2(r) = (aL /k) *lambertw(0, (k/aN)* exp((k *r)/aN) * r^(aL/aN));
% Association Probability
LA = N* (int( f(r)* PL(r) * ( int(PL(x)*f(x),x,r,xu) + int(PN(x)*f(x),x,D1(r),xu))^(N-1),r,h_A,xu));
NA = N* (int( f(r)* PN(r) * ( int(PN(x)*f(x),x,r,xu) + int(PL(x)*f(x),x,D2(r),xu))^(N-1),r,h_A,xu));
% Servig distance distribution
fRL(r)= ( N * PL(r) * f(r)* ( int(PL(x)*f(x),x,r,xu) + int(PN(x)*f(x),x,D1(r),xu))^(N-1) ) / LA ;
fRN(r)= ( N * PN(r) * f(r)* ( int(PN(x)*f(x),x,r,xu) + int(PL(x)*f(x),x,D2(r),xu))^(N-1) ) / NA ;
% Interfernce distance distribution
fWLL = PL(w)*f(w) / (int(PL(x)*f(x),w,r,xu));
fWN = PN(w)*f(w) / (int(PN(x)*f(x),w,D1(r),xu));
fWNL = PL(w)*f(w) / (int(PL(x)*f(x),w,D2(r),xu));
fWNN = PN(w)*f(w) / (int(PN(x)*f(x),w,r,xu));
PLA = (int(PL(x)*f(x),x,r,xu)) / ( int(PL(x)*f(x),x,r,xu) + int(PN(x)*f(x),x,D1(r),xu)) ;
PNA = (int(PN(x)*f(x),x,D1(r),xu)) / ( int(PL(x)*f(x),x,r,xu) + int(PN(x)*f(x),x,D1(r),xu)) ;
PeqL = 1/ ( int(PL(x)*f(x),x,r,xu) + int(PN(x)*f(x),x,D1(r),xu));
PeqN = 1/ ( int(PN(x)*f(x),x,r,xu) + int(PL(x)*f(x),x,D2(r),xu));
PcT = zeros(length(thresh));
U = thresh / PA * GA * Gu * L * r^(-aL) * exp(-k * r);
U1 = thresh / PA * GA * Gu * L * r^(-aN) * exp(-k * r);
for T = 1:length(thresh)
LTL=0;
for i=1:length(B)
F1 = int( PL(w)*f(w) * (1/(1+ U(T) * PA * B(i) * w^(-aL) * exp(-k * w))),w,r,xu);
F2 = int( PN(w)*f(w) * (1/(1+ U(T) * PA * B(i) * w^(-aN) * exp(-k * w))),w,D1(r),xu);
LTL = LTL + (F1 + F2) * pa(i) ;
end
LTN=0;
for i=1:length(B)
F1 = int( PN(w)*f(w) * (1/(1+ U1(T) * PA * B(i) * w^(-aN) * exp(-k * w))),w,r,xu);
F2 = int( PL(w)*f(w) * (1/(1+ U1(T) * PA * B(i) * w^(-aL) * exp(-k * w))),w,D2(r),xu);
LTN = LTN + (F1 + F2) * pa(i) ;
end
PcT(T) =LA * exp(-U(T) * np) * (PeqL*LTL)^(N-1) + NA * exp(-U1(T) * np) * (PeqN*LTN)^(N-1);
end
plot(thresh_dB,PcT,'r','LineWidth',1.5)
legend ('analytical result')
hold on

回答(1 个)

Walter Roberson
Walter Roberson 2024-3-18
PcT = zeros(length(thresh));
PcT is assigned as numeric zeros.
F1 = int( PL(w)*f(w) * (1/(1+ U(T) * PA * B(i) * w^(-aL) * exp(-k * w))),w,r,xu);
F1 and F2 are int() and so are symbolic. So your LTL and LTN are symbolic.
PcT(T) =LA * exp(-U(T) * np) * (PeqL*LTL)^(N-1) + NA * exp(-U1(T) * np) * (PeqN*LTN)^(N-1);
symbolic expressions to the power of 9 can take a long time to compute. The result is going to be a symbolic expression. But the result has to be assigned into the double-precision location PcT(T)
The question then becomes whether the resulting symbolic expression can be converted to double precision; the answer to that is NO.
  4 个评论

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Spectral Measurements 的更多信息

产品


版本

R2023b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by