【问题标题】:SymPy `solve` fails to solve Matrix equation A*x = b when symbols are replaced by values with `subs`SymPy `solve` 无法求解矩阵方程 A*x = b 当符号被替换为具有 `subs` 的值时
【发布时间】:2019-01-02 17:29:48
【问题描述】:

我有一个线性方程要求解,如Ax = b。我只想在符号中逐步显示,最后插入数字并用数字显示问题的解决方案。我在插入数字时遇到问题。如果先前计算的值是整数,则一切正常。当我输入带有小数的东西时,它会打印出来

[]

这是说明我的问题的简化代码:

Force = 100 #If I try to put in value of lets say 100.23 the problem happens
x_t = 15
L = 20
A, x, b = sym.symbols('A, x, b')
A_x, A_y, B_y = sym.symbols('A_x, A_y, B_y')
b, F, xt, l = sym.symbols('b, F, xt, L')

A = sym.Matrix([[1, 0, 0],
            [0, 1, 0],
            [0, 0, 1]])
b = sym.Matrix([[0],
            [F],
            [F*xt/l]])
x = sym.Matrix([[A_x],
            [A_y + B_y],
            [B_y]])

linear_eq = sym.Eq(A * x, b)
solution = sym.solve(linear_eq, x) #This always works fine(only symbols)
solution = sym.solve(linear_eq.subs( {F: Force, xt: x_t, l: L }), x )
solution

【问题讨论】:

    标签: python sympy linear-equation


    【解决方案1】:

    嗯,我不知道为什么solve 根本不起作用。不过,您可以使用LUsolve。这也适用于F: 100.23

    from sympy import *
    
    A, x, b = symbols("A, x, b")
    A_x, A_y, B_y = symbols("A_x, A_y, B_y")
    b, F, x_t, L = symbols("b, F, x_t, L")
    
    A = Matrix([
        [1, 0, 0],
        [0, 1, 0],
        [0, 0, 1]
    ])
    x = Matrix([
        [A_x],
        [A_y + B_y],
        [B_y]
    ])
    b = Matrix([
        [0],
        [F],
        [F * x_t / L]
    ])
    
    solution = A.LUsolve(b.subs({
        F: 100.23,
        x_t: 15,
        L:20
    }))
    print(solution)
    

    哪些打印:

    Matrix([[0], [100.230000000000], [75.1725000000000]])
    

    【讨论】:

    • 使用 LU 分解,很好!我唯一担心的是,当我们知道 A 将始终保持不变而 b 会改变时,通常会使用 LU……但是如果两者都保持不变,从完全理论上正确的角度来看,这是没有意义的,我们避免使用它。此外,您获得的“打印”与我使用 sympy 获得的其他所有内容都不相同。如果我没有找到任何其他方式,这是一个完美的解决方案。谢谢!
    猜你喜欢
    • 2020-11-24
    • 2015-09-08
    • 1970-01-01
    • 2012-10-01
    • 2013-02-01
    • 2021-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多