| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
5.14 Solving linear systems of equations
The function lsolve() provides a convenient wrapper around some
matrix operations that comes in handy when a system of linear equations
needs to be solved:
ex lsolve(const ex & eqns, const ex & symbols,
unsigned options = solve_algo::automatic);
|
Here, eqns is a lst of equalities (i.e. class
relational) while symbols is a lst of
indeterminates. (See section The class hierarchy, for an exposition of class
lst).
It returns the lst of solutions as an expression. As an example,
let us solve the two equations a*x+b*y==3 and x-y==b:
{
symbol a("a"), b("b"), x("x"), y("y");
lst eqns, vars;
eqns = a*x+b*y==3, x-y==b;
vars = x, y;
cout << lsolve(eqns, vars) << endl;
// -> {x==(3+b^2)/(b+a),y==(3-b*a)/(b+a)}
|
When the linear equations eqns are underdetermined, the solution
will contain one or more tautological entries like x==x,
depending on the rank of the system. When they are overdetermined, the
solution will be an empty lst. Note the third optional parameter
to lsolve(): it accepts the same parameters as
matrix::solve(). This is because lsolve is just a wrapper
around that method.
