一个matlab.®函数流中的函数®图表是您用来编写算法,通过调用内置MATLAB函数来编写更容易实现的算法。这种类型的功能对于使用MATLAB而不是图形状态流构造更容易表达的编码算法是有用的。有关更多信息,请参阅通过定义MATLAB函数来重用MATLAB代码。
在MATLAB功能中,您可以调用这些类型的功能:
MATLAB函数正文中定义的本地函数。
图形,Simulink万博1manbetx.®,真值表和图表中的其他MATLAB函数。
内置MATLAB函数支持代码生成。万博1manbetx这些函数生成C代码,用于构建符合嵌入环境的内存和数据类型要求的目标。
外部MATLAB功能,不支持代码生成。万博1manbetx这些函数仅在模拟模拟期间在Matlab工作区中执行。有关更多信息,请参阅呼叫外在MATLAB函数在zoneflow图表中。
万博1manbetxSimulink Design Verifier™财产证明和试验的职能。这些功能包括:
sldv.prove.
(万博1manbetxSimulink Design Verifier)
sldv.assume.
(万博1manbetxSimulink Design Verifier)
sldv.test.
(万博1manbetxSimulink Design Verifier)
SLDV.Condition.
(万博1manbetxSimulink Design Verifier)
此示例显示如何使用调用两个MATLAB函数的状态流图来创建模型,意思是
和Stdevstats.
:
意思是
计算价值的平均值val
。
Stdevstats.
计算值的标准偏差val
。
跟着这些步骤:
使用以下块创建一个新模型:
保存模型call_stats_function_stateflow.
。
在模型中,双击图表块。
使用工具栏中的图标将两个MATLAB函数拖到空图表中:
具有闪烁光标的文本字段显示在每个MATLAB函数的中间。
标记每个功能,如图所示:
您必须使用其签名标记MATLAB函数。使用以下语法:
[return_val1.那return_val2.,...] =function_name.(arg1.那arg2.,......)
您可以指定多个返回值和多个输入参数,如语法所示。每个返回值和输入参数可以是标量,向量或值矩阵。
小费
对于仅具有一个返回值的MATLAB函数,您可以省略签名标签中的括号。
在图表中,将默认转换绘制到终止结状态上,使用此条件操作:
{均值=意味着(Invals);stdev = stdevstats(Invals);}
图表应该看起来像这样:
小费
如果函数签名的形式参数是标量,请验证函数调用的输入和输出是否按照标量扩展规则进行遵循规则。有关更多信息,请参阅为矩阵的所有元素分配值。
在里面造型标签,下面设计数据, 选择模型探险家。
在里面模型层次结构模型资源管理器的窗格,选择功能意思是
。
该内容窗格显示输入参数val
和输出参数蜿蜒
。两者都是类型的标量双
默认。
双击val
下行尺寸列以设置大小val
至4.
。
在里面模型层次结构模型资源管理器的窗格,选择功能Stdevstats.
并重复上一步。
在里面模型层次结构窗格的模型资源管理器,选择图表
并添加以下数据:
名称 |
范围 |
尺寸 |
---|---|---|
|
|
4. |
|
|
标量(没有变化) |
|
|
标量(没有变化) |
您现在应该在模型资源管理器中看到以下数据。
添加数据后invales.
那意思
,和STDEV.
在图表中,相应的输入和输出端口显示在模型中的状态流块上。
将常量和显示块连接到图表块的端口并保存模型。
编程功能意思是
和Stdevstats.
, 跟着这些步骤:
在模型中打开图表call_stats_function_stateflow.
。
在图表中,打开功能意思是
。
函数编辑器显示使用标题:
功能意味着=含义(VALS)
此标题从图表中的函数标签中取出。您可以直接在编辑器中编辑标题,并且在关闭编辑器后,您的更改将显示在图表中。
在函数头后的行上,输入:
%#codegen.
该%#codegen.
编译指令有助于检测代码生成支持的MATLAB函数中的编译时违反语法和语义。万博1manbetx
输入一个线路空间,此评论:
%计算vals的统计均值
添加行:
len =长度(vals);
功能长度
是支持代码生成的内置MATLAB函数的示例。万博1manbetx您可以直接调用此函数以返回其参数的向量长度val
。构建仿真目标时,使用生成的C代码实现函数长度。支持代码生成的功能万博1manbetxC / C ++代码生成支持的函数和对象万博1manbetx(MATLAB编码器)。
变量Len.
是隐式声明的本地数据的一个例子。它具有与分配给它的值相同的大小和类型 - 函数返回的值长度
,标量双
。要了解有关声明变量的更多信息,请参阅数据定义基础知识(MATLAB编码器)。
MATLAB函数将隐式声明为临时数据的本地数据仅作为临时数据,只有当函数退出时函数并消失。您可以在图表中声明MATLAB函数的本地数据以持久使用持久
构造。
输入此行以计算值蜿蜒
:
infore = avg(vals,len);
功能意思是
储存平均值val
在zhoupflow数据中蜿蜒
。由于这些数据被定义为父状态溢图,因此您可以直接在MATLAB函数中使用它们。
具有单行或元素列的二维阵列被视为MATLAB功能中的向量或矩阵。例如,在意思是
,争论val
是一个四元素矢量。您可以使用矩阵表示法访问此向量的第四个元素vals(4,1)
或矢量符号vals(4)
。
MATLAB函数使用功能Avg.
和和
计算价值意思
。和
是代码生成支持的函数。万博1manbetxAvg.
是您稍后定义的本地功能。在解析功能名称时,图表中的MATLAB函数首先查找本地功能,然后支持代码生成的功能。万博1manbetx
注意
如果您调用Matlab函数无法作为本地函数或代码生成函数解析的函数,则必须声明所外部的函数。
现在输入此声明:
编码器.Extrinsic('plot');
输入此行以绘制输入值val
反对他们的矢量索引。
情节(Vals,' - +');
回想一下你宣布了情节
是外在功能,因为代码生成不支持它。万博1manbetx当MATLAB函数遇到外在函数时,它会在模拟期间向MATLAB工作区发送调用。
现在,定义本地功能Avg.
, 如下:
函数均值= avg(阵列,大小)平均值= sum(array)/ size;
标题Avg.
定义两个参数,阵列
和尺寸
和单个返回值,意思
。本地功能Avg.
计算元素的平均值阵列
通过划分他们的争论的总和尺寸
。
功能的完整代码意思是
看起来像这样:
函数意指=意味着(Vals)%#codegen%计算Vals Len =长度(VALS)的统计学意义;infore = avg(vals,len);编码器.Extrinsic('plot');情节(Vals,' - +');函数均值= avg(阵列,大小)平均值= sum(array)/ size;
保存模型。
返回图表,打开功能Stdevstats.
并添加代码以计算值的标准偏差val
。完整的代码应该如下所示:
函数stdevout = stdevstats(vals)%#codegen%计算Vals Len =长度(Vals)的标准偏差;stdevout = sqrt(sum(((vals-avg(vals,len))。^ 2))/ len);函数均值= avg(阵列,大小)平均值= sum(array)/ size;
再次保存模型。