MATLAB® хранит матричные данные и массивы (1D, 2D...) в главном столбцом формате как вектор. Simulink® и генератор кода могут сохранить данные массива в главном столбцом или главном строкой формате. Для массива, сохраненного в главном столбцом размещении, элементы столбцов непрерывны в памяти. В главном строкой размещении элементы строк непрерывны. Размещение массивов также упоминается как порядок, формат и представление. Порядок, в котором хранятся элементы, может быть важен для интегрирования, удобства пользования и производительности. Определенные алгоритмы выполняют лучше на данных, хранимых в особом порядке.
Языки программирования и среды обычно принимают размещение единого массива для всех данных. MATLAB и Фортран используют главное столбцом размещение по умолчанию, тогда как C и C++ используют главное строкой размещение. С Simulink Coder™ можно сгенерировать код C/C++, который использует главное строкой размещение или главное столбцом размещение.
Память компьютера хранит данные с точки зрения одномерных массивов. Например, когда вы объявляете 3х3 матрицу, программное обеспечение хранит эту матрицу как одномерный массив с девятью элементами. По умолчанию MATLAB хранит эти элементы размещением главного массива столбца. Элементы каждого столбца непрерывны в памяти.
Рассмотрите матричный A
:
A = 1 2 3 4 5 6 7 8 9
A
переводит в массив длины 9 в этом порядке: A(1) = A(1,1) = 1; A(2) = A(2,1) = 4; A(3) = A(3,1) = 7; A(4) = A(1,2) = 2; A(5) = A(2,2) = 5;
В главном столбцом формате к следующему элементу массива в памяти получают доступ путем постепенного увеличения первого индекса массива. Например, эти пары элемента хранятся последовательно в памяти:
A(i)
и A(i+1)
B(i,j)
и B(i+1,j)
C(i,j,k)
и C(i+1,j,k)
Матричный A
представлен в памяти по умолчанию с этим расположением:
1 4 7 2 5 8 3 6 9
В размещении главного массива строки язык программирования хранит элементы строки непрерывно в памяти. В главном строкой размещении элементы массива хранятся как:
1 2 3 4 5 6 7 8 9
Можно сохранить N-мерные массивы в главном столбцом или главном строкой размещении. В главном столбцом размещении элементы от первой (крайней левой) размерности или индекса непрерывны в памяти. В главном строкой размещении элементы от последней (самой правой) размерности или индекса непрерывны.
Для получения дополнительной информации о внутреннем представлении данных MATLAB смотрите Данные MATLAB (MATLAB).
Программное обеспечение генерации кода использует главный столбцом формат по умолчанию по нескольким причинам:
Мир обработки сигналов и обработки матриц находится в основном в размещении главного массива столбца: MATLAB, LAPack, Fortran90 и библиотеки DSP.
Столбец эквивалентен каналу в основанной на кадре обработке. В этом случае главное столбцом устройство хранения данных более эффективно.
Главный массив столбца последователен со своими подматрицами компонента:
Главный столбцом 2D массив является простой конкатенацией 1D массивов.
Главный столбцом трехмерный массив является простой конкатенацией 2D массивов.
Шаг является количеством ячеек памяти, чтобы индексировать к следующему элементу в той же размерности. Шаг первой размерности является одним элементом. Шаг энного элемента измерения является продуктом размеров более низких размерностей.
Главные строкой n-D массивы имеют свой шаг 1 для самой высокой размерности. Манипуляции с субматрицами обычно получают доступ к набору данных, имеющий разброс в памяти, которая не допускает эффективную индексацию.
C использует главный строкой формат. MATLAB и Simulink используют главный столбцом формат по умолчанию. Можно сконфигурировать программное обеспечение генерации кода, чтобы сгенерировать код с размещением главного массива строки. Если вы интегрируете внешний код С со сгенерированным кодом, смотрите факторы, перечисленные в этой таблице.
Действие | Рассмотреть |
---|---|
Сконфигурируйте размещение массивов модели для генерации кода. | В диалоговом окне Configuration Parameters задайте Array layout (Simulink Coder) параметр как Column-major или Row-major . |
Включите эффективные главные строкой алгоритмы для симуляции и генерации кода. | В диалоговом окне Configuration Parameters включите Use algorithms optimized for row-major array layout (Simulink) параметр. |
Интегрируйте внешние функции кода С в размещении главного массива строки со сгенерированным кодом. | Создайте S-функции, которые интегрируют внешние функции кода со сгенерированным кодом при помощи:
Используйте блок C Caller, чтобы вызвать внешние функции C в Simulink. Задайте размещение массивов пользовательских функций C при помощи параметра конфигурации Default function array layout (Simulink). |
Скомпилированный образцовый файл,
, представляет матрицы как векторы символов в синтаксисе MATLAB без подразумеваемого формата устройства хранения данных. Этот формат позволяет вам скопировать вектор символов из файла model.rtw
.rtw
, вставить его в файл MATLAB и сделать, чтобы MATLAB распознал его.
Например, 3х3 матрица в блоке Constant
1 2 3 4 5 6 7 8 9
model.rtw
какParameter { Identifier "Constant_Value" LogicalSrc P0 Protected no Value [1.0, 4.0, 7.0, 2.0, 5.0, 8.0, 3.0, 6.0, 9.0] CGTypeIdx 18 ContainerCGTypeIdx 19 ReferencedBy Matrix(1,4) [[0, -1, 0, 0];] GraphicalRef Matrix(1,2) [[0, 1];] BHMPrmIdx 0 GraphicalSource [0, 1] OwnerSysIdx [0, -1] VarGroupIdx [1, 0] WasAccessedAsVariable 1 }
Файл
объявляет настоящее хранение для параметра матрицы. Вы видите, что формат находится в главном столбцом размещении.model_data.c
Parameters model_P = { /* Expression: [ [1,2,3] ; [4,5,6] ;[7,8,9]] * Referenced by: '<Root>/Constant ' */ { 1.0, 4.0, 7.0, 2.0, 5.0, 8.0, 3.0, 6.0, 9.0 } };
Например, 3х3 матрица в блоке Constant
1 2 3 4 5 6 7 8 9
model.rtw
какParameter { Identifier "Constant_Value" LogicalSrc P0 Protected no Value [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0] CGTypeIdx 18 ContainerCGTypeIdx 19 ReferencedBy Matrix(1,4) [[0, -1, 0, 0];] GraphicalRef Matrix(1,2) [[0, 1];] BHMPrmIdx 0 GraphicalSource [0, 1] OwnerSysIdx [0, -1] VarGroupIdx [1, 0] WasAccessedAsVariable 1 }
Файл
объявляет настоящее хранение для параметра матрицы. Вы видите, что формат находится в главном строкой размещении.model_data.h
Parameters model_P = { /* Expression: [ [1,2,3] ; [4,5,6] ;[7,8,9]] * Referenced by: '<Root>/Constant ' */ { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0 } };
Simulink и генератор кода внутреннее форматирование хранения данных отличаются от MATLAB внутреннее хранение данных, форматирующее только в устройстве хранения данных массивов комплексного числа. В MATLAB действительные и мнимые части хранятся в отдельных массивах. В Simulink и генераторе кода, части хранятся в чередованном формате. Числа в альтернативе памяти, действительной, мнимой, действительной, мнимой, и т.д. Это соглашение позволяет эффективные внедрения маленьких сигналов на строках Simulink для блоков Мультиплексора и других виртуальных блоков манипуляции сигнала. Например, сигналы активно не копируют свои входные параметры, только ссылки.
Генератор кода не поддерживает эти блоки для генерации кода в размещении главного массива строки.
Производная
Интегратор
Integrator Limited
Интегратор, второго порядка
Интегратор, второго порядка ограниченный
ПИД-регулятор
ПИД-регулятор (2DOF)
Пространство состояний
Передайте Fcn
Транспортная задержка
Переменная задержка
Переменная транспортная задержка
Нулевой полюсный
Интерпретированная функция MATLAB
Уровень 2 S-функция MATLAB
Функция MATLAB
Matlab.system
Из электронной таблицы