Simulink从0搭建模型07-P8for循环的使用
- 今日学习内容
- 1. For Iterator Subsystem模块介绍
- 1.1. 累加器
- 1.2. For Iterator
- 1.3.小结
- 2. states介绍
- 3. Set next i(相当break)
- 学习心得
今日学习内容
b站视频 【Simulink 0基础入门教程 P8 for循环的使用 For Itrator Subsystem】
1. For Iterator Subsystem模块介绍
For Iterator Subsystem模块:
For Iterator Subsystem内部结构:
For Iterator 参数设置:
默认是internal
(内部迭代),如果选择external
(外部迭代),则For Iterator Subsystem内部结构为:
例1:For Iterator Subsystem内部做一个累加运算。
1.1. 累加器
我们在前面的课中学了累加器。再来回顾一下累加器。
- 设置好求解器参数。采样时间为10s,Fixed-step size=1s,所以经过一次采样就需要跑10次。
演示效果:
- 当我们按单步运行(跑第0次)即T=0s时,此时还没累加,初始值为输入的常数1.
注:黄色框显示的当前线上输出值,用鼠标单击该线即可。
- 当我们再按单步运行(跑第1次)即T=1s时,此时开始累加,输出值为2。
- 同理,当我们运行完(跑第10次)即T=10s时,此时累加结束,输出值为11。
观察示波器Scope2:
1.2. For Iterator
在没有循环的情况下,累加器一次跑完结果为11。现在加入for循环,猜猜结果是多少?
For Iterator 参数设置:
- Iteration limit source: internal
- Iteration limit:10
演示效果:
-
单步运行T=0s,此时的输出为10。
-
单步运行T=1s(模型循环1次),此时的输出为20.
-
全部跑完T=10s(模型循环10次),此时的输出为110.
看看示波器Scope1:
1.3.小结
为了对比单个累加器和For Iterator 的关系,把它们2个的波形放在同一示波器Scope3下对比。
迭代10次的波形对比:
用表格统计如下:
T for_out delay_out 0 10 1 1 20 2 2 30 3 3 40 4 4 50 5 5 60 6 6 70 7 7 80 8 8 90 9 9 100 10 10 110 11 思考:Iteration limit设置为20,结果为多少?
答:220
验证:
2. states介绍
例2:统计数组中大于5的元素的个数展示states设置的影响
答:数组中大于5的元素的个数为5
分析:For Iterator Subsystem内部模型
根据要求,搭建好的模型如下:
里面用到的主要模块有:For Iterator、Selector、Relational
Operator、Constant、Switch、Add、Delay
其中,For Iterator参数设置:
==注意:==states一定设置为reset。
结果:
- For Iterator Subsystem内部:
做到这儿,是不是发现好麻烦啊,更简单的:
把输入的数和5进行比较,得到大于5的数就为真(1),累计真值,得到结果。
3. Set next i(相当break)
例3:寻找5在数组中的索引。展示set next i的用法。
For Iterator参数勾选Set next i
:
此时发现For Iterator模块的右侧多了一个输入,就是Next_i:
根据需求搭建的模型:
运行结果:
当然这里的比较大小中的常数5也可以更改为7,那么就找到数字7的索引为7:
其实通过上面的for循环模块搭建,发现不如C语言简单:
for(int i=0; i<10; i++){ if (a[i]==5){index==i; //打印数组中为5的索引值break;} }
学习心得
太不容易了,感觉模块学习很费时间啊,终于到循环了,坚持就是胜利。
这块内容的结尾博主说,使用这个模块的人不是很多,以后我不一定能用上,但本文记录也是为了自己学习复习。
-END-