Sympy ODE 求解器初始条件无效
Sympy ODE solver initial conditions have no effect
我想用dsolve
来解决一个初值问题,但是初始条件ics
似乎没有效果。示例中的两个 dsolve
给出相同的结果。
from sympy import *
x = symbols('x')
f = Function('f')
eq = Eq(Derivative(f(x), x), f(x))
# No initial condition
pprint(dsolve(eq, f(x)))
# With initial condition f(0) = 1
pprint(dsolve(eq, f(x), ics={f(0):1}))
在这两种情况下,我得到了相同的解决方案
x
f(x) = C1 ℯ
即使使用 ics
,C1
也不会被值 1
替换。 mentions sympy issue 4720 但该问题现已关闭。我正在使用 SymPy 1.1.1。
PR implementing the initial conditions 不是 SymPy 1.1.1 的一部分,但应该在 1.2 中。你可以通过执行
来测试你的SymPy版本是否有它
from sympy.solvers.ode import solve_ics
(如果它抛出错误,则您没有 ICS 支持,除了幂级数)。除了你提到的 post 之外,我的 有一个简短的讨论如何使用 solve
(它有在不同情况下返回不同类型的习惯)来查找和替换常量.
eq = Eq(Derivative(f(x), x), f(x))
sol = dsolve(eq, f(x)).rhs
constants = solve([sol.subs(x,0)-1], dict=True)
print(sol.subs(constants[0]))
我想用dsolve
来解决一个初值问题,但是初始条件ics
似乎没有效果。示例中的两个 dsolve
给出相同的结果。
from sympy import *
x = symbols('x')
f = Function('f')
eq = Eq(Derivative(f(x), x), f(x))
# No initial condition
pprint(dsolve(eq, f(x)))
# With initial condition f(0) = 1
pprint(dsolve(eq, f(x), ics={f(0):1}))
在这两种情况下,我得到了相同的解决方案
x
f(x) = C1 ℯ
即使使用 ics
,C1
也不会被值 1
替换。
PR implementing the initial conditions 不是 SymPy 1.1.1 的一部分,但应该在 1.2 中。你可以通过执行
来测试你的SymPy版本是否有它from sympy.solvers.ode import solve_ics
(如果它抛出错误,则您没有 ICS 支持,除了幂级数)。除了你提到的 post 之外,我的 solve
(它有在不同情况下返回不同类型的习惯)来查找和替换常量.
eq = Eq(Derivative(f(x), x), f(x))
sol = dsolve(eq, f(x)).rhs
constants = solve([sol.subs(x,0)-1], dict=True)
print(sol.subs(constants[0]))