``scipy.odeint`` 给出不同于分析的答案

计算科学 Python scipy
2021-12-19 06:52:33

我正在使用scipy.integrate.odeint函数,颂歌是

y dxx dy(x+y)2+dy=dx

有溶液

y2x2y=c(x+y) .

通过解决它odeint

from scipy.integrate import odeint
import numpy as np
import matplotlib.pyplot as plt
def dy_dx(y, x):
  return ((x+y)**2 - y)/((x+y)**2 - x)

xs = np.linspace(1,100,100)
y0 = 1
ys = odeint(dy_dx, y0, xs ,atol = 2)

ys = np.array(ys).flatten()

plt.plot(xs, ys)
plt.xlabel("x")
plt.ylabel("y")

在此处输入图像描述

这肯定与答案不符。可能出了什么问题?

1个回答

什么都不会出错。

  • 的微分方程是: 显然如果,你有,即一样“快” 因此,如果对于您的初始条件,它将保持这种状态。

    dydx=(x+y)2y(x+y)2x
    x=ydydx=1xyx=y

  • 您的初始条件是并且您的数值结果看起来像x=y=1x=y

  • 对于分别求解您的分析解决方案(“已解决的答案”)。c=12c=12x=y