Рассмотрим два примера, поясняющих использование векторов и матриц в качестве входных и выходных переменных Stateflow-диаграмм. Необходимо отметить, что поддержка двухмерных матриц как входных и выходных переменных появляется впервые в версии Stateflow 5.0.
Для запуска соответствующих моделей в Help-навигаторе выберем закладку Demos, а далее найдем папку Stateflow-примеров с названием Matrix I/O (матричный ввод-вывод) .
Первый пример называется Vectorization. Как следует из описания этого примера, приведенного в окне справа, Stateflow позволяет работать с входными данными в виде векторов. Откроем эту модель.
В качестве входных величин data1 и data2 используются векторные сигналы блоков Constant и Constant1, т.е. векторы [1 2 3 4] и [2 4 6 8] соответственно. Описание этих переменных можно увидеть, открыв окно Stateflow Explorer.
Последовательность выполняемых над входными переменными действий определяется Stateflow-диаграммой Chart.
Как видно из рисунка, действием единственного безусловного перехода этой диаграммы является операция output=data1*data2+1; , что на языке С равносильно поэлементному умножению векторов (вычислению скалярного их произведения) и прибавлению к полученному результату единицы. Чтобы у пользователей не возникло сомнения, что речь идет именно о поэлементной, а не о матричной операции, в свободном поле диаграммы размещен эквивалентный код на языке MATLAB, в котором поэлементное умножение задается парой символов " .* ". В результате выполнения модели векторный выход Output примет значение [3 9 19 33], что отображается в окне блока Scope.
Векторизация вычислений по праву считается сильным местом пакета MATLAB, устраняя необходимость в использовании операторов DO или FOR и позволяя получить более быстрый и эффективный код. Данный пример показывает, что в Stateflow эта возможность также имеет место.
Второй пример называется Matrix Input and Output.
Этот пример демонстрирует способность Stateflow 5.0 принимать матричные сигналы от Simulink и возвращать ему матричные сигналы.
Входными сигналами являются матрицы data1=[1 2; 3 4] и data2=[3 2; 1 4]. Описание этих переменных можно увидеть, открыв окно Stateflow Explorer.
Последовательность действий, выполняемых над входными переменными, определяется Stateflow-диаграммой Chart.
Элемент матрицы final_out[i][j] определяется как сумма произведений элементов i-ой строки матрицы data1 на соответствующие элементы j-го столбца матрицы data2. В результате получаем выходную матрицу final_out, являющуюся произведением матриц data1 и data2. Поскольку в данном примере чтобы выполнить вычисления используется flow chart (потоковая диаграмма или блок-схема) и не используются промежуточные состояния, продолжительность времени моделирования может составлять всего один шаг. Результат выполнения модели можно видеть на следующем рисунке. В Simulink возвращен матричный сигнал.