Sympy dsolve答案取决于输入的顺序?

2024-05-20 16:26:12 发布

您现在位置:Python中文网/ 问答频道 /正文

为什么sympy的dsolve函数给出的答案取决于方程的给出顺序?你知道吗

这个顺序(x,y,z):

    k2, k3, t = symbols('k2 k3 t')
    x,y,z = symbols('x y z', function=True)

    eq = (Eq(Derivative(x(t),t), k3*y(t)), Eq(Derivative(y(t),t), -(k3+k2)*y(t)), Eq(Derivative(z(t),t), k2*y(t)))
    dsolve(eq)

提供:

   [Eq(x(t), C1 + C2*t + C3*k3*exp(t*(-k2 - k3))/k2), Eq(y(t), -C3*(k2 + k3)*exp(t*(-k2 - k3))/k2), Eq(z(t), C2 + C3*exp(t*(-k2 - k3)))]

但当eq的阶数改变时(先是z,然后是x,然后是y):

    k2, k3, t = symbols('k2 k3 t')
    x,y,z = symbols('x y z', function=True)

    eq = (Eq(Derivative(z(t),t), k2*y(t)), Eq(Derivative(x(t),t), k3*y(t)), Eq(Derivative(y(t),t), -(k3+k2)*y(t)))

    dsolve(eq, ics={z(0):0, x(0):0, y(0):1})

答案是不同的。你知道吗

[Eq(z(t), C1 + C2*t - C3*k2*exp(t*(-k2 - k3))/(k2 + k3)), Eq(x(t), C2 - C3*k3*exp(t*(-k2 - k3))/(k2 + k3)), Eq(y(t), C3*exp(t*(-k2 - k3)))]

除此之外,dsolve给出的答案在这两种情况下都是不正确的。尤其是常数C1,C2和C3是不正确的。将初始条件设为ics={x(0):0,y(0):1,…etc既不起作用也不影响答案。你知道吗


Tags: 答案true顺序functionk2eqicssymbols
1条回答
网友
1楼 · 发布于 2024-05-20 16:26:12

显然,这类系统的解算器逻辑是不正确的;Iraised an issue。你知道吗

旁白:一个微分方程组的解中的常数可以用多种方法表示,它们没有一种标准形式。可以预期,方程的呈现顺序将影响方程的处理顺序(就像线性方程组一样),这将影响解的形式。你知道吗

但是,正如你所指出的,两种解决方案都不正确。这可以通过插入它们来检查:

eq1 = (Eq(Derivative(x(t),t), k3*y(t)), Eq(Derivative(y(t),t), -(k3+k2)*y(t)), Eq(Derivative(z(t),t), k2*y(t)))
sol1 = dsolve(eq1)
print([eqn.subs({e.lhs: e.rhs for e in sol1}).doit().simplify() for eqn in eq1])
eq2 = (Eq(Derivative(z(t),t), k2*y(t)), Eq(Derivative(x(t),t), k3*y(t)), Eq(Derivative(y(t),t), -(k3+k2)*y(t)))
sol2 = dsolve(eq2)
print([eqn.subs({e.lhs: e.rhs for e in sol2}).doit().simplify() for eqn in eq2])

第一批指纹

[Eq(C3*k3*(k2 + k3)*exp(-t*(k2 + k3))/k2, -(C2*k2*exp(t*(k2 + k3)) - C3*k3*(k2 + k3))*exp(-t*(k2 + k3))/k2),
 True,
 True]

表示满足第2和第3个方程式,但不满足第1个方程式。你知道吗

第二个指纹

[Eq(C3*k2*exp(-t*(k2 + k3)), C2 + C3*k2*exp(-k2*t)*exp(-k3*t)), True, True]

所以再一次,第一个方程无法正确求解,即使它现在是另一个。你知道吗

Giving the initial conditions as ics={x(0):0, y(0):1,...etc doesn't work or influence the answer.

Sympy1.1.1发布后,增加了对初始条件的支持。它们在development version中工作,将在sympy1.2+中工作。你知道吗

相关问题 更多 >