WARNING
🧪 Beta公测版本提示:教程主体已完成,正在优化细节,欢迎大家提Issue反馈问题或建议。
非线性与李雅普诺夫 — demo.py 代码详解
运行方式
bash
cd docs/control/modern/nonlinear/code
python demo.pyCPU、NumPy 即可。一张图 lyapunov_pendulum.png:左是
代码逐段详解
第1步:能量
python
def energy(theta, omega):
kinetic = 0.5 * M * (L * omega) ** 2
potential = M * G * L * (1.0 - np.cos(theta))
return kinetic + potential:最低点势能为 ,倒立 时势能为 。不要用 还不加常数—— 可以差一个常数,但打印「是不是在减」会难看。 np.cos:是标量时返回标量;后面若传入数组也会逐元素算。
原点
第2步:非线性 ODE
python
wdot = -(G / L) * np.sin(th) - (b / (M * L ** 2)) * w
w = w + DT * wdot
th = th + DT * w- 先更新
再更新 :又是半隐式欧拉。无阻尼时 仍会因数值耗散略降,这是积分器误差,不是物理阻尼。步长 DT=0.01把泄漏压在可接受范围。 b=0vsb=0.6:解析上。代码不计算 ,只把 画出来让你看见单调。
L ** 2:幂。分母
第3步:读图
无阻尼
TH0, W0 = 1.2, 0.0 是弧度,大约
源码位置
clone 后打开(相对仓库根目录):
docs/control/modern/nonlinear/code/demo.py