常微分方程初值问题的数值解法
Jackie

常微分方程初值问题的数值解法

未知函数为一元函数的微分方程叫作常微分方程,未知函数为多元函数,从而有多元函数偏导数的方程叫作偏微分方程。微分方程中各阶导数的最高阶数是微分方程的阶。这里讨论一阶常微分方程的初值问题的数值解法

{y=f(x,y)y(x0)=y0\begin{cases} y' = f(x, y) \\ y(x_0) = y_0 \end{cases}

常微分方程初值问题的数值解法一般分为以下两大类:

  1. 单步法。单步法是在计算yn+1时,只用到xn+1,xn和yn,即前一步的值。因此,有了初值以后就可以逐步往下计算,其代表是龙格——库塔法

  2. 多步法。多步法是在计算yn+1时,除用到xn+1,xn和yn以外,还要用到xn−p,yn−p(p=1,2,⋯,k),即前面k步的值,其代表是亚当斯法

  • 李普希茨条件

函数f(x,y)对x连续且关于y满足李普希茨(Lipschitz)条件:

f(x,y1)f(x,y2)Ly1y2.|f(x,y_1)-f(x,y_2)|\le L|y_1-y_2|.

L>0。称为"lipschitz"常数即存在常数L,对所有的[a,b]区间的x,及任意实数y1,y2均成立,则初值问题在区间[a,b]上有唯一解

此时的Lipschitz常数L不必小于1,这一点与前面章节中讲过的压缩映射的条件有所不同

欧拉法

欧拉(Euler)法是过点P0(x0,y0)作曲线y(x)的切线y’(x0)与直线x=x1交于点P1(x1,y1),用y1作为曲线y(x)上的点(x1,y(x1))的纵坐标y(x1)的近似值

欧拉法的几何意义

欧拉法的几何意义就是用一条初始点重合的折线来近似表示曲线y=y(x)

通常取xx+1-xn=hn=h(常数),则欧拉法计算公式

{yn+1=yn+hf(xn,yn)xn=x0+nh,n=0,1,\begin{cases} y_{n+1} = y_n + h f(x_n, y_n) \\ x_n = x_0 + n h, \quad n = 0, 1, \ldots \end{cases}

  • 误差

y(xn+1)yn+1=h22𝑦(ξn)h22y(xn)y(x_{n+1})-y_{n+1}=\frac{h^2}{2} 𝑦'' (\xi_n) \approx \frac{h^2}{2} y''(x_n)

  • 后退欧拉法

yn+1=yn+hf(xn+1,yn+1)y_{n+1} = y_n + h f(x_{n+1}, y_{n+1})

后退的欧拉公式与欧拉公式有着本质的区别,欧拉法是显式的;后退欧拉法是隐式的(且精度低,因此不常用)

  • 梯形法

yn+1=yn+h2[f(xn,yn)+f(xn+1,yn+1)]y_{n+1}=y_n+\frac{h}{2}[f(x_n,y_n)+f(x_{n+1},y_{n+1})]

改进欧拉法

格式一:

{yn+1=yn+hf(xn,yn)yn+1=yn+h2[f(xn,yn)+f(xn+1,yn+1)]y0=α,n=0,1N1\begin{cases} \overline{y_{n+1}} = y_n + h f(x_n, y_n) \\ y_{n+1} = y_n + \frac{h}{2} \left[ f(x_n, y_n) + f(x_{n+1}, \overline{y_{n+1}}) \right] \\ y_0 = \alpha, \quad n = 0, 1 \cdots N-1 \end{cases}

格式二:

{yp=yn+h(yn2xnyn)yc=yn+h(yp2xn+1yp)yn+1=12(yp+yc)\begin{cases} y_p = y_n + h \left( y_n - \frac{2x_n}{y_n} \right) \\ y_c = y_n + h \left( y_p - \frac{2x_{n+1}}{y_p} \right) \\ y_{n+1} = \frac{1}{2} (y_p + y_c) \end{cases}

求该常微分方程的改进欧拉公式

{dydx=11+x22y2,x[0,2]y(0)=0\begin{cases} \frac{dy}{dx} = \frac{1}{1+x^2} - 2y^2, \quad x \in [0,2] \\ y(0) = 0 \end{cases}

解:令区间长度为h=2/N

{yn+1=yn+hf(xn,yn)yn+1=yn+h2[f(xn,yn)+f(xn+1,yn+1)]y0=0,n=0,1,,N1\begin{cases} \overline{y_{n+1}} = y_n + h f(x_n, y_n) \\ y_{n+1} = y_n + \frac{h}{2} \left[ f(x_n, y_n) + f(x_{n+1}, \overline{y_{n+1}}) \right] \\ y_0 = 0, \quad n = 0, 1, \ldots, N-1 \end{cases}

改进的欧拉公式为:

{yn+1=yn+h(11+xn22yn2)yn+1=yn+h2(11+xn22yn2+11+xn+122yn+12)y0=0,n=0,1,,N1\begin{cases} \overline{y_{n+1}} = y_n + h \left( \frac{1}{1+x_n^2} - 2y_n^2 \right) \\ y_{n+1} = y_n + \frac{h}{2} \left( \frac{1}{1+x_n^2} - 2y_n^2 + \frac{1}{1+x_{n+1}^2} - 2\overline{y_{n+1}}^2 \right) \\ y_0 = 0, \quad n = 0, 1, \ldots, N-1 \end{cases}

 评论
评论插件加载失败
正在加载评论插件