版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Suite高级培训日程数组Array迭代器Iterators多态性联合仿真数组创建CreationAccess使用Manipulations数组相同类型的一维数据列[1,2,3,4];
[true,false,false]
etc.数列[[1,2],[3,4]]数列下标
0...n维度
1...dDon’tint^05^truebool^x(x
非常数)Doint^12bool^4char^Mreal^6^6int^2^(N+M){en:bool,val:real^3}^N(N和M都是常数)数组类型<类型>^<数组长度>任何SCADE类型
有理数常数
>
0创建数组(1/4)Scalar
to
Vector
(标量到矢量)创建一维数组数组的每个元素都被定义为输入标量数组大小定义为操作符的隐藏常量输入ArrayOut
=
ValueIn^5ValueInArray
Out5intint
^5o
=
[1,1,1,1,1]15o1创建数组(2/4)Data
array
(数组)由一组输入数据创建一维数组输入数据可以为任意相同的类型:T*T*...*T->T^NArrayOut
=[In1,In2,In3]Array
OutIn1In2In3realrealrealreal
^3o
=[1.0,2.0,3.0]1o1.02.03.0创建数组(3/4)定义数组类型:Syntax:
T^n(^m^…)n,m是数组大小.数组大小支持+或-操作但结果必须为正整数;e.g.bool^5int^sizecolor^n-3real^vec1size+vec2size[true,false,true](1.2
:
real)^8[[a,b,c],[d,e,f],[g,h,i]]‘b’^(M+N)[[(1.2:real),2.6],[0.0,2.14]][(1.4:real),(1.2:int)]‘c’^(3*a)(a
is
not
a
constant)创建数组(4/4)数组(1/4)Static
Projection
(静态
)T^n*int
->
TValueOut
=
ArrayIn[1];数组的元素在模型检查时必须确定。Array
InValueOut[1]intint
^5o
=
41[1]o[2,
4,
6,
8,
10,
34,
57,
13]数组(2/4)Dynamic
Projection
(动态
)ValueOut
=
(ArrayIn.[Index]
default
0);取得数组第Index个元素,如果Index超出数组范围,则输出操作符的第二个参数作为默认值, 数组的元素可以是输入参数。1[]
0IndexArray
InValueOuto
=
0.01100o[2,
4,
6,
8,
10,
34,
57,
13]数组(3/4)Slice
of
an
array
(数组切片)o
T^M*N*P>
T^(P-N+1)输出数组的一个子集隐藏输入参数定义为输出子集的Index的范围ArrayOut
=
[4,6,8,10,34]Array
Out1
5[2,
4,
6,
8,
10,
34,
57,
13]int
^8int
^((5
-
1)
+
1)Don’ta[15]b[not_constant](a.i
default
5)a[3.5..8]b[20..35]Doa[8]b[25](a.i
default
8.6)(b.32
default
c)a[4..7]数组例子a:real^10b:
int^30i:
intc:
int操作数组(1/3)Concatenate
operator
(数组连接)o
T^N*'T^M*...*'T^X
->
'T^(N+M+...+X)输入为若干一维数组:(A
|
B
|
C
|…|
N)将这些一维数组按次序连接成为一个新的一维数组:[2,
4,
6,
8,
10][34,
57,
13]int
^5int
^3int
^(5
+
3)Array
OutArrayOut
=
[2,4,6,8,10,34,57,13][[2,
3,
4],
[1,
0,
1]][[34,57,13]]OutArrayOut
=
[[2,3,4],[1,0,1],[34,57,13]]int^3
^2int
^3
^(2
+
1)int^3
^1Array操作数组(2/3)Reverse
operator
(数组翻转)T^N->
T^N翻转数组元素的排列次序只对最外维的数组进行翻转:ArrayOut
=
[[1,0,1],[2,3,4]]Array
Out[[2,
3,
4],
[1,
0,
1]]int
^3
^2int
^3
^2操作数组(3/3)Transpose
operation(数组转置)T^N^M^...^X*int*int
->
T^X^M^...^N转置一个二维数组隐藏常量输入定义转置的维度例子:Array
Out1
2转置维度1和2:–
ArrayOut
=
[[2,1],[3,0],[4,1]][[2,
3,
4],
[1,
0,
1]]int
^2
^3int
^3
^2迭代器MAPFOLDMAPFOLDMAPiFOLDiMAPw/wiFOLDw/witt+1t-1a1a2a3a4anRESULTa1a2a3a4an迭代器应用于操作符经过N次循环完成niterationsSCADE迭代器两大类MAP:通过一个操作符将一维数组变换为一维数组FOLD:通过一个操作符将一维数组变换为一个标量输出(积累了所有操作的结果)MAP迭代器同时在每个数组元素上应用定义的操作符OP表示某个操作符:map(OP)可以看作为是OP的扩展:等同于(对每个数组元素应用OP操作符):For
all
i
in
[0,n-1],
O1[i]
=
OP(I1[i],I2[i],I3[i])I1:T1I2:T2I3:T3O1
:
T4I1:
T1^NI2:
T2^NI3:
T3^NO1
:
T4^NOP(I10,
I20,
I30)OP(I11,
I21,
I31)OP(I12,
I22,
I32)I1I2I3OPOPOP1OP1OPmap<<N>>MAP迭代器使用范例对两个数组的元素依次相加并输出:node
SumScalar
(A:int;B:int)
returns
(C:int)letC
=
A
+
B;node
SumArray(T:int^5;U:int^5)
returns
(V:int^5)letV
=
(map
SumScalar
<<5>>)
(T,U);SumArray([1,2,3,-1,4],[2,-4,0,1,1])
→
[3,-2,3,0,5]);TUint
^5map<<5>>1SumScalarint
^5int
^5VT[0]U[0]U[1]T[1]U[2]T[2]T[3]U[3]T[4]U[4]2SumScalar3SumScalar4SumScalar5SumScalar7SumScalarintintintintintintintintintintintintintintintVint
^5a
:T1FOLD迭代器对数组的每个元素应用操作符并输出一个累积结果OP表示为某操作符:fold(OP)应用操作符OP计算初始值,输入数组I2的元素,输入数组I3的元素,并将输出值作为下一次计算的初始值,经过N轮(数组维度)循环后输出累积值。I2:
T2I3:T3o1
:
T1OP(
.
,
I21,
I31)OP(
.
,
I22,
I32)I1I2aOP
(
.
,
I20,
I30)Result
O11OPa
:T1I2:
T2^NI3:
T3^No1
:
T11OPfold<<N>>a累积参数作为输入FOLD应用范例数组元素累加(初始值设为0):node
AccumulatedSum(T:int^5)
returns
(V:int)letV
=
(fold
SumScalar
<<5>>)
(0,T);AccumulatedSum([1,2,3,4,5])
→
15;TV0intfold<<5>>a1SumScalarintint
^50T[0]T[1]T[2]T[3]T[4]1SumScalar2SumScalar3SumScalar4SumScalar5SumScalarVintintintintintintintintintintint累积参数初始值练习创建一个点操作符输入参数为两个一维数组
a=[a1,a2,...,an]和b=[b1,b2,...,bn],输出定义如下:a
&b是一个大小为10的real数组思路
1:使用
Map+Fold思路2:使用only
a
Foldna.b
aibii1使用MAPFOLD迭代器结合map和fold:node
SumDup
(A:int;B:int)returns
(S1:int;S2:int)letS1
=
A+
B;
S2
=
S1;node
EnumInt()
returns
(EnumArray:int^5)var
Aux:
int;let(Aux,
EnumArray)
=
(mapfold
SumDup
<<5>>)
(0,1^5);EnumInt(0,
1^5)
→
5,
[1,2,3,4,5];1SumDupmapfold<<5>>aEnumArray0intint
^5Auxint1
^
5int
^50111111SumDup2SumDup3SumDup4SumDup5SumDupintintintintintintintintintintEnumArrayAuxintintintintintintint
^5累积参数初始值中间值MAPFOLD使用范例
(1/3)累加函数ModCount变量incr控制是否继续累加当累加数到达阈值Modulo时,从0开始重新计数,并输出rippleclock为trueincrFBY1
01ModuloMODcountrippleclock中间值rippleclock,即下一次循环的累积值incr累积值输入值输出值MAPFOLD使用范例
(2/3)对ModCount使用mapfold
:Time[0]:
hundredth
of
secondTime[1]:
secondsTime[2]:
minutesTime[3]:
hoursHundredthSecond[100,
60,
60,
24]TimeTimeOutboolmapfold<<4>>a1ModCountboolint
^4int
^4执行计数器毫秒级,即每次执行增加1毫秒阈值数组分别为毫秒,秒,分,小时累积参数初始值中间值MAPFOLD使用范例(3/3)等价的扩展模型TimeTimeOuttrue1002460605ModCount4ModCount3ModCount2ModCountmap
componentfold
componentrippleclockincr练习05-2创建工程Chrono
和包Chrono设计操作符
ModCount
以及根操作符
Chrono仿真
Chrono
操作符并检查数组4个元素的变化incr
FBY1
01Modulo
MODcountrippleclock1ModCountmapfold<<4>>aHundredthSecondbool[100,
60,
60,
24]int
^4TimeTimeOutboolint
^4MAPFOLD迭代器扩展多迭代子(Multiple
Accumulator)允许设置1个以上的迭代累积参数同时适用于所有MapFold类迭代器MAPFOLD迭代器扩展(续)查找数组中的最大最小值1FindMinMaxElement_f
oreachmapfold
2
<<N>>aarray
[0]arraymaxValueminValue1minOld
<=
xminOldxminmax2xmaxOld
<
xmaxOld积累值1积累值2当MAPFOLD迭代器的函数不设置第二数组输出参数时,MAPFOLD自动为FOLD迭代器MAPi操作符与MAP操作符类似第一输入参数是index,即与数组顺序相关的操作符例子:在Index(从0开始)为偶时对元素取反iFlagOutArray[true,
f
alse,
f
alse,
true,
true]1ToggleEv
enmapi<<5>>ibool
^5bool
^5indexMOD20f
laginf
lagout[false,false,true,true,false][true,false,false,true,true]对外不可见输入参数FOLDi操作符与FOLD操作符类似第一输入参数为Index,第二输入参数为上一次的累积输出值范例:
当Index为奇数时进行逻辑或操作true[false,true,false,true,true]iaindexMOD20v
alueoroutaccin对外不可见输入参数累积参数MA
APwi操作符mapw是在某条件(w)下使用MAP操作符mapwi条件也可取决于
index,作为操作符第一输入参数范例:将数组中第一个为3的元素替换为5退出循环时的Index值第一输出参数,即(w),对外不可见,也不会传递给下一次操作,而由MAPw判断,表示循环继续的条件
true,则继续下一次计算
false,则退出循环,输出数组的剩余元素都置为默认值输出默认值(w)初始循环条件true表示开始执行
false表示不执行Input1
1Input1Input2
1OutputCond3[1,
2,
3,
4]1Findmapw<<4>>5
^
4trueOutputArrayIndex11int
^4intboolint
^4int
^4intInput1:[1,2,3,
4]Input2:[5,5,5,
5]output:[1,2,5,
11]FOLDw/FOLDwi操作符在某条件(w)下使用FOLD操作符FOLDwi条件也可取决于
index,作为第一输入参数范例:在数组中搜索为5的元素Input14Foundfoldw<<10>>aint
^105
^
10int
^10f
alsebooltrueboolIndexOutputboolintInput1OutputInput2accuintintbool
Contbool
bool
退出循环前的Index值循环继续的条件,第一输出参数初始条件,true表示开始执行false表示不执行操作符第一输入参数迭代器+数组操作符Scalar
to
vector帮助生成一维数组列以符合FOLDi操作符的定义要求优化代码不会产生冗余的中间数组1Findfoldi<<N>>ai-1array
1f
indf
ind_f
wd_indexNintintint
^Nintint
^N迭代器+数组操作符Reverse
array使用翻转操作符以便对数组进行反向遍历优化代码不会产生冗余的中间数组Narray
12Findfoldi<<N>>aif
ind-1f
ind_bwd_indexintintint
^Nint
^Nint
^Nint迭代器+数组操作符Slice
of
an
array提取数组的一部分后进行迭代器操作优化代码不会产生冗余的中间数组Input1Input2Output11Dif
f
Vectormap<<N
-
1>>0
(N
-
2)1
(N
-
1)real
^2
^(N
-
1)real
^2
^((N
-
1)
-
1
+
1)real
^2
^((N
-
2)
-
0
+
1)real
^2
^Nreal
^2
^N迭代器+数组操作符Transpose对数组进行转置后再进行迭代器操作优化代码不会产生冗余的中间数组Input13Dif
f
Vectormap<<3>>Input2Output1Output22Dif
f
Vector3map<<2>>Input1Input21
21
2int
^2
^3int
^2
^3int
^2
^3int
^2
^3int
^2
^3int
^3
^2int
^3
^2int
^3
^2多态性参数化操作符特化多态性:参数化的操作符操作符可以定义为带参数的参数只能是正整数当数组大小是一个参数时,可以采用带参数的操作符如何
参数:在Frameworkview
中
操作符,选择Insert
-
ParameterParameter多态性:参数化的操作符示例Max:返回整数数组的最大值MaxParametric:返回大小
为N的数组中元素的最大值,这里
N
是一个参数在Size
Parameter
处填写参数值1Maxfold<<N>>a0intintArrayint
^NmaxintintintArraymaxint2MaxParametric<<5>>int
^5intintVal1intVal2boolVal1boolVal21GenericToggintint2GenericToggleboolbooloutintoutbobool多态性:特化多态的操作符,其输入输出类型被定义为'amenode
GenericToggle(Input1
:
'T;
Input2
:
'T)returns
(Output1
:
'T)Input1Input2'T'TFBY1
fals多态性:特化将参考操作符拖拽至另一个图表,各个实例与其他包含兼容类型的模型连接将参考操作符特化允许根据实例的不同接口类型,为多态操作符定义不
为必须是导入操作符参考操作符 为导入操作符(至少有一个输入是通用类型‘T)特化操作符多态性:参考操
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 44413-2024城市轨道交通分类
- 苏教版小学数学二年级上册教案
- 大学英语三级(A级)模拟试卷24(共636题)
- 《宇宙生命之谜》科学幻想教案
- 《诗词大会》诗词之美教案
- 《动物世界》生命多样性教案
- 专升本医学综合模拟试卷16(共1895题)
- 人教版小学六年级语文上册教学计划教案全册
- AI端侧应用系列报告(三):苹果手机的三层成长逻辑
- 2025高考物理步步高同步练习选修3第三章 热力学定律第1节 功、热和内能的改变含答案
- 五年级上册口算练习400题及答案
- 金砖国家国际政治经济与全球和平发展
- 《植物的组织与器官》课件
- 《文化传承与创新》课件
- 《射频消融手术》课件
- 老年共病课件
- 2024年肿瘤科工作计划及总结报告
- 初中英语外研社课标版九年级上册(2013)-M6-U1-公开课
- 集合与常用逻辑用语-大单元作业设计
- 巷道井下施工方案
- 出差报销单-中英对照版
评论
0/150
提交评论