MATLAB® хранит матричные данные и массивы (1D, 2D...) в упорядоченном по столбцам формате как вектор. Simulink® и генератор кода могут сохранить данные массива в упорядоченном по столбцам или упорядоченном по строкам формате. Для массива, сохраненного в упорядоченном по столбцам размещении, элементы столбцов непрерывны в памяти. В упорядоченном по строкам размещении элементы строк непрерывны. Размещение массивов также упоминается как порядок, формат и представление. Порядок, в котором хранятся элементы, может быть важен для интегрирования, удобства пользования и производительности. Определенные алгоритмы выполняют лучше на данных, хранимых в особом порядке.
Языки программирования и среды принимают размещение единого массива для всех данных. MATLAB и Фортран используют упорядоченное по столбцам размещение по умолчанию, тогда как C и C++ используют упорядоченное по строкам размещение. С Simulink Coder™ можно сгенерировать код C/C++, который использует упорядоченное по строкам размещение или упорядоченное по столбцам размещение.
Память компьютера хранит данные в терминах одномерных массивов. Например, когда вы объявляете 3х3 матрицу, программное обеспечение хранит эту матрицу как одномерный массив с девятью элементами. По умолчанию MATLAB хранит эти элементы упорядоченным по столбцам размещением массивов. Элементы каждого столбца непрерывны в памяти.
Рассмотрите матричный A:
A =
1 2 3
4 5 6
7 8 9A переводит в массив длины 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 к Column-major или Row-major. |
| Включите эффективные упорядоченные по строкам алгоритмы для симуляции и генерации кода. | Выберите параметр конфигурации модели 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 9model.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 9model.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 для блоков Mux и других виртуальных блоков манипуляции сигнала. Например, сигналы активно не копируют свои входные параметры, только ссылки.
Генератор кода не поддерживает эти блоки для генерации кода в упорядоченном по строкам размещении массивов.
Производная
Интегратор
Integrator Limited
Интегратор, второго порядка
Интегратор, второго порядка ограниченный
ПИД-регулятор
ПИД-регулятор (2DOF)
Пространство состояний
Передайте Fcn
Транспортная задержка
Переменная задержка
Переменная транспортная задержка
Нулевой полюсный
Интерпретированная функция MATLAB
Уровень 2 S-функция MATLAB
Matlab.system
Из электронной таблицы
Сигналы переменного размера не поддержаны для упорядоченной по строкам генерации кода.