Класс, используемый для передачи входных/выходных аргументов в функции 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-бай- массив типов nmxCHAR_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().