From f352ef9a0ab5fbc784becdef65e20fe10d80e67e Mon Sep 17 00:00:00 2001 From: Michael Orlitzky Date: Fri, 9 May 2014 03:10:38 -0400 Subject: [PATCH] Add the matrix_subs_expr function. --- mjo/symbolic.py | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/mjo/symbolic.py b/mjo/symbolic.py index e2645a3..ec3fc99 100644 --- a/mjo/symbolic.py +++ b/mjo/symbolic.py @@ -44,3 +44,45 @@ def safe_simplify(expr): expr = expr.simplify_factorial() expr = expr.simplify_log() return expr + + +def matrix_subs_expr(m, *equations): + """ + Symbolic matrices have a `subs()` method, but no `subs_expr()`. + This makes it diffucult to substitute in a list of solutions obtained + with `solve()`. + + INPUT: + + - ``m`` -- A symbolic matrix. + + - ``equations`` - One or more symbolic equations, presumably for + the entries of `m`. + + OUTPUT: + + The result of substituting each equation into `m`, one after another. + + EXAMPLES:: + + sage: w,x,y,z = SR.var('w,x,y,z') + sage: A = matrix(SR, [[w,x],[y,z]]) + sage: matrix_subs_expr(A, w == 1, x == 2, y == 3, z == 4) + [1 2] + [3 4] + + """ + from sage.symbolic.expression import is_SymbolicEquation + + if not m.base_ring() == SR: + raise TypeError, 'the matrix "m" must be symbolic' + + if isinstance(equations[0], dict): + eq_dict = equations[0] + equations = [ x == eq_dict[x] for x in eq_dict.keys() ] + + if not all([is_SymbolicEquation(eq) for eq in equations]): + raise TypeError, "each expression must be an equation" + + d = dict([(eq.lhs(), eq.rhs()) for eq in equations]) + return m.subs(d) -- 2.44.2