大規模疎行列の高速な計算方法について
- 大規模疎行列の高速な計算方法について
- 約2600万×2600の万正方行列と列ベクトルの積を高速に計算する方法を知りたい。
- ゼロでない要素は全体の0.002%程度の対角線上に帯状に分布しており、対称な分布になっている。GPUを活用した計算方法も知りたい。
- ベストアンサー
大規模疎行列の高速な計算方法について
突然の思い付きで大規模疎行列と列ベクトルの積を高速に計算する必要に迫られています。 しかし、右も左もわからない状態です(ついさっき疎行列という言葉を知りました)。 なにか取っ掛かりが欲しいのですが参考になる資料などありましたら是非教えてください。 計算する行列の特徴などを書いておきます ・約2600万×2600の万正方行列です(分割しない場合) ・対角線(左上から右下)に対して対称に分布しています ・対角線上に帯状に分布しています ・ゼロでない要素は全体の0.002%程度です(十分大きい行列の場合) さらに、GPUを使いたいとも思っています。 煮え切らない質問で申し訳ないのですがどうぞよろしくお願いします。
- kazukihanazawa
- お礼率100% (1/1)
- C・C++・C#
- 回答数1
- ありがとう数1
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
対称バンド行列とベクトルの積で検索すればいろいろとでてきます。 BALSのLevel2に?SBMVというルーチンがあります。 http://www.rcs.arch.t.u-tokyo.ac.jp/kusuhara/fswiki/wiki.cgi?page=%BF%F4%C3%CD%B7%D7%BB%BB%A5%E9%A5%A4%A5%D6%A5%E9%A5%EA 疎行列の計算についてはsparseというライブラリがあります。(これについては名前だけしか知りません) cuBLASとcuSPARSEという上記に対応したGPU版がありますのでそれを使うのがよいと思います。 https://developer.nvidia.com/gpu-accelerated-libraries また自分でGPU用のプログラムを作るのでしたら、最近ではopenACCに対応したコンパイラが出ていますのでそれを使う手も
関連するQ&A
- 対角化行列
三次正方行列A= ( ) | 1 1 0 | | 1 1 1 | | 0 1 1 | ( ) 書き方わからないので見にくい方いたら申し訳ありません。(左上と右下だけ0であとはすべて1です。) この行列を対角化するんですが、固有値はλ1=1, λ2=1+√2, λ3=1-√2 の三つで、それぞれの固有ベクトルってλ1で、x=[1 0 -1] λ2で、x=[1 √2 1] λ3で、x=[1 -√2 1]となったのですが、これってあってますか? (↑はそれぞれ正規化してません、対角化行列を作るときはλ2,λ3のノルムである2にλ1をあわせるようにして作りました。) 対角化行列の逆行列を求めるときにどうしてもおかしくなってしまいます。よろしくおねがいします。
- ベストアンサー
- 数学・算数
- 全ての行列からなる集合の濃度は?
対称行列は、縦ベクトルと横ベクトルの積で表すことができますから、 n次元ベクトルは、n次元平面と、同じ濃度 したがって、すべて対称行列からなる集合の濃度は、実数の濃度 というのは、わかります。 すべての行列の集合は、対称行列の冪集合と考えてられるのでしょうか? 対角線論法で、確認しようとしたのですが、よくわかりません。 アドバイス、お願いします。
- ベストアンサー
- 数学・算数
- 大規模行列の計算
10000*10000の大規模行列を解くプログラムを作成したいと考えています。 行列は対称行列で疎行列です。一行あたりの非零要素は10~20程度しかなく、ほとんどが零要素になっています。 メモリの関係上[10000][10000]の配列の形で確保することはまず無理でした。なのでガウスの消去法は使えないかと思います。(使えるのかもしれませんが、要素のうまい記憶方法のアルゴリズムが浮かびません) 解法として、ウェーブ・フロント法を使おうと考えたのですが、計算前の行列内の零要素で上三角行列を求める過程において非零要素となる要素については、あらかじめ記憶しておかなければなりません。しかし、零要素から非零要素に変化する要素を発見するアルゴリズムがわかりません。 その方法や、そのほかの方法で10000*10000の大規模行列を解く方法があれば教えてください!
- ベストアンサー
- C・C++・C#
- 対称行列を直行行列で対角化
次の対称行列を直行行列で対角化せよ、という問題で、解き方が分からないので一つずつ順を追って教えていただきたいです。 3 0 0 0 1 2 0 2 1 自分で計算してみて、固有値は-1と3と出たのですが、この値で合っているのか、合っていたとしてこの次に固有ベクトルをどうすれば求めるられるのかが分からないです… よろしくお願いします。
- ベストアンサー
- 数学・算数
- 行列の固有値、及び直交化問題
(1)対称行列の固有値は、なぜ実数なのですか? (2)対称行列を対角化する行列は、直交するベクトルで構成された行列に限られるのでしょうか?だとしたら、それはなぜですか?
- ベストアンサー
- 数学・算数
お礼
ありがとうございます。 なんとなくつかめてきました。 ただ、中間試験の勉強でしばらく手が付けられないのが残念です。