我需要使用 alglib 创建一个矩阵,因为我需要使用库中包含的函数,但我需要我的矩阵包含 double 类型的元素(或类似于在 alglib 中实现的 double)我该怎么做?
如果不可能,是否有人知道即使对于 double 类型的矩阵也能实现 SVD 函数的库?
我正在使用 C++。
谢谢你
对于当前版本的 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 - 双精度复数数据类型,更安全地替代 std::complex
alglib::ap_error - 库抛出的异常
boolean_1d_array - 一维布尔数组
integer_1d_array - 一维整数数组
real_1d_array - 一维实数(双精度)数组
complex_1d_array - 一维复数数组
boolean_2d_array - 二维布尔数组
integer_2d_array - 二维整数数组
real_2d_array - 二维实数(双精度)数组
complex_2d_array - 二维复数数组
其余的应该很简单。
这应该创建一个 2x2 矩阵:
alglib::real_2d_array r2("[[1.1,2.2],[3.3,4.4]]");
结果:
1.1 2.2
3.3 4.4