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 . |
Включите эффективные упорядоченные по строкам алгоритмы для симуляции и генерации кода. | Выберите параметр конфигурации модели 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 для блоков Mux и других виртуальных блоков манипуляции сигнала. Например, сигналы активно не копируют свои входные параметры, только ссылки.
Генератор кода не поддерживает эти блоки для генерации кода в упорядоченном по строкам размещении массивов.
Производная
Интегратор
Integrator Limited
Интегратор, второго порядка
Интегратор, второго порядка ограниченный
ПИД-регулятор
ПИД-регулятор (2DOF)
Пространство состояний
Передайте Fcn
Транспортная задержка
Переменная задержка
Переменная транспортная задержка
Нулевой полюсный
Интерпретированная функция MATLAB
Уровень 2 S-функция MATLAB
Matlab.system
Из электронной таблицы
Сигналы переменного размера не поддержаны для упорядоченной по строкам генерации кода.