我使用的是 SymPy 0.7.3 版本,在使用 dsolve 函数时遇到了一些问题。当输入方程的参数太多时,dsolve 似乎有困难。
我尝试解决以下等式:
from sympy import *
p = Function('p')
t, u1, u2, u3, u4, u5 = symbols('t u1 u2 u3 u4 u5')
eq = Eq(Derivative(p(t),t), -(u3 + u4)*p(t) + exp(-t*(u1 + u2)))
eq
Out: Derivative(p(t), t) == (-u3 - u4)*p(t) + exp(-t*(u1 + u2))
%time dsolve(eq)
并得到:
CPU times: user 213.11 s, sys: 0.00 s, total: 213.11 s
Wall time: 213.12 s
p(t) == (C1 + Piecewise((t*u1/(u1 + u2) + t*u2/(u1 + u2), u3 == u1 + u2 - u4), (-exp(t*u3)*exp(t*u4)/(u1*exp(t*u1)*exp(t*u2) + u2*exp(t*u1)*exp(t*u2) - u3*exp(t*u1)*exp(t*u2) - u4*exp(t*u1)*ex
p(t*u2)), True)))*exp(-t*(u3 + u4))
(耗时 213.12 秒!)
然后我用 u5 替换了 u1+u2:
eq = Eq(Derivative(p(t),t), -(u3 + u4)*p(t) + exp(-t*(u1 + u2))).subs(u1+u2, u5)
eq
Out:Derivative(p(t), t) == (-u3 - u4)*p(t) + exp(-t*u5)
%time dsolve(eq)
并得到:
CPU times: user 1.62 s, sys: 0.00 s, total: 1.62 s
Wall time: 1.62 s
p(t) == (C1 + Piecewise((t, u3 == -u4 + u5), (exp(t*u3)*exp(t*u4)/(u3*exp(t*u5) + u4*exp(t*u5) - u5*exp(t*u5)), True)))*exp(-t*(u3 + u4))
(只有 1.62 秒!)
我尝试过使用不同的提示,但没有帮助......
我还注意到,在更复杂的函数中,dsolve 会崩溃,但是在替换一些常量参数时,它运行得很快。
你知道这种现象的原因是什么吗?有没有办法自动解决这个问题?