I am trying to solve fsolve (multi-variable) but getting an error.
Mostrar comentarios más antiguos
function fval = func4uo(u)
d1=1;
n=1;
m=1;
a=1;
T=1;
PsByN_0=1;
fval = ((-1/u)*log((d1^m)/(a*n*PsByN_0*T*u)+d1^m)*a*T)/(1-a)*T;
xsol = fsolve (@(u) func4uo(u), 0)
ERROR: Not enough input arguments.
14 comentarios
That's not what is shown when we run the code here,
xsol = fsolve (@(u) func4uo(u), 0)
function fval = func4uo(u)
d1=1;
n=1;
m=1;
a=1;
T=1;
PsByN_0=1;
fval = ((-1/u)*log((d1^m)/(a*n*PsByN_0*T*u)+d1^m)*a*T)/(1-a)*T;
end
Dhawal Beohar
el 16 de Feb. de 2022
Walter Roberson
el 16 de Feb. de 2022
vectorize your code. u is a vector and you calculate something using it, and you / that against another vector calculated from u. The / operator is not element-by-element division, which is the ./ operator
Dhawal Beohar
el 16 de Feb. de 2022
Editada: Dhawal Beohar
el 16 de Feb. de 2022
Dhawal Beohar
el 16 de Feb. de 2022
Editada: Dhawal Beohar
el 16 de Feb. de 2022
Torsten
el 16 de Feb. de 2022
The problem is that you divide by u (fval(1,1) = -1./u ... ) and u = 0 at the beginning.
Try
function main
u0=1;
usol = fsolve(@func4uo,u0)
end
function fval = func4uo(u)
d1=10;
n=10^-11.4;
m=2.7;
a=0.5;
T=1;
PsByN_0dB=20;
PsByN_0=10.^(PsByN_0dB/10);
fval (1,1) = ((-1./u)*log((d1^m)./(a*n*PsByN_0*T*u)+d1^m)*a*T)./(1-a)*T;
end
But the solution of your problem is obvious:
u = (1-d1^m)/(d1^m*a*n*PsByN_0*T)
Dhawal Beohar
el 17 de Feb. de 2022
Torsten
el 17 de Feb. de 2022
Then determine the zero of
((-1/u)*log((d1^m)/(a*n*PsByN_0*T*u)+d1^m)*a*T)/(1-a)*T - (1/u)*log(expint(-Ps*u))*exp(-Ps*u)
Dhawal Beohar
el 17 de Feb. de 2022
Editada: Walter Roberson
el 17 de Feb. de 2022
Torsten
el 17 de Feb. de 2022
function main
u0 = 1;
u = fzero(@func4uo,u0)
end
function fval = func4uo(u)
d1=10;
n=10^-11.4;
m=2.7;
a=0.5;
T=1;
PsByN_0dB=20;
PsByN_0=10.^(PsByN_0dB/10);
fval = log((d1^m)./(a*n*PsByN_0*T*u)+d1^m)*a*T)./(1-a)*T + log(expint(-Ps*u))*exp(-Ps*u);
end
Dhawal Beohar
el 17 de Feb. de 2022
Dhawal Beohar
el 17 de Feb. de 2022
Respuesta aceptada
Más respuestas (2)
There is no zero for that function.
If you use negative u, then the imaginary component of the function approaches negative infinity as u gets close to zero, and only reaches zero again as u gets to -infinity.
If you use positive u and floating point values, then the expint() overflows to infinity when you reach about 8, and the exp() term numerically goes to 0 in floating point, and inf*0 is nan.
If you use positive u with the symbolic toolbox, you can show that the real part of the function is negative until infinity is reached.
Or perhaps I should say that the root is u = +inf as in the limit the function does become 0.
format long g
U = linspace(5,8);
Z = func4uo(U);
figure(); plot(U, real(Z), 'k'); title('real'); xlim([0 10])
figure(); plot(U, imag(Z), 'r'); title('imaginary'); xlim([0 10])
func4uo(10)
func4uo(sym(10))
vpa(ans)
syms u
Z = func4uo(u)
limit(Z, u, inf)
vpa(ans)
function fval = func4uo(u)
d1=10;
n=10^-11.4;
m=2.7;
a=0.5;
T=1;
PsByN_0dB=20;
PsByN_0=10.^(PsByN_0dB/10);
fval = ((-1./u).*log((d1.^m)./(a.*n.*PsByN_0.*T.*u)+d1.^m).*a.*T)./(1-a).*T - (1./u).*log(expint(-PsByN_0.*u)).*exp(-PsByN_0.*u);
end
1 comentario
Dhawal Beohar
el 17 de Feb. de 2022
Walter Roberson
el 17 de Feb. de 2022
Editada: Walter Roberson
el 17 de Feb. de 2022
Z = @(PS) arrayfun(@(ps) fzero(@(u)func4uo(u,ps), [0.6775499178144678 1e3]), PS)
P = linspace(-5, 1);
syms u
F = func4uo(u, P(1))
string(F)
%vpasolve(F)
%{
U = Z(P);
plot(P, real(U), 'k', P, imag(U), 'r');
xlabel('Ps'); ylabel('u')
%}
function fval = func4uo(u,Ps)
d1=10;
n=10^-11.4;
m=2.7;
a=0.5;
T=1;
PsByN_0dB=20;
PsByN_0=10.^(PsByN_0dB/10);
fval = ((-1./u).*log((d1^m)./(a.*n.*PsByN_0.*T.*u)+d1.^m).*a.*T)./(1-a).*T - (1./u).*log(expint(-Ps.*u)).*exp(-Ps.*u);
end
5 comentarios
Dhawal Beohar
el 17 de Feb. de 2022
Walter Roberson
el 17 de Feb. de 2022
You need to define Ps.
I am having difficulty finding Ps values that balance.
Dhawal Beohar
el 17 de Feb. de 2022
Editada: Walter Roberson
el 17 de Feb. de 2022
Dhawal Beohar
el 17 de Feb. de 2022
Walter Roberson
el 17 de Feb. de 2022
In your other Question I show that your revised code has no root (unless you count u = infinity)
Categorías
Más información sobre Linear Least Squares en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!




