Python 使用Symphy方程解算器/Symphy的if条件非常慢
我想用以下参数来解这个方程:Python 使用Symphy方程解算器/Symphy的if条件非常慢,python,list,numpy,sympy,Python,List,Numpy,Sympy,我想用以下参数来解这个方程: gamma = 0.1 F = 0.5 w = 0 A = symbols('A') a = 1 + w**4 -w**2 + 4*(gamma**2)*w**2 b = 1 - w**2 sol = solve(a*A**2 + (9/16)*A**6 + (3/2)*b*A**4 -F**2) list_A = [] for i in range(len(sol)): if(type( solutions[i] )==float ):
gamma = 0.1
F = 0.5
w = 0
A = symbols('A')
a = 1 + w**4 -w**2 + 4*(gamma**2)*w**2
b = 1 - w**2
sol = solve(a*A**2 + (9/16)*A**6 + (3/2)*b*A**4 -F**2)
list_A = []
for i in range(len(sol)):
if(type( solutions[i] )==float ):
print(sol[i])
list_A = sol[i]
然而,正如所设想的,我得到了一些真实和复杂的值,我想删除复杂的值,只保留浮动。但是我实现的这个条件是无效的,因为sol[I]的类型对于复数是sympy.core.add.add
,对于浮点数是sympy.core.numbers.Float
。
我的问题是,如何修改我的条件,使其仅用于获取浮点值?
另外,有没有办法加快速度?如果我把它放在一个循环中,得到很多ω值,速度会非常慢。
这是我第一次使用Symphy当它能够验证与符号假设相关的解决方案时,它将;因此,如果你告诉SymPy,
A
是真实的,那么——如果它能验证解决方案——它只会显示真实的解决方案:
>>> A = symbols('A',real=True)
>>> sol = solve(a*A**2 + (9/16)*A**6 + (3/2)*b*A**4 -F**2)
>>> sol
[-0.437286658108243, 0.437286658108243]