No.5ベストアンサー
- 回答日時:
こんばんは.
特異値分解はm*n行列Xの転置であるn*m行列X^Tを分解しても一般性を失わないので,
とりあえず(m>n)と書いたのがまずかったようですね.
Xが横長でも縦長でも
X = U*S*V^T
と分解したならば,その擬似逆行列は
X^+ = V*S^(-1)*U^T
です.
(m>n)の場合は以下のようにすれば n*n単位行列Eが計算できます.
(X^+)*X = V*S^(-1)*U^T*U*S*V^T = E
(m<n)ならば次で m*m単位行列Eが計算できます.
X*(X^+) = U*S*V^T*V*S^(-1)*U^T = E
UとVの列が正規直交であることに注意して確認してください.
当初のご質問とずれてきていますので,サイトの主旨に照らしてこのくらいにしたいと思います.
これ以上は別カテゴリで専門家にお聞きになるのが適切でしょう.
頑張ってください.
回答ありがとうございます。
とても参考になりました。
教えていただいた分だけで十分やっていけそうです!
どうもありがとうございました。
No.4
- 回答日時:
まず,m*n行列(m>nとします)行列XをX=U*S*V^Tと特異値分解します(^Tは転置記号とします).
ここで, 行列のサイズはUがm*n,Sがn*n,Vがn*n行列です.
UとVは直交行列の一部であり,それぞれXの列空間と行空間の直交基を成します.
直交行列の逆行列は自らの転置ですから,Xの疑似逆行列X^+は
X^+ = V*S^(-1)*U^T
と計算できます.
問題となるのはS^(-1)ですが,これはXの特異値を対角要素とする行列ですから,
対角要素の逆数を取ることで容易に逆行列を計算できます.
ただし,Sの対角要素で零に近いものがある場合は除算を行ってはいけません.
この場合は除算に対応するUとVの列を計算から除外してください.
なお,特異値分解が必要ならばATLASでは対応できません
(ATLASは線型方程式ソルバのみを提供しますので).
GSLや「Numerical Recipes in C」を用いるのでなければLAPACKのdgesvd_()等が必要になります.
丁寧な解説ありがとうございます。
とても参考になります。
質問なのですが、 (m<n)の場合ならば、
Xの疑似逆行列 X^+ = U^T * S^(-1) * V で求まるのでしょうか?
それと、正方行列の場合は、(m<n)の式でも(m>n)の式でも
どちらからでも求められる、といった感じでしょうか?
すみませんが、教えて下さい。
No.3
- 回答日時:
VC++6で動くよう解説付です。
GSLについての説明ですがなにをしているんのか理解できればATLASにも応用できます。参考URL:http://www.tmps.org/index.php?GNU%20Scientific%2 …
No.2
- 回答日時:
こんにちは.
回答No.1のライブラリはWindows環境での実行を前提としていないようです
(利用不能という意味ではありません).
「逆行列を計算したい」のであれば,LU分解と呼ばれる方法を用いれば良いと思います.
ただし,これは正方行列(50*50の行列)の場合で,ご質問の50*10000の行列の場合には使えません.
この場合はQR分解や特異値分解によって疑似逆行列を計算することになります.
さて,手段の方ですが「Numerical Recipes in C 日本語版」(参考URLの書籍)のライブラリを用いるのが簡単であるようです.
最後になりますが,この種の問題は逆行列そのものが必要かどうかで少し話が変わってきます.
解きたい問題について補足がいただければもう少し詳細な回答を差し上げることができるかもしれません.
参考URL:http://gihyo.jp/book/1993/4-87408-560-1
回答ありがとうございます!
色々と勉強不足ですみません。
助かります。
特異値分解によって擬似逆行列が求まるとのことですが、
X=USVが基本の形として、Xの逆行列はどうやって求めるのでしょうか?
実は、特異値分解の関数は前に頂いたことがあり持っているので
Xという行列さえ与えてやれば U,S,Vは求められます。
これを使って、長方系の行列の擬似逆行列も、正方行列の逆行列も
求まるということですよね?
U、S、Vの掛け方でXの逆行列が求まると思うのですが
その掛け方を是非教えて下さい。
よろしくお願いします。
(ちなみに今回は逆行列そのものを必要としています。)
No.1
- 回答日時:
オープンな実装ならATLASを使ってみるのが一番かも。
ベンダーからBLASの実装を手に入れることがそちらのほうが大抵早いです。スパコンなら大抵用意されてますし、intel系ならIntel Math Kernel Library、AMD系ならAMD Core Math Libraryに含まれています。
参考URL:http://www.mlab.ice.uec.ac.jp/~ej-sib/numerical/ …
回答ありがとうございます。
早速サイトの方みて、導入してみようと思ったのですが
関数ライブラリ使うのが初めてでして導入方法が理解できませんでした。
申し訳ありませんがアドバイスお願いします。
今、URLにあるライブラリ構成方法の部分を試してみました。
RANDLIB_V90.tar.gzというファイルを保存したので、
その後のコマンドプロンプトだと思うのですが、それを打つ部分が
わかりませんでした。これってwindowsでも使えるんですよね?
ちなみに私の環境はWinXP
VisualStudio2005を使用しています。
VisualStudio2005で関数使えるようにするまでのアドバイスが頂けると助かります。
よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・【大喜利】【投稿~1/31】『寿司』がテーマの本のタイトル
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・【大喜利】【投稿~1/20】 追い込まれた犯人が咄嗟に言った一言とは?
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAで関数をつくる
-
65536は2の何乗なのでしょうか?
-
変化させるセルが変化しない
-
EXCELなどで「返す」という表現
-
バッチファイルでウインドウを...
-
再帰呼び出しの計算量
-
MATLABの積分について
-
はさみうち法とニュートン法に...
-
VBAの再計算が反映されない件に...
-
CとFORTRANの計算速度はどちら...
-
排他的論理和 BCC(水平パリテ...
-
ファミリーベーシックのPOKE&H...
-
骨折リスク評価のFRAXについて...
-
引き放し法による除算アルゴリ...
-
駅間の距離を求め運賃計算するJ...
-
円周上の3点で作られる三角形...
-
長時間の計算のときだけバグに...
-
C言語についてです。 再帰を使...
-
Fortran でのマイナス乗数の書き方
-
趣味で「乗換案内」みたいなソ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
65536は2の何乗なのでしょうか?
-
VBAの再計算が反映されない件に...
-
変化させるセルが変化しない
-
排他的論理和 BCC(水平パリテ...
-
EXCELなどで「返す」という表現
-
C言語についてです。 再帰を使...
-
CとFORTRANの計算速度はどちら...
-
matlabで計算終了
-
エクセルで特定のセルのみを任...
-
Visual C++でdebugとreleaseで...
-
VBAで関数をつくる
-
数値計算の高速化 (cos, sin, exp)
-
引き放し法による除算アルゴリ...
-
傾いた四角形内の範囲の条件式
-
趣味で「乗換案内」みたいなソ...
-
三菱シーケンサー works2 の日...
-
バッチファイルでウインドウを...
-
y=(x^2 +3x+1)^4を微分の定義を...
-
モジュラス103の計算とは何でし...
-
VBAでの勤務時間計算
おすすめ情報