Main Content

MATLAB 代码转换为 Stateflow 流程图

要将 MATLAB® 代码转换为 Stateflow® 流程图和图形函数,请使用构型向导。支持的转换模式包括:

  • ifif-else 及其他嵌套决策语句。

  • forwhile 循环。

  • 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 语句组成,该语句的输出取决于输入的奇偶性。

要将此脚本转换为流程图和图形函数,请执行以下操作:

  1. 打开一个新的独立图。

    edit hailstone.sfx
  2. 状态图选项卡上,选择构型 > 选择文件

  3. 在对话框中,选择 MATLAB 脚本,然后点击打开。构型向导会在您的 Stateflow 图中添加一个流程图和一个图形函数。双击图形函数以查看其内容。

    Flow chart that automatically generated from a MATLAB script.

  4. 符号窗格中,点击解析未定义的符号 。Stateflow 编辑器将 uy 解析为局部数据。

  5. 保存您的图。

  6. 要从 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
    
  7. 点击停止

您可以复制生成的流程图和图形函数,并将其粘贴到其他图中,包括 Simulink® 模型中的 Stateflow 图。如果您的 MATLAB 代码使用的功能仅限于 Simulink 中的代码生成,则必须在仿真图之前修改流程图动作。有关详细信息,请参阅Call Extrinsic MATLAB Functions in Stateflow Charts

注意

假设您在 MATLAB 函数中使用 nargin,则需要将该函数转换为图中的图形函数。由于 nargin 将图对象视为图形函数的输入参量之一进行计数,图形函数中 nargin 的值等于 1 加上原始 MATLAB 函数中 nargin 的值。有关详细信息,请参阅Execute a Standalone Chart

相关主题