为什么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既不起作用也不影响答案。你知道吗
显然,这类系统的解算器逻辑是不正确的;Iraised an issue。你知道吗
旁白:一个微分方程组的解中的常数可以用多种方法表示,它们没有一种标准形式。可以预期,方程的呈现顺序将影响方程的处理顺序(就像线性方程组一样),这将影响解的形式。你知道吗
但是,正如你所指出的,两种解决方案都不正确。这可以通过插入它们来检查:
第一批指纹
表示满足第2和第3个方程式,但不满足第1个方程式。你知道吗
第二个指纹
所以再一次,第一个方程无法正确求解,即使它现在是另一个。你知道吗
Sympy1.1.1发布后,增加了对初始条件的支持。它们在development version中工作,将在sympy1.2+中工作。你知道吗
相关问题 更多 >
编程相关推荐