微分方程相关基础知识
全局误差比局部残差低1阶。我们通常所说的数值方法的阶数,指的就是采用这个数值方法的全局误差的阶数。
# 欧拉法
- 属于一阶龙格库塔法
- 前向欧拉法:$y_{n+1}=y_n+h f\left(y_n, t_n\right)$
- 后向欧拉法:$y_{n+1}=y_n+h f\left(y_{n+1}, t_{n+1}\right)$
- Trapezoidal rule(梯形公式):$y_{n+1}=y_n+\frac{h}{2}\left(f\left(y_n, t_n\right)+f\left(y_{n+1}, t_{n+1}\right)\right)$
根据$f$的复杂程度,后两个隐式法会比显式方法的运算复杂度更高,可能需要用到迭代法求得数值解
# Heun法
- 将梯形公式改进成了显式方法
- 用Forward Euler方法求出$\tilde{y}{n+1}=y_n+h f\left(y_n, t_n\right)$,然后带入到梯形公式的右边:$y{n+1}=y_n+\frac{h}{2}\left(f\left(y_n, t_n\right)+f\left(\tilde{y}{n+1}, t{n+1}\right)\right)$
- 属于二阶龙格-库塔法的特例
# 中点法
# 显式中点法
$y_{n+1}=y_n+h f\left(t_n+\frac{h}{2}, y_n+\frac{h}{2} f\left(t_n, y_n\right)\right)$
直接用$y_n$处的斜率去估计$y_{n+1}$,误差会比较大,所以用它们的中点去估计。用传统欧拉法得到中点的值与斜率。用中点斜率替代$y_n$处的斜率去估计$y_{n+1}$。
# 隐式中点法
- $y_{n+1}=y_n+h f\left(t_n+\frac{h}{2}, \frac{1}{2}\left(y_n+y_{n+1}\right)\right)$
- 用传统欧拉法得到$y_{n+1}$的估计值,与$y_n$相加后除以2得到中点的估计值,用传统欧拉法和估计得到的中点斜率,重新估计$y_{n+1}$
- ⚠️更正:不可以估计$y_{n+1}$的值,必须代入到最后解方程组
# 龙格库塔法
初值问题:$\frac{d y}{d t}=f(t, y), \quad y\left(t_{0}\right)=y_{0}$,其中要估计出来的$y$是关于时间$t$的未知函数(标量或是向量),现在选择步长$h>0$并定义:
$$\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}$$
# 常数变易法
# 参考资料
# 谱分析
# 参考资料
- IPython Cookbook - 12.1. Plotting the bifurcation diagram of a chaotic dynamical system (ipython-books.github.io) (opens new window)
- ihkim94/ikeda: Final project for the computational physics class in Fall, 2022 at UT Austin (github.com) (opens new window)
# 一些工具箱
# 一些Chat GPT
泰勒级数展开与欧拉法之间的关系?
泰勒级数展开和欧拉法是两种近似解决微分方程的方法,不同之处在于它们的工作原理。
泰勒级数展开是一种数学工具,它可以通过将函数近似为一系列项的和来工作。它从单个点的函数值开始,利用函数导数的信息来找到附近点的近似函数值。通过求和系数项,可以得到更大区间内的函数的近似值。
欧拉法,另一方面,是一种求解常微分方程(ODEs)的数值方法。给定形如 y' = f(t, y) 的 ODE,其中 y 是未知函数,f 是已知函数,欧拉法从给定的 t 时刻的 y 的初始值开始,利用 f 的导数信息来找到下一时间步的 y 的近似值。然后重复该过程,找到逐渐晚些时间的 y 的近似值。
泰勒级数展开和欧拉法都可以用来近似解决微分方程,但泰勒级数展开提供了函数的分析近似,而欧拉法提供了数值近似。泰勒级数展开适用于光滑和良好表现的函数,提供更精确的近似,但随着导数数量的增加,复杂度也随之增加。欧拉法比较简单,在大多数情况下都可以用,但精度不如泰勒级数展开高。此外,欧拉法的精度随着步长的增加而降低,因此需要合理调整步长以获得更好的结果。
总的来说,泰勒级数展开和欧拉法是相辅相成的,可以结合使用,也可以根据具体情况使用更适合的方法。
如何用泰勒展开推导隐式中点法?【感觉不对】
泰勒级数展开可以用来推导隐式中点法。泰勒级数展开可以用来对函数进行近似,而隐式中点法是一种数值积分方法,用来解决常微分方程。
假设我们要求解的常微分方程是:$dy/dt = f(t, y)$,其中$f(t, y)$是已知的函数。
我们可以使用泰勒级数展开来对$f(t, y)$进行近似:$f(t + Δt, y + Δy) ≈ f(t, y) + Δt * df/dt + (Δy)^2/2 * d^2f/dt^2 + ...$
我们假设$Δy$等于在时刻$t + Δt$处的$y$的变化量,即$y(t + Δt) - y(t)$,这样我们就可以把上面的式子写成如下形式:$f(t + Δt, y(t + Δt)) ≈ f(t, y(t)) + Δt * df/dt + (y(t + Δt) - y(t))^2/2 * d^2f/dt^2 + ...$
我们可以把这个式子写成如下形式:$y(t + Δt) ≈ y(t) + Δt * f(t, y(t)) + (y(t + Δt) - y(t))^2/2 * d^2f/dt^2 + ...$
然后,我们可以使用这个式子来解决隐式中点法的迭代方程,其中$Δy$是待求解的量。因此,隐式中点法的算法流程如下:
- 给定初始条件$y(t)$和步长$Δt$。
- 通过迭代方程求解$y(t + Δt)$。
- 重复步骤2,直到达到所需的精度为止。
通过泰勒级数展开和隐式中点法的推导,我们可以证明隐式中点法的稳定性和收敛性,并且具有较高的精度。因此,隐式中点法是一种常用的数值积分方法,用于求解常微分方程。
隐式求解法中的时间对称性?
时间对称性是指数值方法的性质,在该方法中,时间$t+Δt$处的解的计算基于与时间$t-Δt$处解的计算相同的信息。这意味着以相对于当前时间步长对称的方式更新解决方案,而不是仅考虑来自前一时间步长的信息。 在隐式方法的上下文中,时间对称意味着在时间$t+Δt$时解的计算不仅取决于在时间$t$时的解的值,还取决于在$t+Δt$时解的值。这与显式方法相反,在显式方法中,时间$t+Δt$的解仅基于时间$t$的解的值来计算。 隐式方法的时间对称性很重要,因为与显式方法相比,隐式方法可以产生更好的稳定性和准确性。例如,当求解具有广泛时间尺度的刚性ODE时,隐式方法可以更有效地处理不同的时间尺度,并导致更精确的解。 然而,隐式方法的时间对称性也意味着,与显式方法相比,它通常更昂贵,因为它需要求解非线性方程以在每个时间步长更新解。
假设你试图在两个不同的时间点$t$和$t+Δt$上找到运动物体的位置。在显式方法中,您将仅使用您所掌握的关于对象在时间t的位置的信息来计算其在时间$t+Δt$的位置。换句话说,你只会及时向前迈出一步。 然而,在隐式方法中,您将使用您在时间$t$和时间$t+Δt$处获得的关于对象位置的信息来计算时间$t+△t$处的对象位置。**这是因为隐式方法不仅考虑了来自前一时间步骤的信息,还考虑了关于未来时间步骤的数据。这就是所谓的“时间对称”。**通过考虑过去和未来的信息,隐式方法可以提供比显式方法更精确的解决方案,尤其是对于具有复杂或快速变化的动力学的问题。然而,这种精度是以计算复杂性为代价的,因为隐式方法需要求解非线性方程以在每个时间步更新解。
# 待解决问题
- [ ] DDEs为什么是无限维的问题?
- [ ] DDEs可否用一组有限维【问题如何描述?】
- Numerical methods for Delay Differential Equations by Alfredo Bellen and Marino Zennaro
- Delay Differential Equations with applications in population dynamics by Yang Kuang
# 参考资料
- 《Solving Delay Differential Equations with dde23》
- 龙格库塔方法与它的布彻表.py - 知乎 (zhihu.com) (opens new window)