Sympy 在使用 solve 求解方程时非常慢

Sympy very slow at solving equations using solve

我目前正在尝试求解 T 的方程,但不幸的是,由于程序 运行 的时间太长,我无法得到解决方案。 有没有办法加快求解方程的时间?

代码:

Psat_scale = 101325/760

Zi, a, b, c, T, P, VF = symbols('Zi a b c T P VF')

Ki = (exp(a-(b/(T+c)))*Psat_scale)/P
RR = 0

# Costants
P_val = 1
z_vals = [0.4, 0.6]
a_vals = [15.9008, 16.0963]
b_vals = [2788.51, 3346.65]
c_vals = [-52.36, -57.84]

# Part 2
for i in range(2):
  Ki_val = Ki.subs(a, a_vals[i]).subs(b, b_vals[i]).subs(c, c_vals[i]).subs(P, P_val)
  temp_RR_numerator = z_vals[i]*(Ki_val-1)
  temp_RR_denominator = 1+(Ki_val-1)*0
  RR += (temp_RR_numerator/temp_RR_denominator)

RR_equ = Eq(RR, 0)

print(solve(RR_equ, T, simplify=True))

solve之所以慢是因为它默认将浮点数转换为有理数,然后在这里它最终试图求解一个非常大的多项式方程。如果你通过 rational=False 那么它会更快但不会给出解决方案:

print(solve(RR_equ, T, simplify=True, rational=False))
...
NotImplementedError: multiple generators [exp(2788.51/(T - 52.36)), exp(3346.65/(T - 57.84))]
No algorithms are implemented to solve equation -1.0 + 0 + 429133787.110874*exp(-2788.51/(T - 52.36)) + 782687755.282661*exp(-3346.65/(T - 57.84))

solve 函数用于求解析解,但您的方程不太可能有解析解:

In [4]: RR_equ
Out[4]: 
                         -2788.51                      -3346.65     
                         ─────────                     ─────────    
                         T - 52.36                     T - 57.84    
-1.0 + 429133787.110874⋅ℯ          + 782687755.282661⋅ℯ          = 0

可能您想使用的是 nsolve 之类的东西,但这在这种情况下不起作用,因为由于非常大的指数项,方程是病态的。快速查看 lhs 的对数图,它实际上看起来并不像这个特定的方程式有任何真正的解决方案(假设这就是你想要的)。