1 / 24

・与えられた行列 A を以下の行列に分解すること   下三角行列( Lower triangular matrix )   上三角行列( Upper triangular matrix )

2.3 三角分解(LU分解)とQR分解 (1) LU分解. ・与えられた行列 A を以下の行列に分解すること   下三角行列( Lower triangular matrix )   上三角行列( Upper triangular matrix ). ・もっとも単純な方法としてクラウト法がある. クラウト法の計算. 簡単な例題. クラウト法の計算. 手計算すると …. クラウト法の計算. ① 次のように記述することができる. N次元のときの方法.  ここで,下三角行列の対角成分を1にする方法,上三角行列の対角成分を1にする方法の2つが考えられる。

sloan
Download Presentation

・与えられた行列 A を以下の行列に分解すること   下三角行列( Lower triangular matrix )   上三角行列( Upper triangular matrix )

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 2.3 三角分解(LU分解)とQR分解 (1) LU分解 ・与えられた行列 A を以下の行列に分解すること   下三角行列(Lower triangular matrix)   上三角行列(Upper triangular matrix ) ・もっとも単純な方法としてクラウト法がある

  2. クラウト法の計算 簡単な例題

  3. クラウト法の計算 手計算すると…

  4. クラウト法の計算 ①次のように記述することができる N次元のときの方法  ここで,下三角行列の対角成分を1にする方法,上三角行列の対角成分を1にする方法の2つが考えられる。  ここでは,下三角行列の対角成分を1にする。すなわち

  5. 考え方 ②右辺を計算することによって したがって,対角成分については, その他の成分については

  6. VBでプログラムを作る(1) ①シートの定義(なおL*Uを計算する部分を用意しておく)

  7. ③結果設定部分と ボタンのClickイベントハンドラ Private A(3, 3) As Double Private L(3, 3) As Double Private U(3, 3) As Double Sub データ設定() With Worksheets("Sheet1") For i = 1 To 3 For j = 1 To 3 A(i, j) = .Cells(i + 1, j + 1) Next Next End With End Sub Sub 結果設定(L, U) With Worksheets("Sheet1") For i = 1 To 3 For j = 1 To 3 .Cells(i + 1, j + 6) = L(i, j) .Cells(i + 1, j + 11) = U(i, j) Next Next End With End Sub Sub ボタン1_Click() データ設定 LU分解 A, L, U, 3 結果設定 L, U End Sub ②データの設定部分

  8. VBでプログラムを作る(3) Sub LU分解(A, L, U, N) For i = 1 To N For j = 1 To N L(i, j) = 0 U(i, j) = 0 Next Next L(1, 1) = 1 For j = 1 To N U(1, j) = A(1, j) Next For i = 2 To N U(i, 1) = 0 L(1, i) = 0 L(i, 1) = A(i, 1) / U(1, 1) Next For i = 2 To N L(i, i) = 1 T = A(i, i) For k = 1 To i T = T - L(i, k) * U(k, i) Next U(i, i) = T For j = i + 1 To N U(j, i) = 0: L(i, j) = 0 T = A(j, i) For k = 1 To i T = T - L(j, k) * U(k, i) Next L(j, i) = T / U(i, i) T = A(i, j) For k = 1 To i T = T - L(i, k) * U(k, j) Next U(i, j) = T Next Next End Sub ⑤LU分解処理

  9. 結果

  10. (2) QR分解 ・与えられた行列 A を以下の行列に分解すること。   直交行列(Orthogonal matrix)   右三角行列(Right triangular matrix )=上三角行列 を正規直交系とし,列ベクトルとして並べる。 ・もっとも基本的な方法としてグラムシュミット(Gram Schmidt)の直交化法がある

  11. グラムシュミットの直交化法 簡単な例題(1) ・行列AとQRの第1列の関係から

  12. グラムシュミットの直交化法 ・行列AとQRの第2列の関係から 簡単な例題(2)

  13. グラムシュミットの直交化法 ・行列AとQRの第3列の関係から 簡単な例題(3)

  14. グラムシュミットの直交化法 簡単な例題(4) ・行列AとQRの第3列の関係から

  15. グラムシュミットの直交化法 ・最終的には

  16. グラムシュミットの直交化法 ・行列Aをn個の列ベクトルに分ける 考え方(1) ・次のように表現できる。

  17. グラムシュミットの直交化法 したがって 考え方(2) さらに であるから

  18. 一方, は正規直交系であるから のとき のとき から ( の項だけが残る) を計算し, 対角項は として求める

  19. グラムシュミットの直交化法 プログラム上は というベクトルを考え, 考え方(3) に対して 非対角項は 対角項は なお,対角項の計算の第2項を計算する際,k = 1であれば j = 1 ~ 0 となり,ループが実行されないので k = 1 と k ≧ 2 の処理を共通化できる

  20. VBでプログラムを作る(1) ①シートの定義(なおQ*Rを計算する部分を用意しておく)

  21. ③結果設定部分と   ボタン1のClickイベントハンドラ Private A(3, 3) As Double Private Q(3, 3) As Double Private R(3, 3) As Double Sub データ設定() With Worksheets("Sheet1") For i = 1 To 3 For j = 1 To 3 A(i, j) = .Cells(i + 1, j + 1) Next Next End With For i = 1 To 3 For j = 1 To 3 Q(i, j) = 0 R(i, j) = 0 Next Next End Sub Sub 結果設定(Q, R) With Worksheets("Sheet1") For i = 1 To 3 For j = 1 To 3 .Cells(i + 1, j + 6) = Q(i, j) .Cells(i + 1, j + 11) = R(i, j) Next Next End With End Sub Sub ボタン1_Click() データ設定 QR分解 A, Q, R, 3 結果設定 Q, R End Sub ②データの設定部分

  22. VBでプログラムを作る(3) Sub QR分解(A, Q, R, N) Dim X() ReDim X(N) For k = 1 To N For i = 1 To N X(i) = A(i, k) Next For j = 1 To k - 1 Rjk = 0 For i = 1 To N Rjk = Rjk + A(i, k) * Q(i, j) Next R(j, k) = Rjk R(k, j) = 0 For i = 1 To N X(i) = X(i) - Rjk * Q(i, j) Next Next T = 0 For i = 1 To N T = T + X(i) * X(i) Next R(k, k) = Sqr(T) For j = 1 To N Q(j, k) = X(j) / R(k, k) Next Next End Sub ⑤LU分解処理

  23. 結果

More Related