逆行列の計算量#

計算量#

逆行列の計算量 まとめ

  • 行列式を使う場合:おそらくO(n5)

  • Gauss-Jordanの掃き出し法:O(n3)

  • LU分解してから逆行列を求める:O(n3)

行列式を使う場合#

A1=1|A|A~

から計算する場合、おそらくO(n5)かかる(行列式の計算にO(n3) + 余因子行列にO(n5)

行列式の計算量

(1) 愚直に計算した場合 → O(n×n!)

|A|=σSnsgn(σ)a1σ(1)a2σ(2)anσ(n)

という行列式の定義から、置換の集合Snの要素数がn!個あり、各項でnanσ(n)を掛けるのでO(n×n!)

(2) 効率化した場合 → O(n3)

「行列Aのi行から、j行の定数倍を引いても、行列式の値は変わらない。」という性質を使って上三角行列に変形してから行列式を計算する。三角行列への変換はO(n3)、上三角行列の行列式は対角成分の積なのでO(n)なので、全体でO(n3)になる

(参考:Tech Tips: 行列式の計算

余因子行列の計算量

(i,j)余因子は「『i行目とj列目を除いた行列』の行列式に(1)i+jをかけたもの」なので、n1次行列の行列式を求める計算になり、O((n1)3)

余因子行列は「(i,j)余因子をi,j成分に持つ行列を転置したもの」なので、(i,j)余因子をn×n個計算する必要がある→O((n1)3×n2)か?

掃き出し法による計算#

O(n3)かかるとされる

教科書的な方法でありながら、行列分解による方法と計算量が大差ない(=結構効率的)

LU分解してから解く#

A=LUに分解し、Ly=bUx=yを順に解く(直接解法)

LU分解におよそn3/3回の計算が発生し、A1の計算におよそ2n3/3回の計算が発生する(伊理・藤野 1985)

n33+2n33=33n3=n3

よってO(n3)

行列が対称正定値行列のときのみ使える方法#

正規方程式のXTXのような行列のみ使える。統計や機械学習では身近

コレスキー分解#

LU分解の代わりにコレスキー分解A=LLTを用いることで計算量をLUの約半分にできる(分解についてO(n3/6)

共役勾配法#

連立一次方程式

Ax=b

xを求めることは、二次形式

f(x)=12xTAxbTx

の最小化と一致するので、f(x)の最小値を探索する方法で解を求める方法を 共役勾配(conjugate gradient: CG)法 という

連立1次方程式:共役勾配法 - PukiWiki for PBCG Lab

Aが対称正定値行列の場合、共役勾配法が利用可能(行列計算における高速アルゴリズム

ただし、共役勾配法などの反復解法全般の特徴として以下がある

  • 解がうまく収束する場合、計算量が直接解法より大幅に削減できる

  • 収束しない場合もある

  • 事前に収束回数はわからない

参考文献#

伊理正夫 & 藤野和建 (1985) 『数値計算の常識』