
数学において、ガウス消去法(行簡約法とも呼ばれる)は、連立一次方程式を解くためのアルゴリズムである。これは、対応する係数行列に対して一連の行ごとの操作を行うことで構成される。この方法は、行列のランク、正方行列の行列式、および可逆行列の逆行列を計算するためにも使用できる。この方法は、カール・フリードリヒ・ガウス(1777年~1855年)にちなんで名付けられた。
行列の行縮小を行うには、一連の基本行操作を用いて行列を修正し、行列の左下隅が可能な限りゼロで埋め尽くされるようにします。基本行操作には次の3種類があります。
これらの操作を用いることで、行列は常に簡約行階段形に変換できます。つまり、ゼロでない行はすべてゼロの行の上にあり、ゼロでない行の左端のゼロでない要素は 1 であり、これらの先頭の 1 を含む列の他の要素はすべて 0 であり、ゼロでない行の先頭の 1 は前の行の先頭の 1 の右側にあります。この最終形式は一意であり、つまり、使用する行操作の順序に依存しません。たとえば、次の行操作の順序 (最初のステップと 3 番目のステップで異なる行に対して 2 つの基本操作が実行される) では、3 番目の行列と 4 番目の行列が行階段形であり、最終行列が一意の簡約行階段形になります。

行操作を使用して行列を簡約行階段形に変換することは、ガウス・ジョルダン消去法。この場合、ガウス消去上三角(未簡約)の行階段形になるまでの過程を指します。計算上の理由から、連立一次方程式を解く際には、行列が完全に簡約化される前に行操作を停止することが望ましい場合があります。
行簡約化のプロセスは、基本的な行操作を利用し、2つの部分に分けられます。最初の部分(前方消去と呼ばれることもあります)は、与えられたシステムを行階段形に変換し、そこから解がない、唯一の解がある、または無限に多くの解があるかどうかを判断します。2番目の部分(後方代入と呼ばれることもあります)は、解が見つかるまで行操作を使い続けます。つまり、行列を簡約行階段形に変換します。
アルゴリズムを分析する上で非常に役立つもう一つの視点は、行簡約によって元の行列の行列分解が得られるという点です。基本行操作は、元の行列の左側に基本行列を乗算することと見なすことができます。

あるいは、1行を簡約化する一連の基本演算は、フロベニウス行列による乗算とみなすことができる。この場合、アルゴリズムの最初の部分ではLU分解を計算し、2番目の部分では元の行列を、一意に決定される可逆行列と一意に決定される簡約行階段行列の積として書き出す。
行列の行に対して実行できる基本的な行操作には、次の3種類があります。
行列が連立一次方程式に関連付けられている場合、これらの操作は解集合を変更しません。したがって、連立一次方程式を解くことが目的であれば、これらの行操作を使用することで問題が解きやすくなる可能性があります。
行列の各行について、その行がゼロのみで構成されていない場合、最も左にあるゼロ以外の要素をその行の先頭要素(またはピボット)と呼びます。2 つの先頭要素が同じ列にある場合、タイプ 3の行操作を使用して、それらの要素の 1 つをゼロにすることができます。次に、行交換操作を使用することで、すべてのゼロ以外の行について、先頭要素が上の行の先頭要素の右側に来るように行を常に並べ替えることができます。この場合、行列は行階段形であると言われます。この形式では、行列の左下部分はゼロのみで構成され、すべてのゼロ行はゼロ以外の行の下にあります。「階段形」という言葉がここで使用されているのは、行がそのサイズによって大まかにランク付けされ、最も大きい行が上、最も小さい行が下にあると考えることができるためです。
例えば、次の行列は行階段形であり、先頭の要素は赤色で示されています。
これは階段状配列です。なぜなら、0行目が一番下にあり、2行目(3列目)の先頭のエントリが、1行目(2列目)の先頭のエントリの右側にあるからです。
行列は、すべての先頭要素が 1 に等しく (これはタイプ 2 の基本行操作を使用することで実現できます)、かつ先頭要素を含むすべての列において、その列の他のすべての要素がゼロである場合 (これはタイプ 3 の基本行操作を使用することで実現できます)、簡約行階段形であると言われます。
次の連立一次方程式の解の集合を見つけて記述することが目標だとします。
下の表は、連立方程式とその関連する拡大行列に同時に適用される行簡約処理です。実際には、連立方程式を方程式で扱うことは通常なく、コンピュータによる処理に適した拡大行列を使用します。行簡約の手順は次のように要約できます。L 1 より下のすべての方程式から x を消去し、次にL 2 より下のすべての方程式から y を消去します。これにより、連立方程式は三角行列になります。その後、逆代入を使用して、各未知数を解くことができます。
2 列目には、実行された行操作が示されています。最初のステップでは、L 2に 3 / 2 L 1を加えることで、 x がL 2 から削除されます。次に、L 3にL 1を加えることで、x がL 3から削除されます。これらの行操作は、表では次のようにラベル付けされています。
3行目からyも消去すると、結果として三角形式の線形方程式系が得られ、アルゴリズムの最初の部分が完了します。計算の観点からは、変数を逆順に解く方が速く、これは後退代入と呼ばれるプロセスです。解はz = −1、y = 3、x = 2であることがわかります。特に、この場合、元の方程式系には一意の解が存在します。
行列が行階段形になった時点で停止するのではなく、表に示されているように、行列が簡約行階段形になるまで続けることもできます。行列が簡約されるまで行を簡約していくプロセスは、階段形になった後に停止する方法と区別するために、ガウス・ジョルダン消去法と呼ばれることがあります。
ガウス消去法は、証明なしではあるものの、中国の数学書『九章算術』第八章「長方形配列」に登場します。その使用法は、2~5個の方程式を含む18の問題で示されています。この書名で最初に言及されたのは西暦179年ですが、その一部は紀元前150年頃に書かれていました。[ 1 ] [ 2 ] [ 3 ] 3世紀には劉徽によって注釈が付けられました。
Grcar [ 4 ]によると、消去法による線形方程式の解法は、古代からユーラシアのいくつかの文化で独自に発明され、ヨーロッパでは後期ルネサンス(1550 年代)までに手順の具体的な例が発表された。当時すでにこの手順は数学者にとって基本的なものであり、専門家への説明は不要と考えられていた可能性が高く、そのため、当時までにヨーロッパの少なくともいくつかの場所で実践されていたという事実を除いて、その詳細な歴史を知ることはできないかもしれない。
ヨーロッパにおけるこの方法は、アイザック・ニュートンのノートに由来する。[ 4 ] [ 5 ] 1669年から1670年にかけて、ニュートンは、自分が知っている代数学の本には連立方程式を解くためのレッスンが欠けていると書き、それを補った。ケンブリッジ大学は、ニュートンが学問の道を去ったずっと後の1707年に、最終的にそのノートを『Arithmetica Universalis』として出版した。このノートは広く模倣され、18世紀末までに(現在ガウス消去法と呼ばれる)方法は代数学の教科書の標準的なレッスンとなった。カール・フリードリヒ・ガウスは1810年に対称消去法の記法を考案し、19世紀にはプロの手計算者が最小二乗問題の通常の方程式を解くために採用した。[ 6 ]高校で教えられているアルゴリズムは、この分野の歴史に関する混乱の結果として、1950年代になって初めてガウスにちなんで名付けられた。[ 7 ]
ガウス消去法という用語を、行列が階段行列になるまでの手順のみを指すために使用し、ガウス・ジョルダン消去法という用語を、簡約階段行列で終わる手順を指すために使用する著者もいる。この名前は、 1888年にヴィルヘルム・ジョルダンによって記述されたガウス消去法の変形であるため使用されている。しかし、この方法は、同じ年に発表されたクラセンの論文にも登場する。ジョルダンとクラセンはおそらく独立してガウス・ジョルダン消去法を発見した。[ 8 ]
歴史的に見ると、行簡約法の最初の応用例は連立一次方程式の解法です。以下に、このアルゴリズムのその他の重要な応用例をいくつか示します。
ガウス消去法によって正方行列の行列式を計算できる仕組みを説明するには、基本行操作が行列式をどのように変化させるかを思い出す必要があります。
正方行列Aにガウス消去法を適用して行階段行列Bが得られる場合、上記の規則を用いて行列式に掛けられたスカラーの積をdとする。すると、 Aの行列式は、 Bの対角要素の積をdで割った商となる。
計算上、n × n行列の場合、この方法はO( n 3 )回の算術演算しか必要としないが、行列式のライプニッツ公式を使用すると、演算回数は、(式の被加数と各被加数での乗算回数の積)であり、再帰的ラプラス展開では、部分行列式を記憶して一度だけ計算する場合、O( n 2 n )の演算が必要となります(線形結合の演算回数と、列によって決まる計算対象の部分行列式の数の積) 。最も高速なコンピュータでも、 nが20 を超えると、これら 2 つの方法は非現実的、またはほぼ非現実的になります。
ガウス消去法の変形であるガウス・ジョルダン消去法は、存在する場合、行列の逆行列を求めるために使用できます。Aがn × nの正方行列である場合、存在する場合は行簡約を使用してその逆行列を計算できます。まず、 n × n の単位行列をAの右側に追加して、n × 2 n のブロック行列[ A | I ]を形成します。次に、基本行操作を適用して、このn × 2 n行列の簡約階段形を求めます。行列Aは、単位行列Iに簡約できる場合に限り可逆です。この場合、最終的な行列の右ブロックはA −1です。アルゴリズムが左ブロックをIに簡約できない場合、Aは可逆ではありません。
例えば、次の行列を考えてみましょう。
この行列の逆行列を求めるには、次の行列に単位行列を追加し、行簡約化して3 × 6行列にする。
行操作を実行することで、この拡大行列の簡約行階段形が次のようになることを確認できます。
各行の操作は、基本行列による左積と考えることができます。右側を見ると、これらの基本行列の積はB であることがわかります( B = BIなので)。一方、左側を見ると、これらの行列の積をAに左から乗算すると単位行列が得られることがわかります。つまり、BA = Iです。したがって、 B = A −1となり、これが求める逆行列です。この逆行列を求める手順は、任意のサイズの正方行列に適用できます。
ガウス消去法は、任意のm × n行列Aに適用できます。このようにして、例えば、いくつかの 6 × 9 行列を、次のような行階段形を持つ行列に変換できます。 ここで、星印は任意のエントリであり、a、b、c、d、eはゼロ以外のエントリです。この階段行列Tには、 Aに関する豊富な情報が含まれています。Tには 5 つのゼロ以外の行があるため、Aのランクは 5 です。Aの列によって張られるベクトル空間は、その列 1、3、4、7、9 ( Tのa、b、c、d、eを含む列) からなる基底を持ち、星印は、Aの他の列が基底列の線形結合としてどのように表されるかを示しています。
これらはすべて、特定の行階段形式である簡約行階段形式にも当てはまります。
行簡約を実行するために必要な算術演算の数は、アルゴリズムの計算効率を測定する方法の 1 つです。たとえば、n 個の未知数に対するn個の方程式のシステムを、行列が階段形になるまで行操作を実行し、その後各未知数を逆順に解くことで解くには、n ( n + 1)/2 回の除算、(2 n 3 + 3 n 2 − 5 n )/6 回の乗算、および(2 n 3 + 3 n 2 − 5 n )/6 回の減算[ 9 ]が必要で、合計で約2 n 3 /3 回の演算が必要です。したがって、算術的複雑度(時間的複雑度、各算術演算は入力のサイズに関係なく 1 単位の時間を要する) はO( n 3 )です。
この複雑さは、各算術演算にかかる時間がほぼ一定の場合、全体の計算に必要な時間の良い尺度となります。これは、係数が浮動小数点数で表現されている場合、または係数が有限体に属している場合に該当します。係数が整数または正確に表現された有理数である場合、中間エントリは指数関数的に大きくなる可能性があるため、ビット複雑度は指数関数的になります。[ 10 ] ただし、Bareiss アルゴリズムは、中間エントリのこの指数関数的増加を回避する Gaussian 消去法の変種です。同じ算術複雑度O( n3 )で、ビット複雑度はO( n5 )であり、したがって、強力な多項式時間複雑度を持ちます。
ガウス消去法とその派生法は、数千の方程式と未知数を含む連立方程式に対してコンピュータ上で使用できます。しかし、数百万の方程式を含む連立方程式では計算コストが膨大になります。このような大規模な連立方程式は、一般的に反復法を用いて解かれます。係数が規則的なパターンに従う連立方程式には、特定の解法が存在します(連立一次方程式を参照)。
ガウス消去法の最初の強力な多項式時間アルゴリズムは、 1967年にジャック・エドモンズによって発表されました。 [ 11 ]: 37独立して、ほぼ同時に、エルヴィン・バライスは、ガウス消去法の除算なしの変種に適用される次の指摘に基づく別のアルゴリズムを発見しました。
標準的なガウス消去法では、各行から を減算します。ピボット行の下倍数によるどこそしてピボット列のエントリはそしてそれぞれ。
代わりに、ベライスのバリアントは、とこれにより、標準的なガウス消去法と同じゼロ要素を持つ行階段形が生成されます。
ベライス氏の主な指摘は、この変種によって生成される各行列要素は、元の行列の小行列の行列式であるということである。
特に、整数エントリから始めると、アルゴリズムで発生する除算は整数になる正確な除算になります。したがって、すべての中間エントリと最終エントリは整数です。さらに、アダマールの不等式は中間エントリと最終エントリの絶対値の上限を提供し、したがってビット複雑度はソフトO表記法を使用します。
さらに、最終エントリのサイズの上限がわかっているため、複雑さモジュラ計算に続いて中国剰余演算またはヘンゼルリフティングを行うことで得られる。
その結果として、以下の問題は同じビット複雑度で強力な多項式時間で解くことができる。[ 11 ]: 40
考えられる問題の一つは、非常に小さな数で割る可能性によって引き起こされる数値的不安定性です。たとえば、行の先頭の係数がゼロに非常に近い場合、行列を行簡約するには、その数で割る必要があります。これは、ゼロに近い数に存在していた誤差が増幅されることを意味します。ガウス消去法は、対角優位行列または正定値行列に対して数値的に安定しています。一般的な行列の場合、ガウス消去法は、部分ピボットを使用する場合、通常は安定していると考えられていますが、安定している行列でも不安定になる例があります。[ 12 ] [ 13 ]
ガウス消去法は、実数だけでなく、あらゆる体上で実行できる。
ブッフベルガーのアルゴリズムは、ガウス消去法を多項式方程式系に一般化したものです。この一般化は、単項式の順序という概念に大きく依存しています。変数の順序の選択は、ガウス消去法において既に暗黙のうちに行われており、ピボット位置を選択する際に左から右へ作業を進めるという形で現れます。
2 階を超えるテンソルのランクを計算することはNP 困難です。[ 14 ]したがって、P ≠ NPの場合、高階テンソル(行列は2 階テンソルの配列表現です) に対してガウス消去法の多項式時間類似法は存在しません。
前述のように、ガウス消去法は、与えられたm × n行列A を行階段形の行列に変換します。
以下の擬似コードでは、は、1 から始まるインデックスを持つ、行列Aのi行j列目の要素A[i, j]を表します。変換はインプレースで実行されるため、元の行列は失われ、最終的に行階段形に置き換えられます。
h := 1 /*ピボット行の初期化*/ k := 1 /*ピボット列の初期化*/ h ≤ mかつk ≤ nの場合: /* k番目のピボットを見つける: */ i_max := argmax (i = h ... m, abs(A[i, k])) if A[i_max, k] = 0: /*この列にピボットがないため、次の列に進みます*/ k := k + 1 それ以外の場合: 行を交換する(h、i_max) /*ピボットより下のすべての行に対して実行: */ for i = h + 1 ... m: f := A[i, k] / A[h, k] /*ピボット列の下部をゼロで埋めます。 */ A[i, k] := 0 /*現在の行の残りのすべての要素に対して実行します。 */ for j = k + 1 ... n: A[i, j] := A[i, j] - A[h, j] * f /*ピボット行とピボット列を増やす*/ h := h + 1 k := k + 1
このアルゴリズムは、先に説明したアルゴリズムとは若干異なり、絶対値が最大のピボットを選択します。ピボット位置で行列の要素がゼロの場合、このような部分的なピボット選択が必要になることがあります。いずれにしても、浮動小数点を使用して数値を表現する場合、ピボットの絶対値を可能な限り最大にすることで、アルゴリズムの数値安定性が向上します。 [ 15 ]
この手順が完了すると、行列は行階段形になり、対応する連立方程式は後退代入によって解くことができる。
{{cite book}}: CS1メンテナンス: 場所の発行元が見つかりません (リンク)