CG法が優秀な件

自分の研究について。CFDをやっているうちに数値計算をするうえでほぼ避けることの出来ない「ポアソン方程式」、もっと言ってしまえば連立方程式をどう早く解くかについてやってるんですよ。
それで定常解法の「ガウスザイデル法(以下GZ)」と非定常解法である逐次最小化法の「最急降下法(以下SD)」・「共役勾配法(以下CG)]の比較について今のところやってます。
GZとSDの計算時間を比べてみたらこんな感じ。


SD法遅すぎですwwww
CG法の一歩手前の癖に遅すぎです。道具バグでけつばんにしてやる。
それに最近組んだCG法のプログラムを加えるとダンチな結果に。

C G 法 完 全 勝 利 。グラフが常につぶれてます。共役勾配ってすごい!

でも、「全部の項を漸化式で書けるGZ法」という方法があって、現段階ではそれが一番早いです。しかもそれは俺が知らずに初期から使ってた方法。つまり今のところ全くスピードアップしてません。しかもGZ法の上位互換にSOR法というのがあります。昔はプログラミングめんどくさくてやってなかったんですけど、RでもCと同じく関数定義(=サブルーチン)ができることが理解できてきたのでそれを使えばSORなんて余裕でプログラミングできるんですよね。なので今後はSOR法もやってみます。そしたらもっと涙目になるかも。

ってことでプログラミングの現状は

  • 定常
    • GZ法完成
    • 漸化式型GZ法完成
    • GZ法⇒SOR法に上位互換
  • 非定常
    • SD法
    • CG法
    • CG法を進めてスピードアップを図る

ですね。がんばれ俺。