【问题标题】:Solving Differential Equation Sympy求解微分方程 Sympy
【发布时间】:2016-08-15 06:18:16
【问题描述】:

我无法找到这个微分方程的特定解。

from sympy import *

m = float(raw_input('Mass:\n> '))
g = 9.8
k = float(raw_input('Drag Coefficient:\n> '))
v = Function('v')
f1 = g * m
t = Symbol('t')
v = Function('v')
equation = dsolve(f1 - k * v(t) - m * Derivative(v(t)), 0)
print equation

对于 m = 1000 和 k = .2 它返回

Eq(f(t), C1*exp(-0.0002*t) + 49000.0)

这是正确的,但我希望求解当 v(0) = 0 时应该返回的方程

Eq(f(t), 49000*(1-exp(-0.0002*t))

【问题讨论】:

    标签: python-2.7 sympy


    【解决方案1】:

    我相信 Sympy 还不能考虑初始条件。尽管dsolve 具有用于输入初始条件的选项ics(请参阅文档),但它的用途似乎有限。

    因此,您需要手动应用初始条件。例如:

    C1 = Symbol('C1')
    C1_ic = solve(equation.rhs.subs({t:0}),C1)[0]
    
    print equation.subs({C1:C1_ic})
    

    Eq(v(t), 49000.0 - 49000.0*exp(-0.0002*t))

    【讨论】:

    • 这很好用,是否有任何 python 包可以更好地找到微分方程的特定解?
    • @JessieCotton 我不知道除了 Sympy 之外的任何其他 python 符号数学包。但是,我认为上述方法对于大多数情况下(一般)差异解决方案来说已经足够了。等式。可以找到封闭形式。
    • 这种ODE的初始条件求解应该在下一版本的SymPy中实现github.com/sympy/sympy/pull/11264
    • 现在有没有更好的 sympy dsolve 方法?我正在尝试 ics 参数,但它似乎不起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-29
    • 1970-01-01
    • 2014-05-15
    • 1970-01-01
    • 2021-11-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多