レッスン
理論 — ガウスの消去法849語
消去法は、連立方程式を同値な三角方程式系に変換する手法です。こうしてしまえば、あとは下から順に解を読み取っていくだけで済みます。この手法の要点は、「解を求められる」こと自体にはありません。解を出すだけなら他にもやり方はあります。最大の焦点はその計算コストなのです。コンピュータに実際にどの計算を走らせるかを最終的に決めるのは、他でもないこのコストだからです。
各記号の意味
n- 未知数の個数。計算コストを左右する唯一の変数でもあります。
pivot- 行を割るために使われる係数。アルゴリズムがその処理順序をあらかじめ固定してしまうことで、途中の分岐判断が一切不要になります。しかし、その場所にどの数値を配置するかが、浮動小数点演算による計算の崩壊を防ぐ生命線となります。
- 前提
- 利用できるような規則的な構造を持たない、密な連立方程式です。もし対象が疎行列や帯行列、対称行列であれば、計算の負担はずっと軽くなります。個々の問題にいかに適した特化型の解法を選ぶか。それこそが数値線形代数という分野の大部分を占めています。
- 成り立たない場合
- 計算コストは3乗のオーダーです。この3乗という性質こそが、巨大な壁として立ちはだかります。n 個の未知数を消去するには、およそ
n³/3回の掛け算と、同数の足し算をこなさなければなりません。実際にn = 100の系で消去法を走らせて数えてみると、概算値 333,333 に対して、現実の掛け算は 333,300 回になります。この指数が意味するのは、規模拡大に対する容赦のないペナルティです。未知数が2倍になれば、必要な作業はきっちり8倍に膨れ上がります。100個の未知数で 333,300 回の掛け算が必要なら、200個では 2,666,600 回になるということです。千個の未知数を一秒で片付けるコンピュータがあったとしましょう。そのマシンでも二千個には八秒かかり、二万個ともなればおよそ二時間十五分も待たされることになります。これが壁の正体です。だからこそ、数値線形代数の世界における真の関心事は、密な連立方程式を「どう解くか」ではなく、「いかにして密な系を避けるか」に尽きるのです。
全プロセスの詳細解説
-
2x + y − z = 8の解法と精度のコスト 7 ステップ
2x + y − z = 8, −3x − y + 2z = −11, −2x + y + 2z = −3 を解き、消去法によって精度がどの程度失われたかを確認してください。
-
これを拡大係数行列として書き出します。文字は何も役割を果たさないため取り除き、列だけを残します。
-
第一列の中で最も絶対値が大きい二行目の −3 をピボットに選び、上の行と入れ替えます。行を入れ替えるたびに行列式の符号が反転するため、その回数を数えておいてください。
-
ピボットのある行を定数倍して引くことで、第一列の残りの要素を消去します。
-
第二列でも同じ操作を繰り返し、一番下の行を確認します。そこには一つの未知数とその値が示されています。
-
下から上へと後退代入を行います。一番下の行から z が求まり、次に真ん中の行から y が、そして一番上の行から x が求まります。
-
ピボットをすべて掛け合わせ、二回の行の入れ替えに応じた符号を適用して行列式を求めます。そして、簡約化された方程式ではなく、元の方程式に代入して答えを確認してください。
-
残差はおよそ 10⁻¹⁶ となり、ゼロではありません。これは計算機がどうしても避けられない丸め誤差の大きさであり、それをそのまま報告するのが誠実な姿勢というものです。完全な正確さを主張する答えは、整数演算によるものか、あるいは単に誤差から目を背けているかのどちらかです。ピボット選択をオフにして先頭の係数を 10⁻¹⁷ に変更すると、同じ残差が 1 になります。これは先ほどと同じ警告が、今度は叫び声を上げている状態なのです。
解答
x = 2, y = 3, z = −1, 行列式 −1。 約 10⁻¹⁶ という残差は、浮動小数点演算の限界まで計算が正確に行われたことを示しています。スケールの悪い連立方程式でピボット選択をオフにした場合、答えが間違っていることを教えてくれるのは、まさにこの数字なのです。
-
-
行列式 0 が二度現れ、それぞれ別のことを意味する 7 ステップ
このプリセットには解がなく、次のプリセットには解が無数にありますが、どちらも行列式は 0 と表示されます。実際に両者を分けているものは何かを求め、右辺を変えることで何が買えるのかを判断してください。
-
部分ピボット選択は、第一列で絶対値が最大の係数を探します。最下行の 3 が見つかるため、最初の操作は行の入れ替えになります。
-
列を消去します。新しい第一行の ⅔ を第二行から、⅓ を第三行から引きます。
-
第二列では 4/3 がすでに 2/3 の上にあるので、入れ替えは不要です。第三行から第二行の半分を引きます。
-
第三行は左辺が空になり、右辺に −½ が残りました。これは 0 = −½ と読めます。置かれたピボットは 3 と 4/3 の二つだけで、三つの未知数には三つ必要です。ピボットが欠けると積は 0 になります。
-
行列式が隠しているのは階数です。係数行列の独立な行は 2 本。拡大係数行列は 3 本です。残った −½ は、何をもってしても消せない行だからです。階数 2 と階数 3 の食い違いこそが「解なし」の意味です。
-
同じ式が3つ のプリセットは同じ計算をして、別のことを言います。どの行も第一行の定数倍なので、両方の階数が 1 になり、行列式はまた 0 です。解集合には 3 − 1 = 2 本の自由な方向があり、それは平面 x + y + z = 3 の全体です。ツールは「無数にある」とは言いますが、何方向に無数なのかは言いません。
-
数を一つ変えて、どの量が動くかを見ましょう。第二行の右辺の 7 を 6 にします。係数行列は手つかずなので行列式は微動だにしませんが、拡大係数行列の階数は 2 に落ち、答えは「解なし」から解の直線へと変わります。
解答
行列式が報告しているのは、係数行列にピボットが揃っているかどうかだけです。右辺を見ることは一度もありません。だから二つのプリセットを区別できないのであり、二つの階数にはそれができます。食い違えば解なし、一致すれば解集合の次元は 3 − 階数です。行列式がいったん 0 になれば、どんな右辺を持ってきても一つの答えは買えません。得られるのは解なしか、解の一族かのどちらかで、b が決めるのはその二択だけです。残差のカードが消えるのは、それが存在する理由と同じ理由によります。残差には、方程式に戻して確かめる解が要るからです。
-
学習の道すじ
xについて解く:マイナス記号からの積み上げ
参考文献 (1)
- Two centuries of the method being reinvented and misattributed, including how Gauss's name came to be on it: J. F. Grcar, "How ordinary elimination became Gaussian elimination." Historia Mathematica 38:2 (2011), 163–218.