MATLAB: How to solve simultaneous equations

solvesyms

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)

Best Answer

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)
sol = struct with fields:
x: [16×1 sym] y: [16×1 sym] z: [16×1 sym] parameters: [1×0 sym] conditions: [16×1 sym]
16 solutions.
sol.conditions
ans = 
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])
ans = 
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