ライブラリに含まれる関数を使用する必要があるため、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 - 1 次元ブール配列
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 次元複素配列
残りはかなり簡単です。
これにより、2x2 マトリックスが作成されます。
alglib::real_2d_array r2("[[1.1,2.2],[3.3,4.4]]");
結果:
1.1 2.2
3.3 4.4