Действие состояния и переход являются инструкциями, которые вы записываете внутри состояния или рядом с переходом, чтобы определить, как 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)