【问题标题】:if condition using sympy equation solver/ sympy very slow如果条件使用 sympy 方程求解器/sympy 非常慢
【发布时间】:2021-05-02 04:38:42
【问题描述】:

我想用以下参数求解这个方程:

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 用于浮点数。 我的问题是,我怎样才能修改我的条件,使其仅适用于获取浮点值? 另外,有没有办法加快速度?如果我将它放在一个循环中以获得许多欧米茄值,它会非常慢。 这是我第一次使用sympy

【问题讨论】:

    标签: python list numpy sympy


    【解决方案1】:

    当它能够验证与符号假设相关的解决方案时,它会;所以如果你告诉 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]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多