概要#
連立1次方程式#
のような連立一次方程式は、
を用いて
と表すことができる。
もし\(A\)に逆行列が存在するなら
と解くことができる。
例題#
を例に考えてみる。
中学数学的な素朴な解き方だと、式を定数倍したり、式同士を差し引いたりすることで変数を消していく。この方法は変数消去法と呼ばれる。
変数消去法
と番号をふる。
まず(1)を2倍して(2)から引き、(2)から\(x\)の項を消す
(2’)を1/2倍すれば\(y = 2\)であることがわかる。
また\(y = 2\)を(1)から引くと
となる
変数消去法は行列表記にすることもできる。
変数消去法(行列表記)
を行列で表すと
となり、少し移項してブロック行列で表すと
となる。
は、まず1行目を2倍して2行目から引くと
となる。続いて、\((1, 2)\)要素をゼロにしたいので次に2行目を1/2倍して
2行目を1行目から引くと
もとの式に戻すと
より、\(x = 3, y = 2\)となる
まとめると、ブロック行列
を変形していって
という形にする。 \(\b{x} - \b{z} = \b{0}\)となり、\(\b{z}\)のところに解が現れる。
変数消去法に限らず、行列で連立一次方程式を解くときはこのパターンになる。 また、変化があるのは\((A|\b{y})\)の部分だけなので、この部分だけを扱うことも多い。
ガウスの消去法(掃き出し法)#
ガウスの消去法(Gaussian elimination) あるいは 掃き出し法(row reduction) は正則行列による連立一次方程式を、ブロック行列表記にして解く方法。
変数消去法と同様に、
行のスカラー倍
行のスカラー倍を別の行に加算する
行の順番を入れ替える
といった操作を行うもので、
まず\(A\)の対角線より下の要素たちを0にしていき、その後対角線より上の要素たちを0にしていって\(I\)に到達する、という流れで計算していく
\(A\)の対角線より下の要素たちを0にする操作を 前進消去 (Forward elimination)という
前進消去により
の形にすると、解は次のように求まる
import numpy as np
# 拡大係数行列
A = np.array([
[1, 1, 5],
[2, 4, 14],
])
a = A[0, 0]
i = 1
j = 0
A[i, :] = A[i, :] - (A[i, j] / a)
A
array([[ 1, 1, 5],
[ 0, 2, 12]])
解の種類#
\(n\) 変数の連立一次方程式 \(A x=b\) とし、拡大係数行列を \([A \mid b]\) で表す。
\(\operatorname{rank} A=\operatorname{rank}[A \mid b]=n \Longleftrightarrow\) ただ1つの解 \(x\)
\(\operatorname{rank} A=\operatorname{rank}[A \mid b]<n \Longleftrightarrow\) 不定解 \(x\)
\(n\)個の変数に対して手がかりが足りず、解が一意に定まらない
\(\operatorname{rank} A<\operatorname{rank}[A \mid b] \Longleftrightarrow\) 解なし
\(A\)が正則の場合#
もし逆行列が存在するなら
と解くことができる
定理
連立一次方程式\(Ax = b\)があるとする。
もし\(|A| \neq 0\)なら、\(Ax = b\)はただ1つの解をもち、その解は
で与えられる。
証明
\(|A|\neq 0\)とすると、\(A\)の逆行列\(A^{-1}\)が存在する。
連立一次方程式の両辺に\(A^{-1}\)をかけると
行列の積は結合法則を満たすから、上式の左辺は
よって
逆行列の推定への応用#
逆行列の推定方法の一つに連立一次方程式を解く方法がある
\(n\)次元正方行列\(A\)の逆行列は
となるような正方行列\(X\)であるため、\(n\)組の連立一次方程式\(A\b{x}_i = \b{e}_i \hspace{0.5em} (i = 1,\dots, n)\)を解く問題として扱うことができる
\(A\)が正則でない(特異な)場合#
連立一次方程式の解の存在性と一意性の条件
結果\(y\)から原因\(x\)を一意に特定できる(写像\(y=Ax\)は単射)⇔「\(\Ker A\)が原点\(o\)のみ」⇔「\(\Ker A\)は0次元」⇔「\(\rank A = n\)(ランクが定義域の次元と同じ)」
どんな結果\(y\)にも原因\(x\)が存在する(写像\(y=Ax\)は全射)⇔「\(\Im A\)が行き先の空間(値域)に一致する」⇔「\(\Im A\)は\(m\)次元」⇔「\(\rank A = m\)(ランクが値域の次元と同じ)」
クラーメルの公式#
クラーメルの公式
\(A\)が\(n\)次の正則行列であるとき、連立1次方程式
はただ1組の解をもち、その解は次のように与えられる
ここで\(\Delta_j\)は行列\(A\)の第\(j\)列をベクトル\(b\)で置き換えた行列式
証明
仮定より\(|A|\neq 0\)であるから、\(\boldsymbol{x} = A^{-1} \boldsymbol{b}\)という解がただひとつ存在する。
\(A\)の列ベクトルを\(\boldsymbol{a}_1, \cdots, \boldsymbol{a}_n\)とすると
\(A\)の第\(j\)列を\(\boldsymbol{b}\)で置き換えた行列の行列式を考える。
\(\b{b} = x_1 \b{a}_1 + \cdots + x_n \b{a}_n\)なので
「1つの列を\(c\)倍すると行列式は\(c\)倍になる」という定理より
\(j\)番目以外は2つの列が等しいため、「2つの列が等しい行列の行列式は0になる」という定理により0になり、\(j\)番目の項のみ残る
したがって、行列\(A\)の第\(j\)列を\(b\)に入れ替えた行列の行列式は\(x_j |A|\)と等しくなる
この両辺を\(|A|\)で割るとクラーメルの公式になる
例:
を解け。
係数行列を\(A\)とすると、その行列式は
それぞれの列を\(b=(10, 12)^T\)に置き換えた行列式は
よって解は
連立一次方程式の計算の高速化#
幅広い行列に使える方法#
掃き出し法
直接解法(LU分解して解く)
特定のタイプの行列に使える方法#
対称正定値行列(例えば回帰モデルの\(X^T X\))だと、
コレスキー分解(LU分解の代わりに\(A=LL^T\)に分解する)
共役勾配法(\(f(x)=\frac{1}{2} x^T Ax - b^T x\)を最小化する\(x\)を求める形で反復計算して解く)
参考: