Класс, используемый для передачи входных/выходных аргументов в функции C++, сгенерированные MATLAB Compiler SDK
Используйте mwArray
класс, чтобы передать входные/выходные аргументы сгенерированным функциям интерфейса C++. Этот класс состоит из тонкой оболочки вокруг MATLAB® массив. Все данные в MATLAB представлены массивами. The mwArray
класс предоставляет необходимые конструкторы, методы и операторы для создания и инициализации массивов, а также простую индексацию.
Примечание
Арифметические операторы, такие как сложение и вычитание, больше не поддерживаются в релизе 14.
mclcppclass.h
mclmcrrt.h
Совет
MATLAB Compiler SDK™ автоматически включает эти заголовочные файлы в заголовочный файл, сгенерированный для ваших функций MATLAB.
Создайте пустой массив типа mxDOUBLE_CLASS
.
Создайте пустой массив заданного типа.
mxClassID mxID | Допустимые mxClassID определение типа создаваемого массива. Смотрите Работу с mxArrays для получения дополнительной информации о mxClassID . |
Создайте матрицу 2-D с заданным типом и сложностью. Для нечисловых типов, mxComplexity
будет проигнорировано. Для числовых типов передайте mxCOMPLEX
для последнего аргумента для создания сложной матрицы; в противном случае матрица будет действительной. Все элементы равны нулю. Для матриц камер все элементы инициализируются в пустые камеры.
mwSize num_rows | Количество строк в массиве |
mwSize num_cols | Количество столбцов в массиве |
mxClassID mxID | Допустимые mxClassID определение типа создаваемого массива. Смотрите Работу с mxArrays для получения дополнительной информации о mxClassID . |
mxComplexity cmplx | Сложность создаваемого массива. Допустимые значения mxREAL и mxCOMPLEX . Значение по умолчанию mxREAL . |
Создайте n
-мерный массив заданного типа и сложности. Для нечисловых типов, mxComplexity
будет проигнорировано. Для числовых типов передайте mxCOMPLEX
для последнего аргумента для создания сложной матрицы; в противном случае массив будет вещественным. Все элементы равны нулю. Для массивов ячеек все элементы инициализируются в пустые камеры.
mwSize num_dims | Количество размерностей в массиве |
const mwSize* dims | Размерности массива |
mxClassID mxID | Допустимые mxClassID определение типа создаваемого массива. Смотрите Работу с mxArrays для получения дополнительной информации о mxClassID . |
mxComplexity cmplx | Сложность создаваемого массива. Допустимые значения mxREAL и mxCOMPLEX . Значение по умолчанию mxREAL . |
Создайте 1-бай-
массив типов n
mxCHAR_CLASS
, с n = strlen(str)
, и инициализируйте данные массива с помощью символов в предоставленной строке.
const char* str | Пустой символ буфер, используемый для инициализации массива |
Создайте матрицу типов mxCHAR_CLASS
, и инициализируйте данные массива с помощью символов в предоставленных строках. Созданный массив имеет размерности m
-by- max
, где m
количество строк и max
- длина самой длинной строки в str
.
mwSize num_strings | Количество строк в массиве входа |
const char** str | Массив строк с концом NULL |
Создайте матрицу типов mxSTRUCT_CLASS
, с указанными именами полей. Все элементы инициализированы пустыми камерами.
mwSize num_rows | Количество строк в массиве |
mwSize num_cols | Количество столбцов в массиве |
int num_fields | Количество полей в struct матрица. |
const char** fieldnames | Массив строк с нулевым концом, представляющих имена полей |
Создайте n
-мерный массив типа mxSTRUCT_CLASS
, с указанными именами полей. Все элементы инициализированы пустыми камерами.
mwSize num_dims | Количество размерностей в массиве |
const mwSize* dims | Размерности массива |
int num_fields | Количество полей в struct матрица. |
const char** fieldnames | Массив строк с нулевым концом, представляющих имена полей |
Создайте глубокую копию существующего массива.
mwArray& arr | mwArray скопировать |
Создайте действительный скалярный массив.
Скалярный массив создается с типом входного параметра.
<type> re | Скалярное значение для инициализации массива. <type> может быть любым из следующих:
|
Создайте комплексный скалярный массив.
Скалярный массив создается с типом входного параметра.
<type> re | Скалярное значение для инициализации вещественной части массива |
<type> im | Скалярное значение для инициализации мнимой части массива |
<type>
может быть любым из следующих:
mxDouble
mxSingle
mxInt8
mxUint8
mxInt16
mxUint16
mxInt32
mxUint32
mxInt64
mxUint64
mxLogical
Создайте новый массив, представляющий глубокую копию массива.
mwArray a(2, 2, mxDOUBLE_CLASS); mwArray b = a.Clone();
Создайте общую копию существующего массива. Новый массив и исходный массив указывают на одни и те же данные.
mwArray a(2, 2, mxDOUBLE_CLASS); mwArray b = a.SharedCopy();
Сериализуйте массив в байты. A 1-by- n
числовая матрица типа mxUINT8_CLASS
возвращается, содержащий сериализованные данные. Данные могут быть десериализованы обратно в исходное представление путем вызова mwArray::Deserialize()
.
mwArray a(2, 2, mxDOUBLE_CLASS); mwArray b = a.Serialize();
Определите тип массива. Смотрите Работу с mxArrays для получения дополнительной информации о mxClassID
.
mwArray a(2, 2, mxDOUBLE_CLASS); mxClassID id = a.ClassID();
Определите размер элемента типа массива в байтах. Если массив сложен, возвращаемое значение будет представлять размер в байтах действительной части элемента.
mwArray a(2, 2, mxDOUBLE_CLASS); int size = a.ElementSize();
Определите общий размер массива.
mwArray a(2, 2, mxDOUBLE_CLASS); int n = a.NumberOfElements();
Определите размер данных массива. Если базовый массив не разрежен, это возвращает то же значение, что и NumberOfElements()
.
mwArray a(2, 2, mxDOUBLE_CLASS); int n = a.NumberOfNonZeros();
Определите выделенный размер данных массива. Если базовый массив не разрежен, это возвращает то же значение, что и NumberOfElements()
.
mwArray a(2, 2, mxDOUBLE_CLASS); int n = a.MaximumNonZeros();
Определите размерность массива.
mwArray a(2, 2, mxDOUBLE_CLASS); int n = a.NumberOfDimensions();
Определите количество полей в struct
массив. Если базовый массив не имеет тип struct
, возвращается ноль.
const char* fields[] = {"a", "b", "c"}; mwArray a(2, 2, 3, fields); int n = a.NumberOfFields();
Определите имя данного поля в struct
массив. Если базовый массив не имеет тип struct
, выдается исключение.
int index | Индекс поля для наименования. Индексирование начинается с нуля. |
const char* fields[] = {"a", "b", "c"}; mwArray a(2, 2, 3, fields); mwString tempname = a.GetFieldName(1); const char* name = (const char*)tempname;
Определите размер каждой размерности в массиве. Размер возвращенного массива 1-by- NumberOfDimensions()
.
mwArray a(2, 2, mxDOUBLE_CLASS); mwArray dims = a.GetDimensions();
Определите, пуст ли массив.
mwArray a; bool b = a.IsEmpty();
Определите, является ли массив разреженным.
mwArray a(2, 2, mxDOUBLE_CLASS); bool b = a.IsSparse();
Определите, является ли массив числовым.
mwArray a(2, 2, mxDOUBLE_CLASS); bool b = a.IsNumeric();
Определите, является ли массив комплексным.
mwArray a(2, 2, mxDOUBLE_CLASS, mxCOMPLEX); bool b = a.IsComplex();
Возвращает true
если массив входа байтово равен этому массиву. Этот метод делает байтовое сравнение базовых массивов. Поэтому следует сравнивать массивы того же типа. Массивы разных типов в целом не будут равны, даже если они инициализированы одинаковыми данными.
mwArray& arr | Массив для сравнения с массивом. |
mwArray a(1, 1, mxDOUBLE_CLASS); mwArray b(1, 1, mxDOUBLE_CLASS); a = 1.0; b = 1.0; bool c = a.Equals(b);
Сравнивает этот массив с заданным массивом для порядка точности. Этот метод делает байтовое сравнение базовых массивов. Поэтому следует сравнивать массивы того же типа. Массивы разных типов, в целом, не будут упорядочиваться эквивалентно, даже если они инициализированы одинаковыми данными.
mwArray& arr | Массив для сравнения с массивом. |
mwArray a(1, 1, mxDOUBLE_CLASS); mwArray b(1, 1, mxDOUBLE_CLASS); a = 1.0; b = 1.0; int n = a.CompareTo(b);
Создает уникальное значение хеша из базовых байтов массива. Поэтому массивы разных типов будут иметь разные хеш- коды, даже если они инициализированы одинаковыми данными.
mwArray a(1, 1, mxDOUBLE_CLASS); int n = a.HashCode();
Возвращает строку представление базового массива. Возвращенная строка является той же самой, которая возвращается путем ввода имени переменной в командной строке MATLAB.
mwArray a(1, 1, mxDOUBLE_CLASS, mxCOMPLEX); a.Real() = 1.0; a.Imag() = 2.0; printf("%s\n", (const char*)(a.ToString()));
Возвращает массив, представляющий индексы строк (первая размерность) элементов этого массива в основном порядке. Для разреженных массивов индексы возвращаются только для ненулевых элементов, и размер возвращаемого массива равен 1-by- NumberOfNonZeros()
. Для нетранспортных массивов размер возвращенного массива равен 1-by- NumberOfElements()
, и возвращаются индексы строк всех элементов.
#include <stdio.h> mwArray a(1, 1, mxDOUBLE_CLASS); mwArray rows = a.RowIndex();
Возвращает массив, представляющий индексы столбцов (второе измерение) элементов этого массива в основном порядке. Для разреженных массивов индексы возвращаются только для ненулевых элементов, и размер возвращаемого массива равен 1-by- NumberOfNonZeros()
. Для нетранспортных массивов размер возвращенного массива равен 1-by- NumberOfElements()
, и возвращаются индексы столбцов всех элементов.
mwArray a(1, 1, mxDOUBLE_CLASS); mwArray rows = a.ColumnIndex();
Преобразуйте числовой массив, который ранее был выделен как real
на complex
. Если базовый массив имеет нечисловой тип, mwException
брошен.
double rdata[4] = {1.0, 2.0, 3.0, 4.0}; double idata[4] = {10.0, 20.0, 30.0, 40.0}; mwArray a(2, 2, mxDOUBLE_CLASS); a.SetData(rdata, 4); a.MakeComplex(); a.Imag().SetData(idata, 4);
Получение одного элемента с заданным индексом. Передается количество индексов, далее следует разделенный запятыми список 1-базовых индексов. Допустимое количество индексов, которые могут быть переданы, составляет 1 (индексация одинарного индекса) или NumberOfDimensions()
(индексация нескольких индексов индекса). При индексации одинарного индекса возвращается элемент с заданным смещением на основе 1, получая доступ к данным в основном порядке столбца. При индексации нескольких индексов для доступа к указанному элементу используется список индексов. Допустимая область значений для индексов 1 <= index <= NumberOfElements()
, для индексации одинарного индекса. Для индексации нескольких индексов,
th индекс имеет допустимую область значений: i
1 <= index[i] <= GetDimensions().Get(1, i)
. Система координат mwException
выдается в случае, если передано недопустимое число индексов или если какой-либо индекс находится вне границ.
mwSize num_indices | Количество переданных индексов в |
... | Список , разделенный запятыми индексов входа. Количество элементов должно быть равным num_indices но не должно превышать 32. |
double data[4] = {1.0, 2.0, 3.0, 4.0}; double x; mwArray a(2, 2, mxDOUBLE_CLASS); a.SetData(data, 4); x = a.Get(1,1); x = a.Get(2, 1, 2); x = a.Get(2, 2, 2);
Получение одного элемента с заданными именем поля и индексом. Этот метод можно вызвать только для массива, который имеет тип mxSTRUCT_CLASS
. Система координат mwException
выдается, если базовый массив не является struct
массив. Переданное имя поля должно быть допустимым именем поля в struct
массив. Индекс передается путем первой передачи количества индексов, за которым следует разделенный списками , разделенными запятыми 1-базовых индексов. Допустимое количество индексов, которые могут быть переданы, составляет 1 (индексация одинарного индекса) или NumberOfDimensions()
(индексация нескольких индексов индекса). При индексации одинарного индекса возвращается элемент с заданным смещением на основе 1, получая доступ к данным в столбцовом порядке. При индексации нескольких индексов для доступа к указанному элементу используется список индексов. Допустимая область значений для индексов 1 <= index <= NumberOfElements()
, для индексации одинарного индекса. Для нескольких индексаций нижних индексов i-й индекс имеет допустимую область значений: 1 <= index[i] <= GetDimensions().Get(1, i)
. Система координат mwException
выдается в случае, если передано недопустимое число индексов или если какой-либо индекс находится вне границ.
char* name | Буфер символов с обрыв нуля, содержащий имя поля |
mwSize num_indices | Количество переданных индексов в |
... | Список , разделенный запятыми индексов входа. Количество элементов должно быть равным num_indices но не должно превышать 32. |
const char* fields[] = {"a", "b", "c"}; mwArray a(1, 1, 3, fields); mwArray b = a.Get("a", 1, 1); mwArray b = a.Get("b", 2, 1, 1);
Доступы действительную часть комплексного массива. Возвращенный mwArray
считается вещественным и имеет ту же размерность и тип, что и исходный.
Комплексные массивы состоят из Комплексных чисел, которые являются векторами 1 на 2 (парами). Для примера, если номер 3+5i
, тогда пара (3,5i)
. Массив Комплексных Чисел, следовательно, двумерный (N-by-2)
, где N - количество комплексных чисел в массиве. 2+4i, 7-3i, 8+6i
будет представлен как (2,4i) (7,3i) (8,6i)
. Комплексные числа имеют два компонентов, реальную и мнимую.
double rdata[4] = {1.0, 2.0, 3.0, 4.0}; double idata[4] = {10.0, 20.0, 30.0, 40.0}; mwArray a(2, 2, mxDOUBLE_CLASS, mxCOMPLEX); a.Real().SetData(rdata, 4);
Доступы мнимую часть комплексного массива. Возвращенный mwArray
считается вещественным и имеет ту же размерность и тип, что и исходный.
Комплексные массивы состоят из Комплексных чисел, которые являются векторами 1 на 2 (парами). Для примера, если номер 3+5i
, тогда пара (3,5i)
. Массив Комплексных Чисел, следовательно, двумерный (N-by-2)
, где N - количество комплексных чисел в массиве. 2+4i, 7-3i, 8+6i
будет представлен как (2,4i) (7,3i) (8,6i)
. Комплексные числа имеют два компонентов, реальную и мнимую.
double rdata[4] = {1.0, 2.0, 3.0, 4.0}; double idata[4] = {10.0, 20.0, 30.0, 40.0}; mwArray a(2, 2, mxDOUBLE_CLASS, mxCOMPLEX); a.Imag().SetData(idata, 4);
Назначьте общую копию массива входа текущим ссылкам на камеру для массивов типов mxCELL_CLASS
и mxSTRUCT_CLASS
.
mwArray& arr | mwArray для назначения текущим ссылкам камеры |
mwArray a(2, 2, mxDOUBLE_CLASS); mwArray b(2, 2, mxINT16_CLASS); mwArray c(1, 2, mxCELL_CLASS); c.Get(1,1).Set(a); c.Get(1,2).Set(b);
Копирует данные массива в предоставленный числовой буфер.
Данные копируются в основном порядке. Если базовый массив не имеет того же типа, что и входа буфер, данные преобразуются в этот тип по мере копирования. Если преобразование не может быть выполнено, mwException
брошен.
<numeric-type>* buffer | Буфер для получения копии. Допустимые типы для <numeric-type> являются:
|
mwSize len | Максимальная длина буфера. Максимум len элементы будут скопированы. |
double rdata[4] = {1.0, 2.0, 3.0, 4.0}; double data_copy[4] ; mwArray a(2, 2, mxDOUBLE_CLASS); a.SetData(rdata, 4); a.GetData(data_copy, 4);
Копирует данные массива в предоставленные mxLogical
буфер.
Данные копируются в основном порядке. Если базовый массив не имеет тип mxLOGICAL_CLASS
данные преобразуются в этот тип при копировании. Если преобразование не может быть выполнено, mwException
брошен.
mxLogical* buffer | Буфер для получения копии |
mwSize len | Максимальная длина буфера. Максимум len элементы будут скопированы. |
mxLogical data[4] = {true, false, true, false}; mxLogical data_copy[4] ; mwArray a(2, 2, mxLOGICAL_CLASS); a.SetLogicalData(data, 4); a.GetLogicalData(data_copy, 4);
Копирует данные массива в предоставленные mxChar
буфер.
Данные копируются в основном порядке. Если базовый массив не имеет тип mxCHAR_CLASS
данные преобразуются в этот тип при копировании. Если преобразование не может быть выполнено, mwException
брошен.
mxChar** buffer | Буфер для получения копии |
mwSize len | Максимальная длина буфера. Максимум len элементы будут скопированы. |
mxChar data[6] = {'H', 'e' , `l' , 'l' , 'o' , '\0'}; mxChar data_copy[6] ; mwArray a(1, 6, mxCHAR_CLASS); a.SetCharData(data, 6); a.GetCharData(data_copy, 6);
Копирует данные из предоставленного числового буфера в массив.
Данные копируются в основном порядке. Если базовый массив не имеет того же типа, что и входа буфер, данные преобразуются в этот тип по мере копирования. Если преобразование не может быть выполнено, mwException
брошен.
Вы не можете использовать SetData
для динамического изменения размера mwArray
.
<numeric-type>* buffer | Буфер, содержащий данные в копию. действительные типы для <numeric-type> являются:
|
mwSize len | Максимальная длина буфера. Максимум len элементы будут скопированы. |
double rdata[4] = {1.0, 2.0, 3.0, 4.0}; double data_copy[4] ; mwArray a(2, 2, mxDOUBLE_CLASS); a.SetData(rdata, 4); a.GetData(data_copy, 4);
Копирует данные из предоставленных mxLogical
буфер в массив.
Данные копируются в основном порядке. Если базовый массив не имеет тип mxLOGICAL_CLASS
данные преобразуются в этот тип при копировании. Если преобразование не может быть выполнено, mwException
брошен.
mxLogical* buffer | Буфер, содержащий данные для копирования |
mwSize len | Максимальная длина буфера. Максимум len элементы будут скопированы. |
mxLogical data[4] = {true, false, true, false}; mxLogical data_copy[4] ; mwArray a(2, 2, mxLOGICAL_CLASS); a.SetLogicalData(data, 4); a.GetLogicalData(data_copy, 4);
Копирует данные из предоставленных mxChar
буфер в массив.
Данные копируются в основном порядке. Если базовый массив не имеет тип mxCHAR_CLASS
данные преобразуются в этот тип при копировании. Если преобразование не может быть выполнено, mwException
брошен.
mxChar** buffer | Буфер, содержащий данные для копирования |
mwSize len | Максимальная длина буфера. Максимум len элементы будут скопированы. |
mxChar data[6] = {'H', 'e' , `l' , 'l' , 'o' , '\0'}; mxChar data_copy[6] ; mwArray a(1, 6, mxCHAR_CLASS); a.SetCharData(data, 6); a.GetCharData(data_copy, 6);
Десериализует массив, который был сериализован с помощью mwArray::Serialize()
. Массив входа должен иметь тип mxUINT8_CLASS
и содержать данные из сериализованного массива. Если входные данные не представляют сериализованную mwArray
, поведение этого метода не определено.
mwArray& arr | mwArray который был получен вызовом mwArray::Serialize |
double rdata[4] = {1.0, 2.0, 3.0, 4.0}; mwArray a(1,4,mxDOUBLE_CLASS); a.SetData(rdata, 4); mwArray b = a.Serialize(); a = mwArray::Deserialize(b);
Создает действительную разреженную матрицу типа double
с заданным количеством строк и столбцов.
Длины входа строки, индекса столбца и массивов данных должны быть одинаковыми или равными 1. В случае, когда любая из этих массивов равна 1, значение повторяется на протяжении всей конструкции матрицы.
Если одна и та же пара строка/столбец происходит более одного раза, значение данных, присвоенное этому элементу, является суммой всех значений, связанных с этой парой. Если какой-либо элемент rowindex
или colindex
массив больше заданных значений в num_rows
или num_cols
соответственно выдается исключение.
mwSize rowindex_size | Размер rowindex массив |
mwIndex* rowindex | Массив индексов строк ненулевых элементов |
mwSize colindex_size | Размер colindex массив |
mwIndex* colindex | Массив индексов столбцов ненулевых элементов |
mwSize data_size | Размер массива данных |
mxDouble* rdata | Данные, сопоставленные с ненулевыми индексами строк и столбцов |
mwSize num_rows | Количество строк в матрице |
mwSize num_cols | Количество столбцов в матрице |
mwSize nzmax | Зарезервированное хранилище для разреженной матрицы. Если nzmax равен нулю, хранилище будет установлено на max{rowindex_size, colindex_size, data_size} . |
Этот пример создает разреженную тридиагональную матрицу 4 на 4:
2 -1 0 0 -1 2 -1 0 0 -1 2 -1 0 0 -1 2
Следующий код при запуске:
double rdata[] = {2.0, -1.0, -1.0, 2.0, -1.0, -1.0, 2.0, -1.0, -1.0, 2.0}; mwIndex row_tridiag[] = {1, 2, 1, 2, 3, 2, 3, 4, 3, 4 }; mwIndex col_tridiag[] = {1, 1, 2, 2, 2, 3, 3, 3, 4, 4 }; mwArray mysparse = mwArray::NewSparse(10, row_tridiag, 10, col_tridiag, 10, rdata, 4, 4, 10); std::cout << mysparse << std::endl;
отобразит следующий выход на экран:
(1,1) 2 (2,1) -1 (1,2) -1 (2,2) 2 (3,2) -1 (2,3) -1 (3,3) 2 (4,3) -1 (3,4) -1 (4,4) 2
Создает действительную разреженную матрицу типа double
с количеством строк и столбцов, выведенных из входных данных.
Длины входа строки, индекса столбца и массивов данных должны быть одинаковыми или равными 1. В случае, когда любой из этих массивов равен 1, значение повторяется через конструкцию матрицы.
Если одна и та же пара строка/столбец происходит более одного раза, значение данных, присвоенное этому элементу, является суммой всех значений, связанных с этой парой. Количество строк и столбцов в созданной матрице вычисляется из входа rowindex
и colindex
массивы как num_rows = max{rowindex}, num_cols = max{colindex}
.
mwSize rowindex_size | Размер rowindex массив |
mwIndex* rowindex | Массив индексов строк ненулевых элементов |
mwSize colindex_size | Размер colindex массив |
mwIndex* colindex | Массив индексов столбцов ненулевых элементов |
mwSize data_size | Размер массива данных |
mxDouble* rdata | Данные, сопоставленные с ненулевыми индексами строк и столбцов |
mwSize nzmax | Зарезервированное хранилище для разреженной матрицы. Если nzmax равен нулю, хранилище будет установлено на max{rowindex_size, colindex_size, data_size} . |
В этом примере мы создадим разреженную матрицу тождеств 4 на 4. Значение 1.0 копируется в каждый ненулевой элемент, заданный массивами индексов строк и столбцов:
double one = 1.0; mwIndex row_diag[] = {1, 2, 3, 4}; mwIndex col_diag[] = {1, 2, 3, 4}; mwArray mysparse = mwArray::NewSparse(4, row_diag, 4, col_diag, 1, &one, 0); std::cout << mysparse << std::endl; (1,1) 1 (2,2) 1 (3,3) 1 (4,4) 1
Создает сложную разреженную матрицу типа double
с заданным количеством строк и столбцов.
Длины входа строки, индекса столбца и массивов данных должны быть одинаковыми или равными 1. В случае, когда любой из этих массивов равен 1, значение повторяется через конструкцию матрицы.
Если одна и та же пара строка/столбец происходит более одного раза, значение данных, присвоенное этому элементу, является суммой всех значений, связанных с этой парой. Если какой-либо элемент rowindex
или colindex
массив больше заданных значений в num_rows
, num_cols
соответственно, выдается исключение.
mwSize rowindex_size | Размер rowindex массив |
mwIndex* rowindex | Массив индексов строк ненулевых элементов |
mwSize colindex_size | Размер colindex массив |
mwIndex* colindex | Массив индексов столбцов ненулевых элементов |
mwSize data_size | Размер массива данных |
mxDouble* rdata | Действительная часть данных, сопоставленная с ненулевыми индексами строка и столбец |
mxDouble* idata | Мнимая часть данных, сопоставленная с ненулевыми индексами строк и столбцов |
mwSize num_rows | Количество строк в матрице |
mwSize num_cols | Количество столбцов в матрице |
mwSize nzmax | Зарезервированное хранилище для разреженной матрицы. Если nzmax равен нулю, хранилище будет установлено на max{rowindex_size, colindex_size, data_size} . |
Этот пример создает комплексную тридиагональную матрицу:
double rdata[] = {2.0, -1.0, -1.0, 2.0, -1.0, -1.0, 2.0, -1.0, -1.0, 2.0}; double idata[] = {20.0, -10.0, -10.0, 20.0, -10.0, -10.0, 20.0, -10.0, -10.0, 20.0}; mwIndex row_tridiag[] = {1, 2, 1, 2, 3, 2, 3, 4, 3, 4}; mwIndex col_tridiag[] = {1, 1, 2, 2, 2, 3, 3, 3, 4, 4}; mwArray mysparse = mwArray::NewSparse(10, row_tridiag, 10, col_tridiag, 10, rdata, idata, 4, 4, 10); std::cout << mysparse << std::endl;
На экране отображается следующий выход:
(1,1) 2.0000 +20.0000i (2,1) -1.0000 -10.0000i (1,2) -1.0000 -10.0000i (2,2) 2.0000 +20.0000i (3,2) -1.0000 -10.0000i (2,3) -1.0000 -10.0000i (3,3) 2.0000 +20.0000i (4,3) -1.0000 -10.0000i (3,4) -1.0000 -10.0000i (4,4) 2.0000 +20.0000i
Создает сложную разреженную матрицу типа double
с количеством строк и столбцов, выведенных из входных данных.
Длины входа строки, индекса столбца и массивов данных должны быть одинаковыми или равными 1. В случае, когда любой из этих массивов равен 1, значение повторяется через конструкцию матрицы.
Если одна и та же пара строка/столбец происходит более одного раза, значение данных, присвоенное этому элементу, является суммой всех значений, связанных с этой парой. Количество строк и столбцов в созданной матрице вычисляется из входа rowindex
и colindex
массивы как num_rows = max{rowindex}, num_cols = max{colindex}
.
mwSize rowindex_size | Размер rowindex массив |
mwIndex* rowindex | Массив индексов строк ненулевых элементов |
mwSize colindex_size | Размер colindex массив |
mwIndex* colindex | Массив индексов столбцов ненулевых элементов |
mwSize data_size | Размер массива данных |
mxDouble* rdata | Действительная часть данных, сопоставленная с ненулевыми индексами строка и столбец |
mxDouble* idata | Мнимая часть данных, сопоставленная с ненулевыми индексами строк и столбцов |
mwSize nzmax | Зарезервированное хранилище для разреженной матрицы. Если nzmax равен нулю, хранилище будет установлено на max{rowindex_size, colindex_size, data_size} . |
Этот пример создает сложную матрицу путем вывода размерностей и распределения памяти из входных данных.
mwArray mysparse = mwArray::NewSparse(10, row_tridiag, 10, col_tridiag, 10, rdata, idata, 0); std::cout << mysparse << std::endl; (1,1) 2.0000 +20.0000i (2,1) -1.0000 -10.0000i (1,2) -1.0000 -10.0000i (2,2) 2.0000 +20.0000i (3,2) -1.0000 -10.0000i (2,3) -1.0000 -10.0000i (3,3) 2.0000 +20.0000i (4,3) -1.0000 -10.0000i (3,4) -1.0000 -10.0000i (4,4) 2.0000 +20.0000i
Создает логическую разреженную матрицу с заданным количеством строк и столбцов.
Длины входа строки, индекса столбца и массивов данных должны быть одинаковыми или равными 1. В случае, когда любая из этих массивов равна 1, значение повторяется на протяжении всей конструкции матрицы.
Если одна и та же пара строка/столбец происходит более одного раза, значение данных, присвоенное этому элементу, является суммой всех значений, связанных с этой парой. Если какой-либо элемент rowindex
или colindex
массив больше заданных значений в num_rows
, num_cols
соответственно, выдается исключение.
mwSize rowindex_size | Размер rowindex массив |
mwIndex* rowindex | Массив индексов строк ненулевых элементов |
mwSize colindex_size | Размер colindex массив |
mwIndex* colindex | Массив индексов столбцов ненулевых элементов |
mwSize data_size | Размер массива данных |
mxLogical* rdata | Данные, сопоставленные с ненулевыми индексами строк и столбцов |
mwSize num_rows | Количество строк в матрице |
mwSize num_cols | Количество столбцов в матрице |
mwSize nzmax | Зарезервированное хранилище для разреженной матрицы. Если nzmax равен нулю, хранилище будет установлено на max{rowindex_size, colindex_size, data_size} . |
Этот пример создает разреженную логическую тридиагональную матрицу 4 на 4, присваивая true
каждому ненулевому значению:
mxLogical one = true; mwIndex row_tridiag[] = {1, 2, 1, 2, 3, 2, 3, 4, 3, 4}; mwIndex col_tridiag[] = {1, 1, 2, 2, 2, 3, 3, 3, 4, 4}; mwArray mysparse = mwArray::NewSparse(10, row_tridiag, 10, col_tridiag, 1, &one, 4, 4, 10); std::cout << mysparse << std::endl; (1,1) 1 (2,1) 1 (1,2) 1 (2,2) 1 (3,2) 1 (2,3) 1 (3,3) 1 (4,3) 1 (3,4) 1 (4,4) 1
Создает логическую разреженную матрицу с количеством строк и столбцов, выведенных из входных данных.
Длины входа строки, индекса столбца и массивов данных должны быть одинаковыми или равными 1. В случае, когда любой из этих массивов равен 1, значение повторяется через конструкцию матрицы.
Количество строк и столбцов в созданной матрице вычисляется из входа rowindex
и colindex
массивы как num_rows = max {rowindex}, num_cols = max {colindex}
.
mwSize rowindex_size | Размер rowindex массив |
mwIndex* rowindex | Массив индексов строк ненулевых элементов |
mwSize colindex_size | Размер colindex массив |
mwIndex* colindex | Массив индексов столбцов ненулевых элементов |
mwSize data_size | Размер массива данных |
mxLogical* rdata | Данные, сопоставленные с ненулевыми индексами строк и столбцов |
mwSize nzmax | Зарезервированное хранилище для разреженной матрицы. Если nzmax равен нулю, хранилище будет установлено на max{rowindex_size, colindex_size, data_size} . |
Этот пример использует данные из первого примера, но позволяет вычислять количество строк, количество столбцов и выделенное хранилище из входных данных:
mwArray mysparse = mwArray::NewSparse(10, row_tridiag, 10, col_tridiag, 1, &one, 0); std::cout << mysparse << std::endl; (1,1) 1 (2,1) 1 (1,2) 1 (2,2) 1 (3,2) 1 (2,3) 1 (3,3) 1 (4,3) 1 (3,4) 1 (4,4) 1
Создает пустую разреженную матрицу. Все элементы в пустой разреженной матрице первоначально равны нулю, а объем выделенного хранилища для ненулевых элементов задан как nzmax
.
mwSize num_rows | Количество строк в матрице |
mwSize num_cols | Количество столбцов в матрице |
mwSize nzmax | Зарезервированное хранилище для разреженной матрицы |
mxClassID mxID | Тип данных для хранения в матрице. В настоящее время разреженные матрицы типа double точность и logical поддерживаются. Передайте mxDOUBLE_CLASS для создания double точность разреженной матрицы. Передайте mxLOGICAL_CLASS для создания logical разреженная матрица. |
mxComplexity cmplx | Комплексность матрицы. Передайте mxCOMPLEX для создания complex разреженная матрица и mxREAL для создания real разреженная матрица. Этот аргумент может быть опущен, в этом случае сложность по умолчанию real |
Этот пример создает действительную пустую разреженную матрицу типа 3 на 3 double
с зарезервированным хранилищем для 4 ненулевых элементов:
mwArray mysparse = mwArray::NewSparse (3, 3, 4, mxDOUBLE_CLASS); std::cout << mysparse << std::endl; All zero sparse: 3-by-3
Получите значение NaN
(Не число).
Функции mwArray::GetNaN
для возврата значения NaN
для вашей системы. NaN
является арифметическим представлением IEEE для не число. Некоторые математические операции возврата NaN
в результате, например:
0.0/0.0
Inf-Inf
Значение NaN
встроена в систему; вы не можете изменить его.
double x = mwArray::GetNaN();
Возвращает значение MATLAB eps
переменная. Эта переменная является расстоянием от 1,0 до следующего по величине числа с плавающей запятой. Следовательно, это мера точности с плавающей точностью. Система MATLAB pinv
и rank
использование функций eps
как допуск по умолчанию.
double x = mwArray::GetEps();
Возвращает значение внутренней Inf
MATLAB переменная.
Inf
является постоянной переменной, представляющей арифметическую положительную бесконечность IEEE. Значение Inf
встроена в систему; вы не можете изменить его.
Операции, которые возвращают Inf
включать
Деление на 0. Для примера 5/0 возвратов Inf
.
Операции, приводящие к переполнению. Для примера, exp(10000)
возвращает Inf
поскольку результат слишком велик, чтобы быть представленным на вашем компьютере.
double x = mwArray::GetInf();
Определите, является ли значение конечным. Число конечно, если оно больше -Inf
и менее Inf
.
double x | Значение для проверки на конечность |
bool x = mwArray::IsFinite(1.0);
Определяет, равно ли значение бесконечности или минус бесконечности. MATLAB сохраняет значение бесконечности в постоянной переменной с именем Inf
, который представляет арифметическую положительную бесконечность IEEE. Значение переменной, Inf
, встроена в систему; вы не можете изменить его.
Операции, которые возвращают бесконечность, включают
Деление на 0. Для примера 5/0 возвратов бесконечность.
Операции, приводящие к переполнению. Для примера, exp(10000)
возвращает бесконечность, поскольку результат слишком велик, чтобы быть представленным на вашей машине. Если значение равно NaN
(Не число), затем mxIsInf
возвращает false
. Другими словами, NaN
не равен бесконечности.
double x | Значение для проверки на бесконечность |
bool x = mwArray::IsInf(1.0);
Определяет, является ли значение NaN
. NaN
является арифметическим представлением IEEE для не число. NaN
получено в результате математически неопределенных операций, таких как
0.0/0.0
Inf-Inf
Система понимает семейство битовых шаблонов как представляющее NaN
. Другими словами, NaN
не является единичным значением, скорее это семейство чисел, которое программное обеспечение MATLAB (и другие совместимые с IEEE приложения) используют, чтобы представлять условие ошибки или отсутствующие данные.
double x | Значение для тестирования на NaN |
bool x = mwArray::IsNaN(1.0);
Получение одного элемента с заданным индексом. Индекс передается как разделенный запятыми список 1-базовых индексов. Этот оператор перегружен для поддержки индексов с 1 по 32. Допустимое количество индексов, которые могут быть переданы, составляет 1 (индексация одинарного индекса) или NumberOfDimensions()
(индексация нескольких индексов индекса). При индексации одинарного индекса возвращается элемент с заданным смещением на основе 1, получая доступ к данным в столбцовом порядке. При индексации нескольких индексов для доступа к указанному элементу используется список индексов. Допустимая область значений для индексов 1 <= index <= NumberOfElements()
, для индексации одинарного индекса. Для нескольких индексаций нижних индексов i-й индекс имеет допустимую область значений: 1 <= index[i] <= GetDimensions().Get(1, i)
. Система координат mwException
выдается в случае, если передано недопустимое число индексов или если какой-либо индекс находится вне границ.
mwIndex i1, mwIndex i2, mwIndex i3, ..., | Список , разделенный запятыми индексов входа |
double data[4] = {1.0, 2.0, 3.0, 4.0}; double x; mwArray a(2, 2, mxDOUBLE_CLASS); a.SetData(data, 4); x = a(1,1); x = a(1,2); x = a(2,2);
Получение одного элемента с заданными именем поля и индексом. Этот метод можно вызвать только для массива, который имеет тип mxSTRUCT_CLASS
. Система координат mwException
выдается, если базовый массив не является struct
массив. Переданное имя поля должно быть допустимым именем поля в struct
массив. Индекс передается первой передачей количества индексов, далее массив из 1-базовых индексов. Этот оператор перегружен для поддержки индексов с 1 по 32. Допустимое количество индексов, которые могут быть переданы, составляет 1 (индексация одинарного индекса) или NumberOfDimensions()
(индексация нескольких индексов индекса). При индексации одинарного индекса возвращается элемент с заданным смещением на основе 1, получая доступ к данным в столбцовом порядке. При индексации нескольких индексов для доступа к указанному элементу используется список индексов. Допустимая область значений для индексов 1 <= index <= NumberOfElements()
, для индексации одинарного индекса. Для нескольких индексаций нижних индексов i-й индекс имеет допустимую область значений: 1 <= index[i] <= GetDimensions().Get(1, i)
. Система координат mwException
выдается в случае, если передано недопустимое число индексов или если какой-либо индекс находится вне границ.
char* name | Значение null оконечно строка , содержащая имя поля, которое нужно получить |
mwIndex i1, mwIndex i2, mwIndex i3, ..., | Список , разделенный запятыми индексов входа |
const char* fields[] = {"a", "b", "c"}; int index[2] = {1, 1}; mwArray a(1, 1, 3, fields); mwArray b = a("a", 1, 1); mwArray b = a("b", 1, 1);
Задает одно скалярное значение. Этот оператор перегружен для всех числовых и логических типов.
const <type>& x | Значение, которое нужно присвоить |
mwArray a(2, 2, mxDOUBLE_CLASS); a(1,1) = 1.0; a(1,2) = 2.0; a(2,1) = 3.0; a(2,2) = 4.0;
Выбирает одно скалярное значение. Этот оператор перегружен для всех числовых и логических типов.
mwIndex i1, mwIndex i2, mwIndex i3, ..., | Список , разделенный запятыми индексов входа |
double data[4] = {1.0, 2.0, 3.0, 4.0}; double x; mwArray a(2, 2, mxDOUBLE_CLASS); a.SetData(data, 4); x = (double)a(1,1); x = (double)a(1,2); x = (double)a(2,1); x = (double)a(2,2);
Запись mwArray
в выходной поток. Выход совпадает с форматом выхода при вводе имени переменной в командной строке MATLAB. См. ToString()
.