ラプラス方程式
に差分法を用いることによって
と得られる連立方程式をガウス消去法などの直接法で解こうなんて狂気の沙汰と言わざるを得ない。
――時々、こういう無謀なことをしようとする⑨未満がいたりする。さらに、逆行列を利用して解こうとする命知らずさえいたりする!!――
仮にx軸、y軸方向にそれぞれ100分割すると、未知数の数は、およそ100×100=1万だから、連立方程式の係数行列は1万行×1万列、要素数1億という超巨大な行列になってしまう。しかも、n元1次連立方程式のガウス消去法の計算量はO(n³)だから10000³=10¹²という天文学的な計算量になってしまう。
もっともこの係数行列の圧倒的多数は0なので、計算法を工夫することによって、計算量を大きく減らすことはできるだろう。しかし、この係数行列は帯行列(Band Matrix)――行列の対角成分
だから、こういった連立方程式を解くには、ガウス・ザイデル法やSOR法といった反復法を使ったほうがいいんだにゃ。
――ddt³さんは、「直接法にも、こうした連立方程式を解く、いい解法があります」と反論するかもしれない(^^ゞ――
収束の遅いガウス・ザイデル法はともかく、SOR法の場合、100×100程度の分割ならば、収束判定条件にもよるけれど、反復回数が1000回程度で収束するだろうから、反復法の計算量は100×100×1000=1千万=10⁷のオーダーでとどまるにゃ。
したがって、計算時間は
直接法は反復法の10万倍の計算時間を要してしまう!!
計算を工夫することによって仮に直接法が計算速度が1000倍速くなったとしても、計算時間は直接法:反復法=100:1だケロ。プログラムを作ることも容易だし、反復法の優位性は明らかだにゃ。
だから、この問題を直接法で解こうなんてアホウな真似をしてはいけない。
ではあるが、ガウス・ザイデル法やSOR法は、1回の反復で隣接する格子にしか計算の影響が及ばず一般に収束が遅い。
ということで、ラプラス方程式(1)に差分法を用いて得られる連立方程式(2)、または、(3)をより速く解く方法について、次回、考えることにするにゃ。