
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で質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) パイソンのプログラミングについての質問です 2 2023/05/22 12:39
- 数学 行列 線形代数 数学 区間行列 ブロック行列 逆行列 区間行列(ブロック行列)でA^-1を求めよとい 2 2022/05/06 00:25
- Perl perlで2次元配列をサブルーチンに値渡しで渡す 5 2022/12/17 18:49
- Excel(エクセル) エクセル関数の変わった使い方 3 2022/05/13 17:12
- 数学 上三角行列のn乗の証明 2 2023/07/23 21:45
- その他(プログラミング・Web制作) PythonでLoopを使って配列内の文字列を結合する。そして [] を削除する 1 2022/03/31 23:28
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- 数学 一般的な行列の逆行列に関する質問 3 2022/04/21 14:53
- C言語・C++・C# C#の問題です。 文字列型の配列 s[100] にキーボードから入力された100文字以内の文字列(単 2 2022/06/22 15:18
- Visual Basic(VBA) vbaの計算 if elseと範囲について 6 2022/11/26 01:49
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・【お題】甲子園での思い出の残し方
- ・【お題】動物のキャッチフレーズ
- ・人生で一番思い出に残ってる靴
- ・これ何て呼びますか Part2
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・あなたが好きな本屋さんを教えてください
- ・かっこよく答えてください!!
- ・一回も披露したことのない豆知識
- ・ショボ短歌会
- ・いちばん失敗した人決定戦
- ・性格悪い人が優勝
- ・最速怪談選手権
- ・限定しりとり
- ・性格いい人が優勝
- ・これ何て呼びますか
- ・チョコミントアイス
- ・単二電池
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・泣きながら食べたご飯の思い出
- ・一番好きなみそ汁の具材は?
- ・人生で一番お金がなかったとき
- ・カラオケの鉄板ソング
- ・自分用のお土産
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
65536は2の何乗なのでしょうか?
-
VBAの再計算が反映されない件に...
-
チェックデジット計算できる関...
-
VB6で正確なミリ秒を計測したい...
-
グラフの描き方
-
CとFORTRANの計算速度はどちら...
-
C# 計算処理中に実行中ウィン...
-
VBAで電卓を作成する
-
タクシー料金の問題です
-
VB6.0で時間の計算方法
-
人時生産性をExcelで計算したい
-
論理式
-
EXCELなどで「返す」という表現
-
排他的論理和 BCC(水平パリテ...
-
モジュロ
-
fortranの練習問題
-
骨折リスク評価のFRAXについて...
-
matlabで計算終了
-
【fortran77】データ行数のカウ...
-
階乗のマクロ
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
65536は2の何乗なのでしょうか?
-
排他的論理和 BCC(水平パリテ...
-
VBAで関数をつくる
-
VBAの再計算が反映されない件に...
-
EXCELなどで「返す」という表現
-
CとFORTRANの計算速度はどちら...
-
変化させるセルが変化しない
-
エクセルで特定のセルのみを任...
-
matlabで計算終了
-
駅間の距離を求め運賃計算するJ...
-
バッチファイルでウインドウを...
-
C言語についてです。 再帰を使...
-
趣味で「乗換案内」みたいなソ...
-
VBAで電卓を作成する
-
60進数の四則計算
-
モジュラス103の計算とは何でし...
-
Visual C++でdebugとreleaseで...
-
時間(ミリ秒を含む)の引き算
-
加速度から変位の変換について
-
VBAで一時的にオーバーフローを...
おすすめ情報