#python #parameters #equation #sympy
#питон #параметры #уравнение #сочувствие
Вопрос:
Я использую Python с Sympy.
Мне нужно решить следующее уравнение, найдя 4 корня (омега — мое неизвестное).:
deter= 0.6*omega**4*cos(omega*t)**2 - 229.0*omega**2*cos(omega*t)**2 5880.0*cos(omega*t)**2
Я попытался использовать solve:
eqcarr=solve(deter,omega,exclude=[t])
Я получаю этот результат:
[-18.8143990830350, -5.26165884593044, 5.26165884593044, 18.8143990830350, 1.5707963267949/t, 4.71238898038469/t]
Мне нужны только первые 4 значения, а не значения с коэффициентом t. Я ожидаю, что cos (omega * t) ** 2 будет упрощен в решении, но этого не происходит.
Ответ №1:
Согласно документации solve
, не будет решаться ни для одного из свободных символов, переданных в exclude
.
‘exclude=[] (по умолчанию)’ не пытайтесь решать для любого из свободных символов в exclude; если заданы выражения, свободные символы в них будут извлечены автоматически.
Он не предназначен для фильтрации решения.
Вы можете решить свою проблему, выполнив это:
In [10]: from sympy import *
In [11]: from sympy.abc import omega, t
In [12]: deter= 0.6*omega**4*cos(omega*t)**2 - 229.0*omega**2*cos(omega*t)**2 5880.0*cos(omega*t)**2
In [13]: eqcarr=solve(deter,omega,exclude=[t])
In [14]: filtered = [i for i in eqcarr if not i.has(t)]
In [15]: filtered
Out[15]: [-18.8143990830350, -5.26165884593044, 5.26165884593044, 18.8143990830350]
Комментарии:
1. Это решение работает, но я хотел бы знать значение решений с помощью t, чтобы я мог понять, как ими управлять.
2. Переданное
t
вами в выражении является просто символом и не имеет присвоенного ему значения. Поэтому он будет отображаться так, как есть в некоторых решениях.3. Решения исходят из того факта, что вы можете выделить a
cos(omega*t)**2
из своего выражения. Два решения сt
нимиcos(omega*t)
равны 0. Символически этоpi/(2*t)
и3*pi/(2*t)
. Остальные четыре корня являются корнями многочлена0.6*omega**4 - 229.0*omega**2 5880.0
.