Как я могу создать матрицу double с alglib?
Мне нужно создать матрицу с помощью alglib, потому что мне нужно использовать функцию, содержащуюся в библиотеке, но мне нужно, чтобы моя матрица содержала элемент типа double (или что-то похожее на double, реализованное в alglib), как я могу это сделать?
если это невозможно, знает ли кто-нибудь библиотеку, которая реализует функцию SVD даже для матрицы типа double?
Я использую с ++.
благодарю вас
2 ответа
Для текущей версии 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)
В руководстве написано:
ALGLIB (заголовок ap.h) определяет несколько "базовых" типов данных (типов, которые используются всеми пакетами) и множество типов данных, специфичных для каждого пакета. "Основные" типы данных:
alglib:: ae_int_t - целочисленный тип со знаком, используемый библиотекой
alglib:: complex - тип данных двойной точности complex, безопасная замена для std:: complex
alglib:: ap_error - исключение, которое выдается библиотекой
boolean_1d_array - одномерный логический массив
integer_1d_array - одномерный целочисленный массив
real_1d_array - одномерный вещественный массив (с двойной точностью)
complex_1d_array - одномерный комплексный массив
boolean_2d_array - 2-мерный логический массив
integer_2d_array - 2-мерный целочисленный массив
real_2d_array - двумерный вещественный массив (с двойной точностью)
complex_2d_array - 2-мерный комплексный массив
Остальное должно быть довольно простым.
Это должно создать матрицу 2x2:
alglib::real_2d_array r2("[[1.1,2.2],[3.3,4.4]]");
результат:
1.1 2.2
3.3 4.4