How to solve simultaneous equations?
12 ビュー (過去 30 日間)
古いコメントを表示
Valter Silva Nava
2021 年 2 月 14 日
コメント済み: Valter Silva Nava
2021 年 2 月 14 日
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 件のコメント
採用された回答
Walter Roberson
2021 年 2 月 14 日
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 件のコメント
Walter Roberson
2021 年 2 月 14 日
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?
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で Equation Solving についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
