как я могу создать матрицу double с помощью alglib?

#c #matrix #alglib

#c #матрица #alglib

Вопрос:

Мне нужно создать матрицу с помощью alglib, потому что мне нужно использовать функцию, содержащуюся в библиотеке, но мне нужно, чтобы моя матрица содержала элемент типа double (или что-то похожее на double, реализованное в alglib), как я могу это сделать?

если это невозможно, знает ли кто-нибудь библиотеку, которая реализует функцию SVD даже для матрицы типа double?

Я использую c .

Спасибо

Ответ №1:

Для текущей версии alglib на момент написания, 2D-матрица значений двойной точности может быть создана следующим образом:

 ap::real_2d_array matrix;
double data[4] = {0.1, 0.2,
                  0.3, 0.4};
matrix.setcontent(1, 2, 1, 2, data);
  

Матрица, созданная кодом, будет выглядеть как:

 0.1  0.2

0.3  0.4
  

Функция setcontent — это то, что определяет размеры и содержимое матрицы. Он имеет следующее определение:

 setcontent(int row_start_index, int row_end_index, int col_start_index, int col_end_index, data)
  

В качестве альтернативы, если вы хотите задать размеры матрицы, не заполняя ее данными, вы можете использовать следующее:

 setbounds(int row_start_index, int row_end_index, int col_start_index, int col_end_index)
  

Ответ №2:

В руководстве написано:

ALGLIB (заголовок ap.h) определяет несколько «базовых» типов данных (типов, которые используются всеми пакетами) и множество специфичных для пакета типов данных. «Базовыми» типами данных являются:

alglib::ae_int_t — целочисленный тип со знаком, используемый библиотекой

alglib::complex — сложный тип данных двойной точности, более безопасная замена std::complex

alglib::ap_error — исключение, которое генерируется библиотекой

boolean_1d_array — одномерный логический массив

integer_1d_array — 1-мерный целочисленный массив

real_1d_array — 1-мерный вещественный (двойной точности) массив

complex_1d_array — 1-мерный комплексный массив

boolean_2d_array — 2-мерный логический массив

integer_2d_array — 2-мерный целочисленный массив

real_2d_array — 2-мерный вещественный (двойной точности) массив

complex_2d_array — 2-мерный комплексный массив

Остальное должно быть довольно простым.

Это должно создать матрицу 2×2:

 alglib::real_2d_array r2("[[1.1,2.2],[3.3,4.4]]");
  

Результат:

 1.1  2.2

3.3  4.4