在simulink下做仿真的过程中需要进行迭代运算,于是做了一个小实验试验simulink中迭代运算的方法及规则。
需要用到UnitDelay模块+matlab function模块
实验lay out如下
UnitDelay模块:起Z变换中的1/z的作用,也就是记录上一次的数据。这里如果不加入该模块,simulink会报"代数环(algebraic loop)"错误。
Matlab Function模块:一个普通的函数模块,这里就实现一个简单的a++功能。
在输出端接一个示波器,运行并观察输出。可以看到输出每次加1。
值得一提的是,这里我对"last_a"的值没有设置任何初值,这也是在我做这个实验之前比较困惑我的一点,因为声明last_a初值为0这段代码不管放在哪里都会导致每次经过它时last_a都被设置成0,导致逻辑错误。
但是似乎Simulink自动将该初值设置为0,这也许和UnitDelay模块有关,因为如果不加UnitDelay,报错中会提到"it consists of blocks that cannot be assigned algebraic variables"无法给模块设定代数变量。
当然这只是我的推测,欢迎讨论。