在matlab里面新建什么作用域,通过定义 MATLAB 函数重用 MATLAB 代码

通过定义 MATLAB 函数重用 MATLAB 代码

Stateflow® 图中的 MATLAB® 函数是一个图形元素,您可以用它来编写易于通过调用内置 MATLAB 函数来实现的算法。典型应用包括:

面向矩阵的计算

数据分析和可视化

在编写使用 MATLAB(而不是图形化 Stateflow 构造)更容易表达的算法代码时,此类型的函数很有用。MATLAB 函数还能够提供了一些优化选项,可为嵌入式应用程序生成高效、生产级的 C 代码。

MATLAB 函数可以驻留在 Stateflow 图、状态或子图的任意位置。函数的位置确定可以调用函数的状态和转移的集合。

如果想在一个状态(或子图)及其子状态内调用函数,请将您的 MATLAB 函数置于该状态或子图中。该函数将覆盖该状态或子图的父级中同名的任何其他函数。

如果想要在图的任意位置调用函数,需将 MATLAB 函数置于与图同一层次的位置。

如果要从模型中的任何图调用该函数,请将您的 MATLAB 函数放在图级别,并启用图级别函数的导出。有关详细信息,请参阅Export Stateflow Functions for Reuse。

注意

MATLAB 函数可以访问在 Stateflow 层次结构中位于其上方的图和状态数据。

例如,以下 MATLAB 函数的名称为 stdevstats。它接受参数 vals,并返回输出值 stdevout。

0074f9947744f480ed0c75521b6bf966.png

为了计算 vals 中各值的标准差,该函数使用以下代码。

function stdevout = stdevstats(vals)

%#codegen

% Calculates the standard deviation for vals

len = length(vals);

stdevout = sqrt(sum(((vals-avg(vals,len)).^2))/len);

function mean = avg(array,size)

mean = sum(array)/size;在图中定义 MATLAB 函数

在对象选项板中,点击 MATLAB 函数图标 990cd96f78a84200590307c9b9ff42b5.png。将指针移到图中要放置新的 MATLAB 函数的位置。

输入函数的签名标签。

函数签名标签指定函数的名称及其参数和返回值的形式名称。签名标签采用以下语法:

[return_val1,return_val2,...] = function_name(arg1,arg2,...)您可以指定多个返回值和多个输入参数。每个返回值和输入参数可以是一个标量、向量或值的矩阵。对于只有一个返回值的函数,忽略签名标签中的方括号。

您可以对参数和返回值使用相同的变量名称。例如,使用以下签名标签的函数将变量 y1 和 y2 同时用作输入和输出:

[y1,y2,y3] = f(y1,u,y2)如果将此函数导出为 C 代码,y1 和 y2 将通过引用(作为指针)传递,u 通过值传递。通过引用传递输入可减少生成的代码复制中间数据的次数,从而产生更优的代码。

注意

不要将图符号的名称用作函数参数或返回值。例如,如果 x 或 y 是图数据,用签名 y = f(x) 定义函数会导致运行时错误。

要对该函数进行编程,请双击函数框打开 MATLAB 编辑器。

在 MATLAB 编辑器中,输入实现您的函数的 MATLAB 代码。有关详细信息,请参阅 Program a MATLAB Function in a Chart。

在 Model Explorer 中,展开图对象并选择 MATLAB 函数。函数签名中的参数和返回值显示为属于您的函数的数据项。参数的作用域是 Input。返回值的作用域是 Output。

在每个参数和返回值的 Data 属性对话框中,指定数据属性,如设置数据属性中所述。

创建您的函数所需的其他数据项。有关详细信息,请参阅通过 Model Explorer 添加数据。

您的函数可以访问它自己的数据或属于父状态或图的数据。函数中的数据项可以有以下作用域之一:

Constant - 常量数据在所有函数调用中都保持其初始值。

Parameter - 参数数据在所有函数调用中都保持其初始值。

在 MATLAB 函数中,不需要显式创建本地或临时函数数据。如果您使用未定义的变量,Stateflow 会创建一个临时变量,该变量可用于函数的其余部分。要存储在各次函数调用之间保持不变的值,请使用关键字 persistent。在状态和转移中调用 MATLAB 函数

您可以基于任何状态或任何转移的动作来调用 MATLAB 函数。您也可以从其他函数调用 MATLAB 函数。如果导出 MATLAB 函数,将可以从模型的任何 Stateflow 图中调用它。

要调用 MATLAB 函数,请使用函数签名,并在函数签名中为每个形参包含一个对应的实参值。如果实参和形参的数据类型不同,函数会将实参转换为形参的类型。指定 MATLAB 函数的属性

您可以通过 MATLAB 函数的属性对话框为其设置常规属性。要打开函数属性对话框,请右键点击 MATLAB 函数框,然后从上下文菜单中选择 Properties。Name

函数名称。点击函数名称链接以在 MATLAB 编辑器中打开您的函数。Function Inline Option

控制函数在生成的代码中的内联:

“Auto” - 确定是否根据内部计算内联函数。

“Inline” - 如果不将函数导出到其他图并且它不是递归的一部分,则内联函数。(如果函数直接调用自身或通过另一个函数调用间接调用自身,则存在递归。)

“Function” - 不内联函数。Label

函数的签名标签。函数签名标签指定函数的名称及其参数和返回值的形式名称。Saturate on Integer OverflowMATLAB Function fimath

定义 MATLAB 函数的 fimath 属性。指定的 fimath 属性与在 MATLAB 函数中构造的所有 fi 和 fimath 对象相关联。选择以下选项之一:

Same as MATLAB - 该函数使用与当前全局 fimath 相同的 fimath 属性。编辑框变暗,并以只读形式显示当前全局 fimath。有关全局 fimath 和 fimath 对象的详细信息,请参阅 Fixed-Point Designer™ 文档。

Specify Other - 通过以下方法之一指定您自己的 fimath 对象:

在编辑框内构造 fimath 对象。

在 MATLAB 或模型工作区中构造 fimath 对象,并在编辑框中输入其变量名称。说明

函数说明。您可以为层次结构中的函数输入简要说明。Document Link

函数的在线文档链接。您可以输入 Web URL 地址或者能以合适的在线格式(例如 HTML 文件或 MATLAB 命令行窗口中的文本)显示文档的 MATLAB 命令。点击 Document link 超链接时,Stateflow 会显示该文档。

相关主题

你可能感兴趣的:(在matlab里面新建什么作用域,通过定义 MATLAB 函数重用 MATLAB 代码)