欧拉方法计算器
输入 dy/dx = f(x, y)、初始点和终点,即可用欧拉方法、改进欧拉法(Heun)或四阶龙格-库塔法求出近似解。结果包括每一步所用斜率的完整步进表、与精确解(或高精度参考值)的误差、步长减半后的变化,以及叠加在斜率场上的解曲线图像。免费,无需注册。
用 x 表示自变量,y 表示未知函数,可使用 + − * / ^ 与括号:x + y、x*y、y*(1 − y)、sin(x) − y。可用函数有 sin、cos、tan、exp、ln、sqrt 等。
若您知道精确解,请在 x 中输入它以查看真实误差;否则使用高精度的 RK4 参考解。
结果
3.1874849
y(1) 的近似值
3.4365637
精确的 y(1)
-0.249
误差
0.1
步长 h
10
步数 n
方法
yₙ₊₁ = yₙ + h·f(xₙ, yₙ):在每一步开始时沿斜率前进。整体误差与 h 成正比。
步进表
| n | xₙ | yₙ | k1 | 精确值 y(xₙ) | 误差 |
|---|---|---|---|---|---|
| 0 | 0 | 1 | 1 | 1 | 0 |
| 1 | 0.1 | 1.1 | 1.2 | 1.1103418 | -0.0103 |
| 2 | 0.2 | 1.22 | 1.42 | 1.2428055 | -0.0228 |
| 3 | 0.3 | 1.362 | 1.662 | 1.3997176 | -0.0377 |
| 4 | 0.4 | 1.5282 | 1.9282 | 1.5836494 | -0.0554 |
| 5 | 0.5 | 1.72102 | 2.22102 | 1.7974425 | -0.0764 |
| 6 | 0.6 | 1.943122 | 2.543122 | 2.0442376 | -0.101 |
| 7 | 0.7 | 2.1974342 | 2.8974342 | 2.3275054 | -0.13 |
| 8 | 0.8 | 2.4871776 | 3.2871776 | 2.6510819 | -0.164 |
| 9 | 0.9 | 2.8158954 | 3.7158954 | 3.0192062 | -0.203 |
| 10 | 1 | 3.1874849 | 3.4365637 | -0.249 |
相同步长下的三种方法
| 方法 | 终点处的 y | 误差 |
|---|---|---|
| 欧拉法 | 3.1874849 | -0.249 |
| 改进欧拉法(Heun) | 3.4281617 | -0.0084 |
| 四阶龙格-库塔法 | 3.4365595 | -0.00000417 |
步长减半(欧拉法)
| n | h | 终点处的 y | 误差 |
|---|---|---|---|
| 10 | 0.1 | 3.1874849 | -0.249 |
| 20 | 0.05 | 3.3065954 | -0.13 |
| 40 | 0.025 | 3.3701277 | -0.0664 |
| 80 | 0.0125 | 3.4029699 | -0.0336 |
对欧拉法,h 减半时误差大致减半;对 Heun 方法,误差降至四分之一;对 RK4,误差降至十六分之一。
图像
- 精确解
- 欧拉法
如何使用欧拉方法计算器
- 1. 输入方程。 用 x 和 y 写出 dy/dx = f(x, y) 的右端,例如
x + y、y*(1 - y)、sin(x) - y。 - 2. 给出初始条件和终点。 输入 x₀、y₀ = y(x₀),以及要求解到的 x 值。终点可以位于 x₀ 的左侧。
- 3. 选择步长。 输入步长 h,或切换为步数 n。若 h 不能均匀划分区间,计算器会自动调整并予以说明。
- 4. 选择方法并阅读表格。 每一行列出 xₙ、yₙ 以及所用的斜率。若您知道精确解,可将其输入,以查看真实误差。
三种方法
| 方法 | 步进公式 | 整体误差 |
|---|---|---|
| 欧拉法 | yₙ₊₁ = yₙ + h·f(xₙ, yₙ) | 与 h 成正比 |
| 改进欧拉法(Heun) | yₙ₊₁ = yₙ + (h/2)(k₁ + k₂),其中 k₁ = f(xₙ, yₙ),k₂ = f(xₙ + h, yₙ + h·k₁) | 与 h² 成正比 |
| 四阶龙格-库塔法 | yₙ₊₁ = yₙ + (h/6)(k₁ + 2k₂ + 2k₃ + k₄) | 与 h⁴ 成正比 |
欧拉法沿每一步起点处的切线前进。Heun 方法将起点的斜率与预测终点的斜率取平均,因此也称为显式梯形法。四阶龙格-库塔法在每一步中对斜率采样四次,权重依次为 1、2、2、1。这些方法出自 Burden 与 Faires 的 Numerical Analysis 第 5 章。
示例:y′ = x + y, y(0) = 1
精确解为 y = 2eˣ − x − 1,因此 y(1) = 2e − 2 ≈ 3.4365637。取 h = 0.1 时,用欧拉法得到的前几步如下:
| n | xₙ | yₙ | 斜率 f(xₙ, yₙ) | 精确值 y(xₙ) |
|---|---|---|---|---|
| 0 | 0 | 1 | 1 | 1 |
| 1 | 0.1 | 1.1 | 1.2 | 1.1103418 |
| 2 | 0.2 | 1.22 | 1.42 | 1.2428055 |
| 3 | 0.3 | 1.362 | 1.662 | 1.3997176 |
例如,y₁ = 1 + 0.1 × (0 + 1) = 1.1,y₂ = 1.1 + 0.1 × (0.1 + 1.1) = 1.22。走完十步后,欧拉法得到 y(1) ≈ 3.1874849,误差为 −0.2491:结果偏小,因为真解是凸的,切线位于曲线下方。
| 步数 n (h) | x = 1 处的欧拉误差 | Heun 误差 | RK4 误差 |
|---|---|---|---|
| 10 (0.1) | −0.2491 | −0.0084 | −0.0000042 |
| 20 (0.05) | −0.1300 | −0.0022 | −0.00000027 |
| 40 (0.025) | −0.0664 | −0.00056 | −0.000000017 |
| 80 (0.0125) | −0.0336 | −0.00014 | −0.0000000011 |
h 每减半一次,欧拉法的误差约减半,Heun 方法的误差降至四分之一,RK4 的误差降至十六分之一,与各方法的阶数预测一致。要使欧拉法的误差达到 n = 10 时 RK4 的水平,需要数十万步。
斜率场与误差
图中的短线段表示格点上的斜率 f(x, y):真解是处处与这些线段相切的曲线。数值解以折线的形式叠加在其上;若您提供了精确解,它会以虚线画在旁边。若没有精确解,误差一列将与 RK4 取至少 2,000 步得到的参考值比较,该参考值远比您在此选择的任何方法精确。有些方程会在有限时间内发散,例如 y(0) = 1 的 y′ = y²,在 x = 1 处发散;表格会在数值变为无穷大处停止。
常见问题
- 欧拉方法如何工作?
- 它逐步构造解。从点 (xₙ, yₙ) 出发,由微分方程算出斜率 f(xₙ, yₙ),然后沿该切线前进水平距离 h,得到 yₙ₊₁ = yₙ + h·f(xₙ, yₙ)。每个新点都是下一步的起点。
- 欧拉方法有多精确?
- 其每步的局部误差与 h² 成正比,但误差会在约 1/h 步中累积,因此整体误差与 h 成正比。步长减半,误差也减半。它适合用于学习,但不适合追求精度。
- 什么是改进欧拉法?
- 改进欧拉法即 Heun 方法,先用一步欧拉法预测区间的终点,再将终点处的斜率与起点的斜率取平均。这一二阶修正使整体误差与 h² 成正比(而非 h),代价是每步需要计算两次斜率。
- 如何选择步长?
- 使用减半表:不断减小 h,直到结果在您关心的位数上不再变化。欧拉法需要很小的 h,而 RK4 用大得多的 h 即可达到相同精度。刚性方程(含快速衰减分量的方程)可能迫使这些方法都使用很小的 h。
- 能求解二阶方程或方程组吗?
- 不能。本工具只求解单个一阶方程 dy/dx = f(x, y)。二阶方程可以改写为一阶方程组,但本工具不处理方程组。
- 为什么解会在中途停止?
- 数值变为无穷大。这发生在真解于有限时间内发散时,或在不稳定方程中步长过大时。表格止于最后一个有限值所在的行,提示信息会给出发生这种情况的大致 x 值。