[转载]simulink 中代数环的问题!!

标签:
转载 |
分类: Matlab学习 |
Simulink代数环
我有次碰到一个问题,Simulink报告“Cannot solve algebraic loops...”
http://byfiles.storage.msn.com/y1pLrqgHkhE4lDOyri85cmRcg4lbJbz5B0bVF4damD99k2TiimFYZIOxQs5s3vjwRnO?PARTNER=WRITER中代数环的问题!!" />
Simulink可以求解代数环,但是这常常会降低仿真速度。所以,algebraic loop diagnostic 可以设置为Error、Warning或者是None。在这里,设置为Warning,所以模型就会报告错误,不进行仿真计算。
什么是代数环?
当方程两边都出现同一个变量时,即产生了代数环。如:
http://byfiles.storage.msn.com/y1pveWfAaJSycXOeG-tPTvJFsPAd6Fl6gsYtSt0CHkTodng446CL9w9AF0Jm_K5xBbT?PARTNER=WRITER中代数环的问题!!" />
当Simulink中存在非模型延迟时,通常会产生代数环。比如,传感器将输出信号反馈到输入端。
读取错误消息
调试错误的第一步就是阅读和理解错误信息。代数环的产生源于不同情况,要弄清楚错误产生原因则应该理解错误信息。
Cannot solve algebraic loop involving 'model/.../Sensor System' because it consists of blocks that cannot be assigned algebraic variables, i.e., blocks with discrete-valued outputs, blocks with non-double or complex outputs, Stateflow blocks, or nonvirtual subsystems.
【不能求解存在于'model/.../Sensor System'的代数环,因为它包含了不能指定代数变量的模块,比如,有离散输出的模块、有非double或复数输出的模块、Stateflow模块、无效子系统。】
分析这段话,我们可以知道Simulink不能求解代数环,除非它可以给代数变量赋值。不能指定代数变量的模块将会在错误信息中列出。
Ø 离散值输出,比如logic模块[0 或 1]
Ø 有non-double输出的模块
Ø 输出复数(3+2i)的模块
Ø Stateflow 模块
Ø 无效子系统
分析错误信息与模型的练习
http://byfiles.storage.msn.com/y1pIIxdodcJWf96I46hOFTKuCW38NrCZaoKuv9Aci3Tclx_kbzHsCtgdnWPss1RIcqW?PARTNER=WRITER中代数环的问题!!" />
首先,可以看到所有的信号类型为uint8。它们属于non-double类型,所以这是原因之一。另外注意子系统的阴影,则表示它是一个atomic 子系统。atomic子系统是无效子系统,它也是引起问题的模块之一。
可能的解决办法
因为存在atomic 子系统,所以建议将优化项Minimize algebraic loop occurrences 勾选上。
http://byfiles.storage.msn.com/y1pfOxBi6BEM1fl28BKRdu_VMkL0Xj71BtJatdXfDTC0KnDcMCamJgQe7nThDfTYy-b?PARTNER=WRITER中代数环的问题!!" />
子系统可以看成为输入变量和状态变量的函数
http://byfiles.storage.msn.com/y1p-FezsVDEhe5lmJ4olU9zPOhwCPNbzciP12PQDVIRoUICRKtUz2q2i4s5BTkpg7gr?PARTNER=WRITER中代数环的问题!!" />
在一些系统中,输出信号的计算并不直接利用输入信号。这时,就可以将系统方程分为两步:
http://byfiles.storage.msn.com/y1pvtML5CXeqWMRNKSAaMcHjhsmfblLGpnvPDYgl1T_2JdOUN9RwAoA-h5HVxAzBBxd?PARTNER=WRITER中代数环的问题!!" />
http://byfiles.storage.msn.com/y1p4AUjMS3GP3lMDlNGiQunMTbLtGUoObBfHE7mLBafPk5OuZmHIEOLcZ4E1XjHP9OB?PARTNER=WRITER中代数环的问题!!" />
这个选项也可以在configuration parameters ->model reference blocks
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
消除代数环的方法可参照:《数字计算机仿真中消除代数环问题的研究》,邱杰,原巍兰。