プログラミング作成承ります アプリで自動化をしたい方、プログラムでお困りの方是非

LU分解法-解法

こんばんは。

よっしんです。

 

昨日のLU分解について。

◇LU分解は何のためにある?

連立方程式を少ない計算量で解くためにあります。

(連立方程式は以下の形となります。)

f:id:yoshishinnze:20190804184310p:plain

基本的には以下のように行列Aを上三角と下三角の行列に分割することで、ほかの方法のような収束性の課題を抱えずに、連立方程式を解けるようになるということにメリットがあります。

 

f:id:yoshishinnze:20190804183426p:plain

f:id:yoshishinnze:20190804183459p:plain

 

◇計算のアルゴリズムについて

1. LとUの要素のうち、Lの0部、Uの対角成分と下三角の0部を定義する

2. LとUの非0の要素を1の条件を使って、ひとつずつ求めていく。

※パット見、非0の要素を綺麗に求めることは難しいように見えますが、実は可能です。その理由は、求める際に使う各項が1より1か0であることが保証されているから。

3. 連立方程式を以下のように書き換えます。

f:id:yoshishinnze:20190804184435p:plain

f:id:yoshishinnze:20190804184454p:plain

最終ほしいのは連立方程式の解xなんですが、その前にyを導入してしまいます。

その理由は4以降で分かります。

4. yを求める

Ly=bを解きます。

Lの形を見てください。上から△です。

つまり・・・

y1はl11×y1=b1で求まります。

y2はl21×y1+l22×y2=b2で求まるのですが。y1が上で分かっているので、実際にはy2も単なる1次連立方程式を解けば良いことになります。

これをyベクトル、すべての要素で繰り返します。

→yが全部わかります。

5. xを求める

Ux=yを解きます。

4と同じことが言えます。

上から求めていくと、単純な1次方程式を解き続ければ解までたどり着きます。

 

◇効果

計算量が圧倒的に少ないです。

他のガウス法がO(3)なのに対し、LU分解法はO(2)です。

連立方程式のサイズが大きければ大きいほど、効果は大きくなります。