• 検索結果がありません。

分解 (1)LU 連立一次方程式の解法

N/A
N/A
Protected

Academic year: 2021

シェア "分解 (1)LU 連立一次方程式の解法"

Copied!
57
0
0

読み込み中.... (全文を見る)

全文

(1)

連立一次方程式の 解法 (1)

LU 分解

(2)

杉原,室田: 線形計算の数理, 岩波書店, 2009

斎藤: 数値解析入門, 東京大学出版会, 2012

久保田: 工学基礎 数値解析とその応用,数理工学 , 2010

(3)

伊理: 線形代数汎論, 浅倉書店, 2009

伊理,藤野: 数値計算の常識, 共立出版, 1996

渡部: 連立1次方程式の基礎知識, 九州大学大型 計算機センター広報, Vol.28, No.4, pp.291–349, 1995.

(4)

数学を使って応用上の問題を解くということ は, 方程式を立てて解を求めることに相当. .

多くの場合, 少なくとも局所的には, 線形近 似が有効.

線形の数学モデルは非線形の数学モデルより 圧倒的に取り扱いやすい.

(5)

必要に応じて線形近似してから問題を解くと いうことがよく行われる.

このような場合には, 最終的に線形方程式を 解けばもとの問題の(近似?)解が得られる.

(6)

今回および次回の講義では, 方程式に微分演 算が含まれない場合について考える.

微分が含まれる場合については第11回から 14回で取り扱う.

(7)

変数が1個の線形方程式の解法について悩む ことは何もないので・

はじめから多変数の場合を考える.

多変数の微分を含まない線形方程式を連立一 次方程式ともいう.

(8)

• Amn列の行列, xn次のベクトル, bm次のベクトルとする.

数学的には, 連立一次方程式を解くとは, Ax =b

を満たすxをすべて求めることを意味する.

(9)

連立一次方程式の解: 一意解,不定解,不能解

• Scilabで連立一次方程式を解くには演算子\(環

境によっては¥記号)を使う.

行列AおよびbScilabにおいて変数Aおよ bに格納されているとき, ScilabAx =b の解を求めるには,

x=A\bのようにする.

(10)

一意解の場合には, Ax = bの解とScilab x=A\bは数値計算の誤差を除いて一致.

不定解の場合は, Scilabx=A\bAx = b を満たす解のひとつを返す.

不能解の場合, ScilabkAx−bkが最小と なるxを近似解として返す.

(11)

一意解の例:

0 3

1

x2 =

5 の解は(x1, x2) = (2/3,5/3)であり, Scilabで計算すると以下のようにな .

-->A=[1 2;0 3];b=[4;5];x=A\b x =

0.6666667 1.6666667

(12)

不定解の例: 1 0 1

x2 = 2の解は不定で, (x1, x2) = (2,0)はひとつの解であるが, Scilabで計算すると以下 のようになる.

-->A=[1 0];b=2;x=A\b x =

2.

0.

(13)

1 x =

3 は解を持たないが, Scilabは最小二乗近 似解を与える.

-->A=[1;1];b=[2;3];x=A\b x =

2.5

(14)

• Amn列の行列, xn次のベクトル, bm次のベクトルとする.

数学的には, 連立一次方程式を解くとは, Ax =b

を満たすxをすべて求めることを意味する.

(15)

行列Aとベクトルbを結合して作った行列 B= (A|b)を,連立一次方程式Ax=bの拡 大係数行列という.

• rankA<rankBなら不能解.

• rankA= rankB = dimxなら一意解

• rankA= rankB <dimxなら不定解.

(16)

行列に行基本変形を施すことで,以下のよう な階段行列が得られる.

0 · · · 0 1 ∗ · · ·

0 · · · 0 1 ∗ · · ·

0 · · · 0 1 ∗ · · ·

. . .

(17)

階段行列の特徴は以下の通り: 1の左はすべ て零, 1の右側は任意, 1を含まない行はすべ て零だけ, 行列全体を見ると1の系列は右斜 め下に進む(真下不可)

1行左端に零があるかないかは行列によっ て変わる.

(18)

一意解に対応する拡大係数行列を階段行列に変形 すると(今回の講義ではこの場合を取り扱う)

1 ∗ · · · ∗

0 1 ∗ · · · ∗

... . .. ... ∗ ∗

0 · · · 0 1 ∗

(19)

拡大係数行列を階段行列に変換する手順は行 基本変形.

行基本変形は基本行列を拡大係数行列に左か ら掛けることに対応.

行基本変形によって,係数行列Aが上三角行 (後述)に変形されていることになる.

(20)

上三角行列とはこういう行列:

∗ · · · ∗ 0 . .. ... ... . .. ... ...

0 . . . 0 ∗

ただしは任意の数(零でもよい).

(21)

連立一次方程式の解法は, 大別すると, 直接 法, 反復法の2種類に分類される.

直接法は数値計算の誤差がない場合に有限回 の演算で解を与える手法.

反復法は繰り返しによって近似解の系列を生 成する方法.

(22)

上記以外に, 共役勾配法と呼ばれる方法があ る.

消去法は直接法の一種. 今回の講義では直接 法を取り扱う.

以下では, 行列Ann列の正則行列と する.

(23)

もっとも素朴なガウスの消去法は,行列Aが正方 かつ正則で,行列Aが行の入れ換えなしに階段行 列に変形できる場合に相当.

この場合に相当する, 行列のLU分解と呼ばれる ものを,これから導出する.

• A(1) =Aとし,以下,繰り返し計算によって, れをA(2),A(3),. . . のように変形してゆく.

(24)

• A=A(1)の各成分を以下のように書く.

A(1) =

a(1)11 a(1)12 · · · a(1)1n a(1)21 a(1)22 · · · a(1)2n

... ...

a(1)n1 a(1)n2 · · · a(1)nn

(25)

• a(1)11 6= 0と仮定し,

l1 =

 1

a(1)21 a(1)11

...

a(1)n1

a(1)11

, u1 =

a(1)11 a(1)12 · · · a(1)1n とす

ると・

(26)

• A(1) =l1uT1 +A(2),

A(2) =

0 0 · · · 0

0 a(2)22 · · · a(2)2n

... ...

0 a(2)n2 · · · a(2)nn

という形にな

(各成分の式は略).

(27)

• a(2)22 6= 0と仮定し,以下のようにおくと:

l2=

 0 1

a(1)32 a(2)22

...

a(1)n2

a(2)22

,u2=

0 a(2)22 a(2)23 · · · a(2)2n

(28)

• A(2) =l2uT2 +A(3),

A(3) =

0 0 · · · 0 0 0 · · · 0 0 0 a(3)22 · · ·

... ...

という形になる (各成分の式は略).

(29)

同様にして一回計算するごとに行列の左およ び上側の零列と零行が1ずつ増えるから・

• A(n) = lnuTn +A(n+1) とすると, A(n+1) = 0(零行列)である.

以上をまとめるとA=l1uT1 +· · ·+lnuTn なるが・

(30)

• L=

l1 · · · ln

,U =

 uT1

... uTn

とおくと・

• A = LU となる. これを行列ALU 解という. Lが下三角行列(後述), U が上三 角行列になっていることに注意.

(31)

下三角行列とはこういう行列:

∗ 0 · · · 0 ... . .. ... ...

... . .. 0

∗ · · · ∗

ただしは任意の数(零でもよい).

(32)

• LU分解を用いて連立一次方程式Ax=LU x= bを解くには, Ly =b, U x =yという2 の連立一次方程式を順に解けばよい.

(33)

• A = LU というLU分解が得られていると き, さらに行列U を対角行列Dと対角要素 1の上三角行列Uの積であらわし, A = LDUと書き直すことがある. これをLDU 分解という.

(34)

L1D1U1 = L2D2U2であったと仮定すると, L−12 L1D1 = D2U2U−11 であるが, L−12 L1が対角要素が1の下三角行列, U2U−11 が対角要素が1の上三角行列であることに注意すると, まずD1=D2が得られ,続いてL−12 L1D1=D2U2U−11 の左 辺が下三角行列,右辺が上三角行列であることから,L−12 L1= In,U2U−11 =Inとなり,よってL2 =L1,U2=U1となる からである.

(35)

• Aが対称行列でLDU分解できるとき, A = LDU とすると, A = AT LDU分解の一 意性から, L=UT,U =LT が導かれる. たがって, A = LDLT と書ける. これを対 称行列ALDLT 分解と呼ぶ.

(36)

• ALDU分解できる正定対称行列である場 合には,Dの各要素は正だから,Dの対角要 素の正の平方根を対角要素とする行列を G とすると, D = GGT であり, したがって A = LGGTLT と書ける. C = LGとお くと, A = CCT である. この表現を, A Cholesky分解と呼ぶ.

(37)

• Gaussの消去法をLU分解から導く.

ベクトルlkの第k成分が1であったことを思い 出し, k+ 1成分以降をまとめたn−k−1 のベクトルを¯lkと書くことにする.

• L1 =

1 0

−¯l1 In−1

とおく(In−1n−1次の 単位行列, 0はその部分が零であることを示す)

(38)

• A(1) =l1uT1+A(2)の両辺にL1を左から乗じ,L1 の構造を利用して整理すると(詳細は略),L1A(1) = e1uT1 +A(2)となる(ただしe1は第1番目の単位 ベクトル).

次に,A(2)=l2uT2 +A(2)を考える.

• L2 =

1 0 0

0 1 0

0 −¯l2 In 2

とおく.

(39)

この行列の構造に注意して計算すると, L2A(2) = e2uT2 +A(3)となる.

• L2e1 =e1 であることに注意すると, L2L1A=e1uT1 +e2uT2 +A(3)となる.

以下同様にして,

Ln· · ·L1A=e1uT1 +· · ·enuTn =U となる(A(n+1)= に注意).

(40)

以上によって得られた式のLn· · ·L1は基本 行列の積であり,右辺は階段行列になってい る. 階段行列を求める手順がGaussの消去法 だったから, LU分解からGaussの消去法が 導かれたことになる.

(41)

上述のように階段行列を求める手順を前進消 去という.

行交換が必要ない場合には, Gaussの消去法 も, LU分解も, l1, . . . ,ln, u1, . . . ,unを求め ることに相当するので, Gaussの消去法とLU 分解は本質的に同じ.

(42)

• Ax=bは, ¯b=Ln· · ·L1bとおくと,

Ln· · ·L1Ax = U x = ¯b と変形されるから, U x= ¯bという連立一次方程式を解くことに より, xが求められる.

(43)

具体的には, ¯bの各成分を¯b1, . . . ,¯bnとし, U の第(i, j)成分をuij とし, U が正則な上三 角行列であったことに注意すると,まずxn =

¯bn/unnが得られ,次にun−1,n−1xn−1+un−1,nxn=

¯bn1にこれを代入してxn1が得られ,という ふうに,逐次的に解xの全成分が得られる. の操作を後退代入という.

(44)

行列Aが正則であっても, a11 = 0であると いうことはあり得る.

• a11 6= 0であっても,絶対値が零に近い場合に は,a11を使ってLU分解あるいはGaussの消 去法によって連立一次方程式の解を求めると, 数値計算の誤差が大きくなる可能性がある.

(45)

以下では, 仮に, 零あるいは零に近い要素を

「条件が悪い」と呼び,そうでない要素を「条 件が良い」と呼ぶ.

(46)

計算不能あるいは数値的な条件悪化を防ぐに は, 行を入れ換えて, 条件がよいak1,1が行列 の一番上に来るようにすればよい.

これは, 見方を変えると,a11のかわりにak1,1

に着目して, LU分解あるいはGaussの消去 法を遂行していることになる.

(47)

kステップについても同様に,数値的な条 件が良いajk,k に着目してLU分解あるいは

Gaussの消去法を遂行してゆく.

(48)

• LU分解あるいはGaussの消去法の各ステッ プで着目している条件が良い要素の番号(jk, k) のことをピボットあるいは枢軸と呼ぶ.

対応するa(k)jk,kのことをピボット要素あるい は枢軸要素と呼ぶ.

(49)

数値的な条件が良いように適切にピボットを 選ぶ操作のことを, ピボット選択あるいは枢 軸選択と呼ぶ.

ピボット選択の選択法のひとつは,{a(k)j,k :j = k, k+ 1, . . . , n}の中で絶対値が最大の要素の 添字を選ぶ方法(行交換によるピボット操作).

(50)

列交換によるピボット操作と呼ばれる第k 以降の列について同様の操作をする手法や, 完全ピボット操作と呼ばれる第(p, q)要素(た だしp, q ≥ k)すべての中から絶対値最大の ものを選ぶ手法もある.

(51)

列交換によるピボット操作や完全ピボット操 作では,変数の順番もこれに対応して入れ換 える必要がある.

数値計算の誤差はベクトルbの成分の大きさ にも依存するので, ピボット操作だけで数値 計算の誤差の低減が保証されるとは限らない.

(52)

方程式Ax =bを解くためにピボット選択付

きのGaussの消去法を使うことは,P をそれ

に対応する置換行列としたとき, P ALU 分解することに相当する.

(53)

• ScilabにおいてLU分解を求める関数はlu ある.

• [L,U,P]=lu(A)とすることで,P A=LU なる行列L, U, P を求めることができる.

実行例は次ページの通り.

(54)

0.1428571 1. 0.

0.5714286 0.5 1.

-->U U =

7. 8. 9.

0. 0.8571429 1.7142857

0. 0. 1.110D-16

-->P P =

0. 0. 1.

1. 0. 0.

0. 1. 0.

7. 8. 9.

1. 2. 3.

4. 5. 6.

-->L*U ans =

7. 8. 9.

1. 2. 3.

4. 5. 6.

(55)

• Gaussの消去法の終了後に,さらに列基本変 形を施して,行列U を単位行列に変換する方 法もある. これをGauss-Jordan法という.

計算量という観点から言うとGauss-Jordan 法にはあまりメリットはないが,並列計算機 には適しているという指摘もある.

(56)

要素の大部分が零の行列を疎行列という.

応用であらわれる大規模行列は多くの場合疎 行列である.

疎行列で零要素をメモリに格納することは無 駄であるので,必要な要素だけをメモリに記 憶する方法が工夫されている.

(57)

疎行列に対する演算は,行列の疎性を破壊し ないことが望ましい.

• Scilabで疎行列を扱うための組み込み関数は

sparse.

参照

関連したドキュメント

しかし , 特性関数 を使った証明には複素解析や Fourier 解析の知識が多少必要となってくるため , ここではより初等的な道 具のみで証明を実行できる Stein の方法

 ファミリーホームとは家庭に問題がある子ど

※ CMB 解析や PMF 解析で分類されなかった濃度はその他とした。 CMB

看板,商品などのはみだしも歩行速度に影響をあたえて

の応力分布状況は異なり、K30 値が小さいほど応力の分 散がはかられることがわかる。また、解析モデルの条件の場合、 現行設計での路盤圧力は約

25 法)によって行わ れる.すなわち,プロスキー変法では,試料を耐熱性 α -アミラーゼ,プロテ

うことが出来ると思う。それは解釈問題は,文の前後の文脈から判浙して何んとか解決出 来るが,

この映画は沼田家に家庭教師がやって来るところから始まり、その家庭教師が去って行くところで閉じる物語であるが、その立ち去り際がなかなか派手で刺激的である。なごやかな雰囲気で始まった茂之の合格パ