#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