How to solve simultaneous equations?
14 views (last 30 days)
Show older comments
Valter Silva Nava
on 14 Feb 2021
Commented: Valter Silva Nava
on 14 Feb 2021
Hello,
How can I solve a non linear system of three equations with three variables? There is a variable raised to the fourth power that complicates the system. That is why I tried to get a only true solution using, 'PrincipalValue'.
Thanks for the help.
syms x y z
eqn1 = 1500*(20-x)+1.5309E-05*(293^4-(x+273)^4) == z;
eqn2 = 20000*(x-y) == z;
eqn3 = 3600*(y-10)+1.5309E-05*((y+273)^4-100^4) == z;
eqns = [eqn1,eqn2,eqn3];
vars = [x y z];
[solx, soly, solz] = solve(eqns, vars, 'PrincipalValue',true)
0 Comments
Accepted Answer
Walter Roberson
on 14 Feb 2021
syms x y z
eqn1 = 1500*(20-x)+1.5309E-05*(293^4-(x+273)^4) == z;
eqn2 = 20000*(x-y) == z;
eqn3 = 3600*(y-10)+1.5309E-05*((y+273)^4-100^4) == z;
eqns = [eqn1,eqn2,eqn3];
vars = [x y z];
sol = solve(eqns, vars, 'returnconditions',true)
16 solutions.
sol.conditions
and they are unconditional.
So there are 16 "true" solutions.
Perhaps you only want real-valued ones?
vx = vpa(sol.x); vy = vpa(sol.y); vz = vpa(sol.z);
mask = imag(vx) == 0 & imag(vy) == 0 & imag(vz) == 0;
realx = vx(mask);
realy = vy(mask);
realz = vz(mask);
([realx, realy, realz])
So there are two "true" solutions that also happen to be real-valued. This was predictable: degree 16 polynomials in real roots always have an even number of real roots.
If you wanted to ignore some of the valid solutions even further, you could further test realx > 0
2 Comments
Walter Roberson
on 14 Feb 2021
I would, by the way, point out that asking for exact solutions to systems with floating point coefficients is like asking for exactly how many molecules are in a bottle of beer that is "about" half-full. (How big is the bottle, exactly ? How close to "half full" is "about" half full, exactly ?). It is is a category error to use solve() with any equations with floating point coefficients.
eqn1 = 1500*(20-x)+1.5309E-05*(293^4-(x+273)^4) == z;
273 ? really?? You give 5 significant digits to 1.5309, so why did you only give 3 significant digits to 273 and 293? 0 C is 273.1600(1) K https://en.wikipedia.org/wiki/Kelvin -- 293.16 exactly until 2019.
What is the point of asking for exact solutions to equations that are wrong?
More Answers (0)
See Also
Categories
Find more on Equation Solving 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!