How to solve symbolic system of equations?

25 次查看(过去 30 天)
Hello,
I am dynamically generating a system of symbolic linear equations that I trying to figure out how to solve. For example,
syms a b c
Eqs = [3*a + 4*b + 7*c + 11; 5*a + 3*b + 3*c + 4; 7*a + 13*b + 5*c + 9];
Since these equations are dynamically generated based on user parameters, the variables names can change and so forth, so that is why I need to do this symbolically.
If you do:
rref(Eqs)
you get ans =[1; 0; 0] which is weird.
If anyone knows how to solve this, please let me know. I would appreciate it. If anyone can let me know how to parse these symbolic expressions, I would appreciate it too. How to separate and isolate different variables.
Thanks, Ali

采纳的回答

Kenneth Eaton
Kenneth Eaton 2011-1-26
Easy, use the SOLVE function:
>> S = solve(Eqs)
S =
a: [1x1 sym]
b: [1x1 sym]
c: [1x1 sym]
And you can convert the symbolic results in these fields to numeric values using the functions SUBS or DOUBLE:
>> subs(S.a)
ans =
0.2773
Or you could convert all the fields to numeric values and place them in a vector with one call to STRUCTFUN:
>> structfun(@subs,S)
ans =
0.2773 % The value for a
-0.2455 % The value for b
-1.5500 % The value for c
  5 个评论
Ali
Ali 2011-1-26
Hi Kenneth,
Thanks again. That was a big help.
Now here is another issue that I am having. Sometimes, I have more equations than I have unknowns. I end up with an overly-constrained system.
I might end up with the following:
Eqs = [3*a + 4*b + 7*c + 11;
5*a + 3*b + 3*c + 4;
7*a + 13*b + 5*c + 9;
3*a + 17*b + 13*c + 5];
Is there any way of solving these equations without involving the use of the optimization toolbox and "linprog(...)??" linprog requires explicit "Aeq*x = Beq" type parameter specifications.
Which begs the question, is it possible to parse these symbolic expressions and separate value from variable?
Sorry for the long post. I would appreciate any help you can give me.
Thanks,
Ali
Walter Roberson
Walter Roberson 2011-1-27
You can use symvar() and coeff() to extract the variables and their coefficients from multinomial systems.

请先登录,再进行评论。

更多回答(1 个)

Paulo Silva
Paulo Silva 2011-1-27
%'3*a + 4*b + 7*c + 11=0' -> '3*a + 4*b + 7*c = -11'
%'5*a + 3*b + 3*c + 4=0' -> '5*a + 3*b + 3*c = -4'
%'7*a + 13*b + 5*c + 9=0' -> '7*a + 13*b + 5*c = -9'
A=[3 4 7
5 3 3
7 13 5];
B=[-11
-4
-9];
X=linsolve(A,B); or X=A\B , same results
a=X(1);
b=X(2);
c=X(3);

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by