Using "solve" on symbolic equation returns complex numbers when it shouldn't.
9 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Matthew Bartell
le 3 Août 2018
Commenté : Matthew Bartell
le 3 Août 2018
I have created a symbolic equation "sfun". When I try to use the "solve" function on sfun I get a complex (imaginary) number. However, when I run "fplot" on the same function you can clearly see that y = 0 around when x = 550. Why am I getting complex numbers? Thanks, Matt
global Cp T R;
%constants
rbar = 8.314;
M = 28.97;
A = 3.653;
B = -1.337*10^-3;
C = 3.294*10^-6;
D = -1.913*10^-9;
E = 0.2763*10^-12;
Ph = 990;
Pl = 100;
T1 = 288.15;
%derived constants
R = rbar/M;
Rp = Ph/Pl;
%variables
syms T;
%equations
Cp = R*(A + B*T + C*T^2 + D*T^3 + E*T^4);
%main
h1 = deltah(0, T1);
h1 = double(h1);
sfun = deltas(288.15, T, 100, 990);
T2s = solve(sfun == 0, T)
fplot(sfun, [400, 600])
%functions
function h = deltah(T1, T2)
global Cp T;
h = int(Cp, T, [T1 T2]);
end
function s = deltas(T1, T2, P1, P2)
global Cp T R;
s = int(Cp/T, T, [T1 T2]) - R*reallog(P2/P1);
end
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/193070/image.jpeg)
0 commentaires
Réponse acceptée
Aquatris
le 3 Août 2018
Because there is an imaginary root to that equation as well. If you were to evaluate your sfun using T2s you will see the result is pretty much zero, although not exactly due to numeric issues.
usubs(sfun,'T',T2s)
ans =
1.4e-33+6.4e-35i
If your symbolic variable T is real, you can define T as;
syms T real
which gave
T2s_Real = 550.71701819094995388330808691848
and after substituting the value to sfun gave
subs(sfun,'T',T2s_real)
ans =
1.45e-33
which is higher than the imaginary number solution.
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Special Values dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!