示例:电路中的阻尼谐振
已知简单电路中包含电阻器 R、电感器 L 和电容器 C。
使用微分方程模拟电容器 C 上的电荷 Q,然后使用 ODE 求解器函数求解其他近似解。最后,将结果与 Q 的精确解进行比较。
使用微分方程
1. 针对三个组件上的电压编写微分方程,总和必须为零:
2. 针对电容器 C 上的电荷 Q 的即时变化编写微分方程。
3. 定义时间起点电荷 Q:
4. 假定以下输入参数值:
5. 将微分方程转换为标准形式:
6. 针对所有的 a 和 b 情况求解方程:
7. 针对 Q 两种可能的解绘图。
当 a=b 时,电荷 Q1 会迅速衰变为零;而当 a 和 b 不相等时,电荷会在变为零之前,震荡很长时间。
使用 ODE 求解器前
• 定义将传递至 ODE 求解器函数的参数:
• ODE 求解器分为两种:用于刚性方程组的求解器和用于非刚性方程组的求解器。如果矩阵 A 接近奇异,则以 y' = Ax 矩阵形式编写的 ODE 组称为刚性方程组。否则,为非刚性方程组。
• 刚性方程组与非刚性方程组之间的差异可能与矩阵 A 的固有动态标度有关 (以其特征值表示)。特征值完全不同 (或者值的范围在过小与过大之间) 的矩阵通常为刚性方程组。
• 基于指定的方程组参数,此简单阻尼调和示例表示非刚性方程组。
使用针对非刚性方程组的 ODE 求解器
使用针对非刚性方程组的 ODE 求解器求解近似解,然后将结果与 Q 的精确解进行比较。
1. Adams
2. rkfixed
3. Rkadapt
4. Bulstoer
使用针对刚性方程组的 ODE 求解器
使用针对刚性方程组的 ODE 求解器求解近似解,然后将结果与 Q 的精确解进行比较。
1. BDF
2. Radau
使用 ODE 混合求解器
使用 ODE 混合求解器 AdamsBDF,该求解器可确定某个方程组是刚性还是非刚性的,并相应调用 Adams 或 BDF,以查找适当的解,然后将结果与 Q 的精确解进行比较。
1. AdamsBDF
结论
• 在针对非刚性方程组的 ODE 求解器中,函数 Adams 和 rkfixed 分别返回误差最小和最大的解。
• 在针对刚性方程组的 ODE 求解器中,函数 Radau 和 BDF 分别返回误差较小和较大的解。
• 混合函数 AdamsBDF 所返回的值小于 Adams 或 BDF 返回的值。
• 总体而言,函数 Radau 和 rkfixed 分别返回误差最小和最大的解。
比较结果
1. 针对非刚性方程组 ODE 求解器返回的解绘图:一个解误差最小 (Adams, G0nss),一个解误差最大 (rkfixed, G1nss):
与 Q 相比,所返回的两个解之间存在一个明显的差异。
2. 针对刚性方程组 ODE 求解器返回的解绘图:一个解误差最小 (Radau, G1ss),一个解误差最大 (BDF, G0ss):
相对于 Q 而言,这两个解完全相同。
3. 针对刚性和非刚性方程组 ODE 求解器返回的解绘图,产生最小 (Radau, G1ss) 和最大 (rkfixed, G1nss) 误差。
函数 Radau 为刚性方程组求解器,可返回 Q 解的最佳近似。