Using "solve" on symbolic equation returns complex numbers when it shouldn't.
14 views (last 30 days)
Show older comments
Matthew Bartell
on 3 Aug 2018
Commented: Matthew Bartell
on 3 Aug 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 Comments
Accepted Answer
Aquatris
on 3 Aug 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.
More Answers (0)
See Also
Categories
Find more on Calculus in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!