加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

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

(2014-02-12 04:11:51)
标签:

转载

分类: 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

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

消除代数环的方法可参照:《数字计算机仿真中消除代数环问题的研究》,邱杰,原巍兰。

0

  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有