将 MATLAB 代码转换为 Stateflow 流程图
要将 MATLAB® 代码转换为 Stateflow® 流程图和图形函数,请使用构型向导。支持的转换构型包括:
if、if-else及其他嵌套决策语句。for和while循环。switch语句。
构型向导可以转换 MATLAB 函数和脚本。
MATLAB 函数转换为 Stateflow 图形函数。
MATLAB 脚本转换为 Stateflow 流程图。
仅在独立的 Stateflow 图中支持转换 MATLAB 代码。有关详细信息,请参阅Create Stateflow Charts for Execution as MATLAB Objects。
根据 MATLAB 脚本创建流程图
此 MATLAB 脚本根据经验验证 Collatz 猜想的一个实例。当给定数值输入 u 时,脚本通过迭代以下规则来计算冰雹序列 n0 = u, n1, n2, n3, ⋯:
如果 ni 为偶数,则 ni+1 = ni/2。
如果 ni 为奇数,则 ni+1 = 3ni + 1。
Collatz 猜想指出,每个正整数都有一个最终达到 1 的冰雹序列。
% Hailstone sequence u, c(u), c(c(u)),... y = u; while y(end) ~= 1 y(end+1) = c(y(end)); end disp(y); function n = c(n) % Compute next number in hailstone sequence. % If n is even, then c(n) = n/2. % If n is odd, then c(n) = 3*n+1. if rem(n,2) == 0 n = n/2; else n = 3*n+1; end end
while 循环,该循环重复调用辅助函数 c,直到产生输出值 1。函数 c 由条件 if-else 语句组成,该语句的输出取决于输入的奇偶性。要将此脚本转换为流程图和图形函数,请执行以下操作:
打开一个新的独立图。
edit hailstone.sfx在状态图选项卡上,选择构型 > 选择文件。
在对话框中,选择 MATLAB 脚本,然后点击打开。构型向导会在您的 Stateflow 图中添加一个流程图和一个图形函数。双击图形函数以查看其内容。

在符号窗格中,点击解析未定义的符号
。Stateflow 编辑器将 u和y解析为局部数据。保存您的图。
要从 Stateflow 编辑器中执行图,请在符号窗格中输入值
u= 9,然后点击运行
。当流程图正在执行时,Stateflow 编辑器通过图动画突出显示激活的转移。当执行停止时,MATLAB 命令行窗口会显示从值 9 开始的冰雹序列:9 28 14 7 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1
点击停止
。
您可以复制生成的流程图和图形函数,并将其粘贴到其他图中,包括 Simulink® 模型中的 Stateflow 图。如果您的 MATLAB 代码使用的功能仅限于 Simulink 中的代码生成,则必须在仿真图之前修改流程图动作。有关详细信息,请参阅Call Extrinsic MATLAB Functions in Stateflow Charts。
注意
假设您在 MATLAB 函数中使用 nargin,则需要将该函数转换为图中的图形函数。由于 nargin 将图对象视为图形函数的输入参量之一进行计数,图形函数中 nargin 的值等于 1 加上原始 MATLAB 函数中 nargin 的值。有关详细信息,请参阅Execute a Standalone Chart。