首页 > 解决方案 > 在python中使用solve()函数引发异常错误

问题描述

我正在尝试使用以下代码在 python 中求解一个方程:

import math
from math import *    # cos, sin, asin, sqrt, radians, pi, tanh, log, exp
import time
from sympy import *
from sympy.solvers import solve

m = 0.2; d = 0.08; A = 0.25*math.pi*(d**2); g = 9.80665; Cd = 0.47; P = 1.145; H = 15; Vdr = 5; Vwx = 1; Vwz = 1;
t = symbols('t')
y = Eq(((m/(A*Cd*P))*log(-exp(A*H*Cd*P/m)*(tanh(((0.5/m)*sqrt(2*A*Cd*P*g*m)*t)**2-1)))), 0)
tHit = solve(y, t)
print("t =", tHit)
x = (2*m/(A*Cd*P))*log(1+(0.5*A*Cd*P/m)*(Vdr+Vwx)*tHit)
z = Vwz*tHit
print("x =", x, "   z =", z)

几分钟后,我在使用该solve()函数的线路上收到异常抛出错误。任何人都知道可能是什么原因?我对python没有太多经验,所以如果代码有问题,我想知道。谢谢

** 编辑 ** 所以我终于修复了代码,它现在可以工作了:

import math
from math import * 
import time
import sympy
from sympy import *

m = 0.2; d = 0.08; A = 0.25*math.pi*(d**2); g = 9.80665; Cd = 0.47; P = 1.145; H = 15; Vdr = 5; Vwx = 1; Vwz = 1;
t = Symbol('t')
y = (m*sympy.log(-sympy.exp((A*Cd*H*P)/m)*(sympy.tanh((0.5*t*(2*A*Cd*P*g*m)**(1/2))/m)**2 - 1)))/(A*Cd*P)
print("y =", y)
tHit = nsolve(y, t, 0)
print("t =", tHit)
x = (2*m/(A*Cd*P))*log(1+(0.5*A*Cd*P/m)*(Vdr+Vwx)*tHit)
z = Vwz*tHit
print("x =", x, "   z =", z)

标签: python

解决方案


这段代码也不例外。它永远不会结束。我运行这段代码一段时间,它从未完成。然而,内存一直在增加,直到占用所有可用内存。

你确定这个方程可以用 sympy 解决吗?也许它的算法对这样的方程无效?

不幸的是 sympy 没有完成估计(估计 SymPy 函数的进度),所以你可以在这一点上:

  1. 尝试在其他软件中解决这个问题(也许是 Wolfram Alpha?)
  2. 给它更多资源并等待
  3. 尝试将方程重写为其他可能通过 sympy 解决的形式

推荐阅读