Действие состояния и переход являются инструкциями, которые вы записываете внутри состояния или рядом с переходом, чтобы определить, как Stateflow® график ведет себя во время симуляции. Для получения дополнительной информации см. Model Finite State Machines.
Действия на этом графике определяют конечный автомат, который эмпирически проверяет один образец догадки Collatz. Для заданного числового входа
график вычисляет последовательность градины
... 

путем итерации этого правила:
Если
даже, то.
Если
странно, то.
Догадка Collatz утверждает, что каждое положительное целое число имеет последовательность градины, которая в конечном счете достигает единицы.

График состоит из трех состояний. В начале симуляции Init состояние инициализирует данные графики:
Локальный n данных задается значение входного u.
Локальный n2 данных устанавливается на оставшуюся часть, когда n делится на два.
Данные о выход y установлено в false.
В зависимости от четности входа переходит к любому из Even или Odd состояние. Когда активность состояния переключается между Even и Odd состояния, график вычисляет числа в последовательности градины. Когда последовательность достигает значения единицы, выходные данные y становится true и запускает блок Stop Simulation (Simulink) в модели Simulink ®.
Состояния активности определяют, что делает диаграмма Stateflow, пока состояние активно. Наиболее распространенными типами состояний активности являются entry, during, и exit действия.
| Тип состояния активности | Сокращение | Описание |
|---|---|---|
entry | en | Действие происходит на временном шаге, когда состояние становится активным. |
during | du | Действие происходит на временном шаге, когда состояние уже активно и график не переходит из состояния. |
exit | ex | Действие происходит на временном шаге, когда график переходит из состояния. |
Тип состояния активности можно задать по его полному ключевому слову (entry, during, exit) или его сокращением (en, du, ex). Можно также объединить типы состояний активности с помощью запятых. Например, действие с комбинированным типом entry,during происходит на временном шаге, когда состояние становится активным, и на каждом последующем временном шаге, пока состояние остается активным.
В этой таблице перечислены результаты каждого состояния активности в графике градины.
| Государство | Действие | Результат |
|---|---|---|
Init |
entry: n2 = rem(n,2); y = false; | Когда Init становится активным в начале симуляции, определяет четность n и устанавливает y на false. |
exit: y = isequal(n,1); | При переходе из Init после одного временного шага определяет, n ли равно единице. | |
Even |
entry,during: n = n/2; n2 = rem(n,2); | Вычисляет следующее число последовательности градины (
|
Odd |
entry,during: n = 3*(n-y)+1; n2 = rem(n,2); | Вычисляет следующее число последовательности градины (3
На протяжении большей части симуляции |
Переходные действия определяют, что делает диаграмма Stateflow, когда переход уводит от активного состояния. Наиболее распространенными типами переходных действий являются условия и условные действия. Чтобы задать действия перехода, используйте метку с таким синтаксисом:
[condition]{conditional_action}condition является логическим выражением, которое определяет, происходит ли переход. Если вы не задаете условие, подразумеваемое условие, вычисляющее true, принимается.
conditional_action - это команда, которая выполняется, когда условие, защищающее переход, соответствует true. Условное действие происходит после условия, но перед любым exit или entry Состояния активности.
В этой таблице перечислены результаты каждого переходного действия в графике градины.
| Переход | Действие | Тип действия | Результат |
|---|---|---|---|
Переход по умолчанию в Init |
n = u | Условное действие | В начале симуляции присваивает вход значение u к локальным данным n. |
Переход от Init на Even |
n2 == 0 | Состояние | Когда n является четным, переход происходит. Число 1 в источнике этого перехода указывает, что оно оценивается перед переходом на Odd. |
Переход от Init на Odd | Ничего | Когда n нечетно, происходит переход. Число 2 в источнике этого перехода указывает, что оно оценивается после перехода к Even. | |
Переход от Odd на Even |
n2 == 0 | Состояние | Когда n является четным, переход происходит. |
Переход от Even на Odd |
n2 ~= 0 | Состояние | Когда n нечетно, происходит переход. |
y = isequal(n,1) | Условное действие | Когда происходит переход, определяет, n равно единице. |
Предположим, что вы хотите вычислить последовательность градины, начиная со значения девять.
В диалоговом окне Model Параметры Конфигурации, в разделе Solver, выберите следующие опции:
Start time: 0.0
Stop time: inf
Type: Fixed-step
Fixed-step size: 1
На панели «Символы» выберите локальные данные n. В Property Inspector в разделе Logging выберите Log signal data.
В блоке Constant введите вход u = 9.
На вкладке Simulation нажмите Run.
![]()
График реагирует следующими действиями:
В момент времени t = 0 переход по умолчанию на Init происходит.
Действие перехода устанавливает значение n по 9.
The Init состояние становится активным.
The entry действия в Init установите n2 по 1 и y на false.
В момент времени t = 1, условие n2 == 0 false, поэтому график готовится к переходу на Odd.
The exit действие в Init устанавливает y на false.
The Init состояние становится неактивным.
The Odd состояние становится активным.
The entry действия в Odd установите n до 28 и n2 в 0.
В момент времени t = 2 условие n2 == 0 верно, поэтому график готовится к переходу на Even.
The Odd состояние становится неактивным.
The Even состояние становится активным.
The entry действия в Even установите n до 14 и n2 в 0.
В момент времени t = 3 условие n2 ~= 0 false, поэтому график не принимает переход.
The Even состояние остается активным.
The during действия в Even установите n до 7 и n2 по 1.
В момент времени t = 4 условие n2 ~= 0 верно, поэтому график готовится к переходу на Odd.
Действие перехода задает y на false.
The Even состояние становится неактивным.
The Odd состояние становится активным.
The entry действия в Odd установите n до 22 и n2 в 0.
График продолжает вычислять последовательность градины до тех пор, пока она не достигнет значения n = 1 в момент времени t = 19.
В момент t = 20 график готовится к переходу от Even на Odd.
Перед Even состояние становится неактивным, действие перехода устанавливает y на true.
The Odd состояние становится активным.
The entry действия в Odd не изменять n или n2.
Блок Stop Simulation соединяется с сигналом выхода y останавливает симуляцию.
На вкладке Simulation, под Review Results, нажмите Data Inspector.
![]()
Чтобы увидеть значения последовательности градины, в Данные Моделирования Inspector, выберите записанный сигнал n.

Stop Simulation (Simulink)