替换可以通过
subs
:
rešitev.subs({sym.Symbol('C1'): C1[0], sym.Symbol('C2'): C2[0]})
然而,你发现常数的过程是不正确的;你可以看到“常数”包含变量t。这是因为公式中x和t的混合。以下是更正版本:
import sympy as sym
x, g, K, m, t = sym.symbols('x, g, K, m, t', positive=True, real=True)
dxx = sym.Eq(x(t).diff(t, 2), g - K/m*x(t).diff(t))
rešitev = sym.dsolve(dxx)
y_res = rešitev.args[1]
C2_enaÄba = sym.Eq(sym.diff(y_res, t).subs(t, 0), 0) # derivative at 0 is 0
C2 = sym.solve(C2_enaÄba, 'C2')
C1_subs = y_res.subs(t, 0)
C1_enaÄba = sym.Eq(C1_subs, 0) # the value at 0 is 0
C1 = sym.solve(C1_enaÄba, 'C1')
answer = rešitev.subs({sym.Symbol('C1'): C1[0], sym.Symbol('C2'): C2[0]})
答案是
Eq(x(t), g*m*t/K - g*m**2/K**2 + g*m**2*exp(-K*t/m)/K**2)
但是如果您使用
current master branch of SymPy
来自GitHub,其中初始和边界条件
dsolve
已实施。
import sympy as sym
x, g, K, m, t = sym.symbols('x, g, K, m, t', positive=True, real=True)
dxx = sym.Eq(x(t).diff(t, 2), g - K/m*x(t).diff(t))
ics = {x(0): 0, x(t).diff(t).subs(t, 0): 0}
answer = sym.dsolve(dxx, ics=ics)
答案同上,
等式(x(t),g*m*t/K-g*m**2/K**2+g*m**2*exp(-K*t/m)/K**2)