How to solve symbolic system of equations?

23 views (last 30 days)
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

Accepted Answer

Kenneth Eaton
Kenneth Eaton on 26 Jan 2011
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 Comments
Ali
Ali on 26 Jan 2011
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 on 27 Jan 2011
You can use symvar() and coeff() to extract the variables and their coefficients from multinomial systems.

Sign in to comment.

More Answers (1)

Paulo Silva
Paulo Silva on 27 Jan 2011
%'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!