C++相談室 part69at TECH
C++相談室 part69 - 暇つぶし2ch25:デフォルトの名無しさん
09/05/05 01:07:29
質問です。
割と大きめの行列にSVD(特異値分解)したいので
そういうライブラリを探しています。

それで、liboctave C++を使おうと思い以下のコードを試しに実行してみたのですが、
2x2程度の行列なら、1秒以内に完了するのですが、このコードだと15分たった現在も結果が返りません。
実際に演算にかけたい対象は、更に大きいものなので、これでは使い物にならないのですが・・・
こんなものなのでしょうか?また他に良いライブラリはないのでしょうか?確かSVDに関しては高速化の手法がいくつか考えられてたとおもうのですが・・・


Matrix m(5, 6);
m(0,0) = 1; m(0,1) = 0; m(0,2) = 1; m(0,3) = 0; m(0,4) = 0; m(0,5) = 0;
m(1,0) = 0; m(1,1) = 1; m(1,2) = 0; m(1,3) = 0; m(1,4) = 0; m(1,5) = 0;
m(2,0) = 1; m(2,1) = 1; m(2,2) = 0; m(2,3) = 0; m(2,4) = 0; m(2,5) = 0;
m(3,0) = 0; m(3,1) = 0; m(3,2) = 0; m(3,3) = 1; m(3,4) = 1; m(3,5) = 0;
m(4,0) = 0; m(4,1) = 0; m(4,2) = 0; m(4,3) = 1; m(4,4) = 0; m(4,5) = 1;
cout << "Original Matrix" << endl << m << endl;

SVD svd(m);
cout << "Left Singular Matrix" << endl << svd.left_singular_matrix() << endl;
cout << "Singular Values" << endl << svd.singular_values() << endl;
cout << "Right Singular Matrix" << endl << svd.right_singular_matrix() << endl;
cout << "Recomposed Matrix" << endl << svd.left_singular_matrix()*Matrix(DiagMatrix(svd.singular_values()))*svd.right_singular_matrix() << endl;


次ページ
続きを表示
1を表示
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch