Корни уравнения: параметр не упрощается

#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 .