常微分方程(ODE)的数值计算方法

简介: 常微分方程组的求解比较麻烦,通常在计算机上使用数值计算的方式去进行。

常微分方程组的求解比较麻烦,通常在计算机上使用数值计算的方式去进行。

假设一阶常微分方程组(ODEs)由下式给出

$$ \frac{dx}{dt}=f_i(x),~i=1,2,\dots,n $$

其中 $x$ 是一个变量构成的向量 $x=[x_1,x_2,\dots,x_n]$。任意高阶微分方程都可以通过变量替换变成一阶微分方程组。

求解 ODE 的数值方法有很多种:欧拉法(Euler)、龙格-库塔法(Runge-Kutta)、Adams 线性多步法、Gear 法等 1

1/ 欧拉法(Euler Method)2

在数学和计算科学中,欧拉方法(也叫前向欧拉方法)是一种用于求解给定初值的 ODE 的一阶数值过程,是对常微分方程进行数值积分的最基本的显式方法,也是最简单的 Runge-Kutta 方法。

欧拉方法以列昂哈德·欧拉(Leonhard Euler)的名字命名,在他的《计算积分学》(1768-1870年出版)一书中首次提出。

欧拉方法是一阶方法,它的局部误差(每步误差)与步长的平方成正比,全局误差(给定时间的误差)与步长成正比。 欧拉方法通常作为构造更复杂方法的基础,例如预测器-校正器(Predictor-Corrector)方法。

假设有一个 ODE:

$$ y^{\prime}(t)=f(t,y(t)),\quad y(t_0)=y_0, $$

尽管曲线是未知的,但是起点是已知的。根据微分方程,可以计算出 $A_0$ 点的斜率,因此可以计算出切线,我们根据该切线走一小步到 $A_1$ 点。然后再根据 $A_1$ 点得到该位置的斜率,根据这个斜率走一小步去下一个点 $A_2$......

如此反复,如果步长取足够的小,那么得到的结果将会很接近确切解。

Euler 方法的迭代公式为:

$$ \begin{aligned} y_{n+1}&=y_n+hf(t_n,y_n)\\ t_{n+1}&=t_n+h \end{aligned} $$

2/ 龙格-库塔法(Runge-Kutta Method)

2.1/ 四阶 Runge-Kutta 方法

在数值分析中,Runge-Kutta 方法是一组隐式和显式迭代方法,其中包括欧拉方法,用于时间离散化中的常微分方程的近似解。由国数学家卡尔 • 朗格(Carl Runge)和威廉 • 库塔(Wilhelm Kutta)于 1900 年左右开发。

设一个初值问题如下定义:

$$ \frac{dy}{dt}=y^{\prime}(t)=f(t,y),\quad y(t_0)=y_0 $$

其中 $y$ 是一个关于时间 $t$ 的未知函数(标量或向量),也是需要近似的函数。已知 $y^{\prime}(t)$ 是关于 $t$ 和 $y$ 自身的函数,在时间 $t_0$ 对应的 $y$ 值为 $y_0$。 函数 $f$ 和初始条件 $t_0,y_0$ 已经给出。选择一个步长 $h>0$ 并且对于 $n=0,1,2,3,\dots,$ 定义:

$$ \begin{aligned} y_{n+1}&=y_{n}+\frac{1}{6} h\left(k_{1}+2 k_{2}+2 k_{3}+k_{4}\right)\\ t_{n+1}&=t_{n}+h \end{aligned} $$

其中,

$$ \begin{aligned} k_{1}&=f\left(t_{n}, y_{n}\right),\\ k_{2}&=f\left(t_{n}+\frac{h}{2}, y_{n}+h \frac{k_{1}}{2}\right),\\ k_{3}&=f\left(t_{n}+\frac{h}{2}, y_{n}+h \frac{k_{2}}{2}\right),\\ k_{4}&=f\left(t_{n}+h, y_{n}+h k_{3}\right). \end{aligned} $$

在不同的资料中可能会有不同的但是等价的公式表示。

其中 $y_{n+1}$ 为 $y(t_{n+1})$ 的四阶 Runge-Kutta (RK4)近似,下一个值 $(y_{n+1})$ 由当前值 $(y_n)$ 加上四个增量的加权平均确定,每个增量为间隔大小 $h$ 和微分方程右侧的函数 $f$ 指定的估计斜率的乘积。

  • $k_1$ 是间隔开始处的斜率,依赖于 $y$(这第一步是欧拉法);
  • $k_2$ 是间隔中点处的斜率,依赖于 $y$ 和 $k_1$;
  • $k_3$ 依旧是间隔中点处的斜率,只是依赖于 $y$ 和 $k_2$ 了;
  • $k_4$ 是间隔终点处的斜率,依赖于 $y$ 和 $k_3$.

RK4 是四阶的方法,意味着局部截断误差的阶数为 $\mathcal{O}(h^5)$,总积累误差的阶数为 $\mathcal{O}(h^4)$.

在实际应用的时候,特别是在物理上,函数 $f$ 与 $t$ 无关,即所谓的自治系统(Autonomous system)或者时不变系统,它们的增量不会被计算,也不会传递给函数 $f$,而仅仅使用 $t_{n+1}$ 的最终公式。

2.2/ Runge-Kutta 的一般形式

上面介绍的是 RK4,它只是 Runge-Kutta 的其中一种。实际上,Runge-Kutta 有很多种,如果把它写成一般的形式,有

$$ y_{n+1}=y_{n}+h \sum_{j=1}^{s} b_{\mathbf{z}} k_{i} $$

其中

$$ \begin{aligned} k_{1} &=f\left(t_{n}, y_{n}\right) \\ k_{2} &=f\left(t_{n}+c_{2} h, y_{n}+h\left(a_{21} k_{1}\right)\right), \\ k_{3} &=f\left(t_{n}+c_{3} h, y_{n}+h\left(a_{31} k_{1}+a_{32} k_{2}\right)\right), \\ & \vdots \\ k_{s} &=f\left(t_{n}+c_{s} h, y_{n}+h\left(a_{s 1} k_{1}+a_{s 2} k_{2}+\cdots+a_{s, s-1} k_{s-1}\right)\right) . \end{aligned} $$

从公式中可以知道,如果要指定某个特定的方法,就需要提供一个整数 $s$(代表级数的项数),还有系数 $a_{ij},~\text{for }1\le j<i\le s$, $b_i,~\text{for }i=1,2,\dots,s$ 和 $c_i~\text{for }i=2,3,\dots,s$.

其中矩阵 $[a_{ij}]$ 称为 Runge-Kutta 矩阵,而 $b_i$ 和 $c_i$ 是权重和节点。

Taylor 级数展开式表明,Runge-Kutta 方法是一致的,当且仅当

$$ \sum_{i=1}^s b_i=1 $$

参考

目录
相关文章
|
JavaScript 数据安全/隐私保护
使用vue+vant制作的一个个人信息展示页面
使用vue+vant制作的一个个人信息展示页面
973 0
|
2月前
|
数据采集 缓存 监控
API使用全攻略:3步搞定跨境电商自动化,新手也能日省5小时!
2024年电商运营已进入自动化时代!告别手动搬砖,利用电商API实现商品信息抓取、订单同步、物流计算等自动化操作,零代码基础也能快速上手,每天节省5小时,利润提升30%。本文详解API使用三步法、高阶玩法如动态定价、物流优化及避坑指南,助你高效运营,轻松盈利。
|
6月前
|
机器学习/深度学习 人工智能 自然语言处理
AI 世界生存手册(二):从LR到DeepSeek,模型慢慢变大了,也变强了
大家都可以通过写 prompt 来和大模型对话,那大模型之前的算法是怎样的,算法世界经过了哪些比较关键的发展,最后为什么是大模型这条路线走向了 AGI,作者用两篇文章共5.7万字详细探索一下。 第一篇文章指路👉《AI 世界生存手册(一):从LR到DeepSeek,模型慢慢变大了,也变强了》
AI 世界生存手册(二):从LR到DeepSeek,模型慢慢变大了,也变强了
|
12月前
|
Linux Python
linux之部署python环境&创建虚拟环境
linux之部署python环境&创建虚拟环境
|
9月前
|
人工智能 自然语言处理 搜索推荐
智能语音助手的发展与未来:开启人机交互的新篇章
智能语音助手的发展与未来:开启人机交互的新篇章
1533 28
|
11月前
|
项目管理 开发工具 Android开发
repo跟git的关系
Repo与Git不是替代关系,而是相互补充。Git关注于单个仓库的版本控制,而Repo在此基础上提供了一套管理多个Git仓库的框架,特别适合处理大规模、多组件协同开发的项目。通过Repo,开发者可以更高效地处理复杂的项目结构,同时享受Git带来的版本控制优势,两者结合,为大型软件项目管理提供了强大的支撑。
536 1
|
10月前
|
人工智能 自然语言处理 物联网
llama factory 从数据集起步 跑通 qwen系列开源生成式大模型 微调
`dataset_info.json` 文件用于管理 llama factory 中的所有数据集,支持 `alpaca` 和 `sharegpt` 格式。通过配置此文件,可以轻松添加自定义数据集。数据集的相关参数包括数据源地址、数据集格式、样本数量等,支持 Hugging Face 和 ModelScope 两个平台的数据集仓库。针对不同格式的数据集,提供了详细的配置示例,如 `alpaca` 格式的指令监督微调数据集、偏好数据集等,以及 `sharegpt` 格式的多模态数据集等。今天我们通过自定义数据集的方式来进行qwen2.5_14B_instruct模型进行微调
3828 7
|
Shell
wandb.errors.UsageError: api_key not configured (no-tty). call wandb.login(key=[your_api_key])
wandb.errors.UsageError: api_key not configured (no-tty). call wandb.login(key=[your_api_key])
4206 0
wandb.errors.UsageError: api_key not configured (no-tty). call wandb.login(key=[your_api_key])
ERROR: Could not find a version that satisfies the requirement thop (from versions: none) ERROR: No
这篇文章介绍了在尝试安装`thop`包时遇到的"No matching distribution found"错误,并提供了通过直接从GitHub源码安装`thop`的解决方法。
ERROR: Could not find a version that satisfies the requirement thop (from versions: none) ERROR: No
|
供应链 安全 区块链
区块链技术和智能合约的结合:开拓未来商业新模式
随着数字化时代的来临,区块链技术和智能合约逐渐成为了当今商业领域内备受瞩目的话题。本文将深入探讨这两种技术的原理、发展历程以及未来应用前景。我们将重点关注智能合约的开发流程、实现方式以及成功案例,并剖析其对于商业模式创新的影响。