SymPy `solve` не может решить матричное уравнение A * x = b, когда символы заменяются значениями с` subs` - PullRequest
0 голосов
/ 02 января 2019

У меня есть линейное уравнение, которое я хочу решить, как 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

1 Ответ

0 голосов
/ 02 января 2019

Хм, я не уверен, почему 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]])
...