Класс раньше передавал аргументы ввода/вывода функциям C++, сгенерированным MATLAB Compiler SDK
Используйте класс mwArray, чтобы передать аргументы ввода/вывода сгенерированным функциям интерфейса C++. Этот класс состоит из тонкой обертки вокруг массива MATLAB®. Все данные в MATLAB представлены массивами. Класс mwArray предоставляет необходимым конструкторам, методам и операторам для создания массивов и инициализации, а также простой индексации.
Арифметические операторы, такие как сложение и вычитание, больше не поддерживаются с Релиза 14.
mclcppclass.h
mclmcrrt.h
MATLAB Compiler SDK™ автоматически включает эти заголовочные файлы в заголовочный файл, сгенерированный для ваших функций MATLAB.
Создайте пустой массив типа mxDOUBLE_CLASS.
Создайте пустой массив заданного типа.
mxClassID mxID | Допустимый mxClassID, задающий тип массива, чтобы создать. Смотрите работу с mxArrays (MATLAB) для получения дополнительной информации о mxClassID. |
Создайте 2D матрицу заданного типа и сложности. Для нечисловых типов будет проигнорирован mxComplexity. Для числовых типов передайте mxCOMPLEX для последнего аргумента, чтобы создать комплексную матрицу; в противном случае матрица будет действительна. Все элементы инициализируются, чтобы обнулить. Для матриц ячейки все элементы инициализируются к пустым ячейкам.
mwSize num_rows | Количество строк в массиве |
mwSize num_cols | Количество столбцов в массиве |
mxClassID mxID | Допустимый mxClassID, задающий тип массива, чтобы создать. Смотрите работу с mxArrays (MATLAB) для получения дополнительной информации о mxClassID. |
mxComplexity cmplx | Сложность массива, чтобы создать. Допустимыми значениями является mxREAL и mxCOMPLEX. Значением по умолчанию является mxREAL. |
Создайте n - размерный массив заданного типа и сложности. Для нечисловых типов будет проигнорирован mxComplexity. Для числовых типов передайте mxCOMPLEX для последнего аргумента, чтобы создать комплексную матрицу; в противном случае массив будет действителен. Все элементы инициализируются, чтобы обнулить. Для массивов ячеек все элементы инициализируются к пустым ячейкам.
mwSize num_dims | Количество размерностей в массиве |
const mwSize* dims | Размерности массива |
mxClassID mxID | Допустимый mxClassID, задающий тип массива, чтобы создать. Смотрите работу с mxArrays (MATLAB) для получения дополнительной информации о 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 | Массив отключенных пустым указателем строк |
Создайте матрицу типа 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();
Сериализируйте массив в байты. 1 n числовой матрицей типа mxUINT8_CLASS возвращен содержащий сериализированные данные. Данные могут быть десериализованы назад в исходное представление путем вызова mwArray::Deserialize().
mwArray a(2, 2, mxDOUBLE_CLASS); mwArray b = a.Serialize();
Определите тип массива. Смотрите работу с mxArrays (MATLAB) для получения дополнительной информации о 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 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 NumberOfNonZeros(). Для неразреженных массивов размер возвращенного массива 1 NumberOfElements(), и индексы строки всех элементов возвращены.
#include <stdio.h> mwArray a(1, 1, mxDOUBLE_CLASS); mwArray rows = a.RowIndex();
Возвращает массив, представляющий индексы столбца (второе измерение) элементов этого массива в порядке развертывания по столбцам. Для разреженных массивов индексы возвращены для только ненулевых элементов, и размер возвращенного массива 1 NumberOfNonZeros(). Для неразреженных массивов размер возвращенного массива 1 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() для одной нижней индексации. Поскольку несколько преобразовывают индексацию в нижний индекс, индекс ith имеет допустимую область значений: 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);Выбирает один элемент в заданном индексе. Индекс передается первой передачей количества индексов, сопровождаемых массивом индексов на основе 1. Верный номер индексов, которые могут быть переданы в, любой 1 (одна индексация индекса) или NumberOfDimensions() (несколько преобразовывают индексацию в нижний индекс). В одном индексе, индексирующем элемент при заданном смещении на основе 1, возвращен, получив доступ к данным в постолбцовом порядке. В нескольких преобразовывают индексацию в нижний индекс списка индексов, используется, чтобы получить доступ к указанному элементу. Допустимой областью значений для индексов является 1 <= index <= NumberOfElements() для одной нижней индексации. Поскольку несколько преобразовывают индексацию в нижний индекс, индекс ith имеет допустимую область значений: 1 <= index[i] <= GetDimensions().Get(1, i). mwException выдан, если неверный номер индексов передается в или если какой-либо индекс выходит за пределы.
mwSize num_indices | Размер индексного массива |
mwIndex* index | Массив, по крайней мере, размера num_indices, содержащий индексы |
double data[4] = {1.0, 2.0, 3.0, 4.0};
int index[2] = {1, 1};
double x;
mwArray a(2, 2, mxDOUBLE_CLASS);
a.SetData(data, 4);
x = a.Get(1, index);
x = a.Get(2, index);
index[0] = 2;
index[1] = 2;
x = a.Get(2, index);Выбирает один элемент в заданном имени поля и индексе. Этот метод может только быть назван на массиве, который имеет тип mxSTRUCT_CLASS. mwException выдан, если основной массив не является массивом struct. Имя поля передало, должно быть допустимое имя поля в массиве struct. Индекс передается первой передачей количества индексов, сопровождаемых массивом индексов на основе 1. Верный номер индексов, которые могут быть переданы в, любой 1 (одна индексация индекса) или NumberOfDimensions() (несколько преобразовывают индексацию в нижний индекс). В одном индексе, индексирующем элемент при заданном смещении на основе 1, возвращен, получив доступ к данным в постолбцовом порядке. В нескольких преобразовывают индексацию в нижний индекс списка индексов, используется, чтобы получить доступ к указанному элементу. Допустимой областью значений для индексов является 1 <= index <= NumberOfElements() для одной нижней индексации. Поскольку несколько преобразовывают индексацию в нижний индекс, индекс ith имеет допустимую область значений: 1 <= index[i] <= GetDimensions().Get(1, i). mwException выдан, если неверный номер индексов передается в или если какой-либо индекс выходит за пределы.
char* name | Отключенный пустым указателем символьный буфер, содержащий имя поля |
mwSize num_indices | Количество индексов передало в |
mwIndex* index | Массив, по крайней мере, размера num_indices, содержащий индексы |
const char* fields[] = {"a", "b", "c"};
int index[2] = {1, 1};
mwArray a(1, 1, 3, fields);
mwArray b = a.Get("a", 1, index);
mwArray b = a.Get("b", 2, index);Доступы к действительной части комплексного массива. Возвращенный 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 выдан.
<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 до следующего самого большого числа с плавающей запятой. Следовательно, это - мера точности с плавающей точкой. pinv MATLAB и функции rank используют eps в качестве допуска по умолчанию.
double x = mwArray::GetEps();
Возвращает значение MATLAB внутренняя переменная Inf. 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() для одной нижней индексации. Поскольку несколько преобразовывают индексацию в нижний индекс, индекс ith имеет допустимую область значений: 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() для одной нижней индексации. Поскольку несколько преобразовывают индексацию в нижний индекс, индекс ith имеет допустимую область значений: 1 <= index[i] <= GetDimensions().Get(1, i). mwException выдан, если неверный номер индексов передается в или если какой-либо индекс выходит за пределы.
char* name | Пустой указатель отключил строку, содержащую имя поля, чтобы добраться |
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().