Solve fails to find a solution for trivial linear system
1 visualización (últimos 30 días)
Mostrar comentarios más antiguos
Daniel
el 5 de Mzo. de 2016
Comentada: Walter Roberson
el 6 de Mzo. de 2016
I'm trying to find the value of G in the following set of equations by code:
clear all; clc;
syms R T S u yr y B A G
eq1 = R*u == T*yr - S*y;
eq2 = y == (B/A)*u;
eq3 = y == G*yr;
solve([eq1,eq2,eq3], G)
However, solve fails with an empty solution set, although this system has a trivial answer.
It's easy to see how it can be done, from eq1:
u == (T*yr - S*y)/R
From eq2:
y == (B/A)*(T*yr - S*y)/R
Thus:
y = yr*(B*T)/(A*R + B*S)
Finally, from eq3:
G = (B*T)/(A*R + B*S)
I can't understand why solve fails in this case. I appreciate any help I can get.
0 comentarios
Respuesta aceptada
Walter Roberson
el 6 de Mzo. de 2016
Actually it is just a matter of telling it all three variables to solve for:
solve(eq1, eq2, eq3, y, u, G)
2 comentarios
Walter Roberson
el 6 de Mzo. de 2016
When you do not specify the other variables, the best you could have hoped for was that G was returned as y/yr, from the third equation, as it would have had no reason to know which other variables to eliminate.
Más respuestas (1)
Star Strider
el 6 de Mzo. de 2016
Sometimes, you have to lead it gently by the hand:
syms R T S u yr y B A G
eq1 = R*u == T*yr - S*y;
eq2 = y == (B/A)*u;
eq3 = y == G*yr;
eq4 = solve(eq2, eq3);
yr = eq4.yr;
eq5 = subs(eq1, yr);
G_solved = solve(eq5, G)
G_solved =
-(B*S*u)/(A*(R*u - T*yr))
Ver también
Productos
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!