manpagez: man pages & more
info ginac
Home | html | info | man
[ < ] [ > ]   [ << ] [ 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.


© manpagez.com 2000-2024
Individual documents may contain additional copyright information.