#python #sympy #solver #coefficients #linear-equation
Вопрос:
Я пытаюсь найти коэффициенты выражения в sympy.
Я сделал код, но он выдает неверный вывод. первый(приведенный ниже) код-это то, как я пытаюсь написать программу(хотя это и не совсем правильно).
import sympy as sp
a0, a1, a2, a3, x = sp.symbols("a_0 a_1 a_2 a_3 x")
v = a0 a1*x a2*x**2 a3*x**3
display(v)
print("========================================================================")
v1, θ1, v2, θ2, L = sp.symbols("v1 θ_1 v2 θ_2 L")
v = v.subs([(a0, v1), (a1, θ1*v2), (a2, L*v2 v1 θ1/θ2), (a3, θ1*θ2)])
display(v)
print("========================================================================")
display(v.coeff(x, 2))
display(v.coeff(v2))
display(v.coeff(θ2))
Это и есть результат.
Здесь, даже несмотря a0, a1, a2 and a3
на то, что я заменил другие комбинации символов, я все равно могу вызвать .coeff()
функцию и получить коэффициент(хотя во втором случае это неверно v2
).
У меня есть другой код, в котором я делаю еще кое-что
import sympy as sp
a0, a1, a2, a3, x, L = sp.symbols("a_0 a_1 a_2 a_3 x L")
v1, θ1, v2, θ2 = sp.symbols("v1 θ_1 v2 θ_2")
v = a0 a1*x a2*x**2 a3*x**3 # Equation
θ = sp.diff(v, x)
display(v, θ)
print("=============================================================")
v_1 = v.subs(x, 0) # substituting values for x
θ_1 = θ.subs(x, 0)
v_2 = v.subs(x, L)
θ_2 = θ.subs(x, L)
display(v_1, θ_1, v_2, θ_2)
# now we got 4 equations in terms of a0, a1, a2 and a3
print("==============================================================")
A = sp.solve((v_1 - v1, θ_1 - θ1, v_2 - v2, θ_2 - θ2), a0, a1, a2, a3)
# solving system of 4 equations in terms of a0, a1, a2 and a3
display(A)
print("==============================================================")
A0, A1, A2, A3 = A[a0], A[a1], A[a2], A[a3]
display(A0, A1, A2, A3)
print("==============================================================")
v = v.subs([(a0, A0), (a1, A1), (a2, A2), (a3, A3)])
display(v)
print("==============================================================")
display(v.coeff(x, 2)) # this works for x, x**2, x**3 etc
print("==============================================================")
display(v.coeff(v1), v.coeff(θ1), v.coeff(v2), v.coeff(θ2)) # THIS GIVES WRONG ANSWER
Это вывод нового кода. Все в этом коде правильно, за исключением последней строки, которая выдает неверный вывод.
Здесь, когда я звоню .coeff()
v1, θ1, v2, θ2
, я не получаю правильного ответа.
Приведенный выше правильный ответ:
Я пытаюсь получить такой ответ. Кто-нибудь может помочь? Я думаю, что проблема в .solve()
том, и это вывод. Кто-нибудь может мне помочь?
Спасибо.
Комментарии:
1. Обычно вы должны использовать
expand
его раньшеcoeff
.
Ответ №1:
Моя вина. Следовало сделать v = v.expand()
это раньше .coeff()
.