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