連立方程式を解く(MPU法アルゴリズムの実装(1))

関数の形は最初から決まっているのでフィッティングには最小二乗法が使える。という所は前回の時点で概ね方針が決まっていたので特異値分解を使って係数を決定する事になる。
 
さて、技術計算では連立方程式を解くようなケースが頻繁に現れる。ちょっと考えると不思議だと思う方も多いだろう。技術計算っていつも線形なの?って。
そんな事は無いが適当に(線形)近似すると結局は連立方程式を解く問題に行き着くのだ。
しかし、次際にはここからが技術者の腕の見せ所(?)になる。
連立方程式は行列を使って書けば
イメージ 1
だから解は
イメージ 2
まぁ、これは数学の話で、実際に逆行列を計算するような事は殆ど行わない。例えば逆行列は対角成分にゼロがあると破綻する。正確には言えばゼロに近い場合だ。
そういうときには適当な変形を行うのだが行列成分の殆どがゼロに近いようなスパース行列と呼ばれるような時は殆ど絶望的。さらに殆どがゼロなので行列成分全てを保持する必要が無く値の格納方法にも工夫がある。一般には収束計算(Preconditioned共役勾配法等)が適用される。
 
さらに逆行列なんかさらさら適用できないような(今回のケースはまさにコレなのだが)場合、つまり正方形の行列でない場合はそもそも逆行列が存在しない。そんな時には
イメージ 3
 
が最小になる解(最小二乗解)を計算する。もちろん
イメージ 4
なら最小二乗解。こんな時に特異値分解を使うのが常套手段となる。
特異値分解というのは次のような行列への分解で、
イメージ 5
 
 
この時は解は
イメージ 6
 
ちなみにイメージ 7
 
 
 
と置くと
イメージ 8
と書く事が出来るが、これはAが正方形の場合の解
イメージ 9
と比較するとちょうど逆行列に相当している事が分かる。これを一般逆行列という。