微分方程初值问题及matlab代码

2022-10-26

前言

科学计算中常遇到一阶微分方程的初值问题:
$$ y' = f(x,y), x\in[x_0,b],\\ y(x_0) = y_0. $$
以下介绍几种常用方法

欧拉法

公式

经过推导可以得到公式
$y_{n+1} = y_n+hf(x_n,y_n)$

代码

matlab代码如下
eular.m

改进欧拉公式

公式

经过推导可以得到公式
$$ y_p = y_n+hf(x_n,y_n),\\ y_c = y_n+hf(x_{n+1},y_p), \\ y_{n+1} = \frac{1}{2}(y_p+y_c). $$

代码

matlab代码如下
improved_eular.m

四阶龙格-库塔法(RK)

公式

$$ y_{n+1} = y_n+\frac{h}{6}(K_1+2K_2+2K_3+K_4),\\ K_1 = f(x_n,y_n),\\ K_2 = f(x_n+\frac{h}{2},y_n+\frac{h}{2}K_1),\\ K_3 = f(x_n+\frac{h}{2},y_n+\frac{h}{2}K_2),\\ K4 = f(x_n+h,y_n+hK_3). $$

代码

RK_4.m

项目地址

本文代码已上传至GitHub
Loading...