我正在使用电路的修改节点导纳表示。我在 MATLAB 上使用PRIMA进行模型降阶。我将这些电路视为描述符状态空间系统。
我已经为此工作了很长一段时间。它是一种有保证的被动性保持算法。
但是,对于某些电路系统,我的实现行为不端。虽然我传入了一个稳定的模型,但它返回了一个不稳定的模型(!)。所以我以多种方式测试了输入和输出。
我检查过的事情:
- 投影矩阵 Q:正交,误差 ~e-15。
- 使用 MATLAB 检查极点
pole():它向我展示了一个不稳定的极对,其Re为 ~e+11,所以我看不到它以任何方式越过假想轴。 - 使用检查极点
eig(-G\C)— 极点实际上是这些值的倒数,即非零值:在 ~e-19 处显示单极(非对)。 hsvd(): 显示了几个不稳定的模式isstable(): 说它不稳定- 自定义检查功能(来自我的高级学生指南):1 个不稳定杆。
原始系统的极点也是~e+11。原版绝对稳定(我认为是被动的(传输线),但这只是我的猜测。)
现在我真的很困惑。pole()和 和有什么不一样eig(-G\C)?而根据后者的那个极点似乎很明显是真正的问题。
E(或C)是对称正定的,A(或G)满足G+G^T到~e-15。但是,B != C^T,我正在研究的算法专门针对输入!= 输出场景。我反复询问和搜索,但没有看到任何关于这个条件的必要性——据我所知,为了简单起见,作者只是简单地假设了这个条件。
我希望有人可以就检查的内容给我进一步的建议。
编辑:我发现这仅发生在降阶模型的某些值上。对于其他人,isstable()报告不稳定并eig(-G\C)说清楚。对于其他人,isstable()报告稳定,但hsvd()仍然发现不稳定模式。
我不希望人们帮助我调试这个确切的问题(这会要求太多),但我需要一些帮助来识别已知的问题,并发现未知的问题。