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 的对数图,它实际上看起来并不像这个特定的方程式有任何真正的解决方案(假设这就是你想要的)。
我目前正在尝试求解 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 的对数图,它实际上看起来并不像这个特定的方程式有任何真正的解决方案(假设这就是你想要的)。