戸川 隼人:共役勾配法

作成日:2011-12-30
最終更新日:

概要

共役勾配法による連立一次方程式の解法を論じた専門書である。

感想

この本を買ったのは、私がニューラルネットワークの解法を探していたときであった。 共役勾配法は非線形最適化の解法としても用いられるが、この本はあくまで線形の連立一次方程式の解法にとどまる。 これを承知で買ったのは、何か面白いことがわかるからだろうと思ったからだ。 しかし、勉強が生半可だったため、結局何もわからなかった。

さて、連立一次方程式の解法として、前処理つき共役勾配法がよく用いられている。 前処理とは、共役勾配法の収束を早めるための処理である。 前処理として代表的なものに、不完全コレスキー分解(Incomplete Cholesky Decomposition)によるものがあり、 略して ICCG 法と呼ばれる。同書は、このような話にはほとんど触れられていない(p.98からの「6-5 収束を速める方法」参照)。 したがって、現在の最先端の動向をつかむ目的でこの本を読むのは不適当である。では、どのような観点で読むのがいいだろうか。

序論から

以下、この本の「序論」から引用する。

共役勾配法は1952 年に,M.R.Hestenes とE.Stiefel によって発表された。  それは,実に華やかなデビューだった。新聞やラジオは「科学史上に残る大発明」として,ビッグ・ニュー スの形で報道した。当時,筆者は高校生であったから,詳しい内容は全く分からなかったが

連立方程式を解くための画期的な方法が発明された。これまで何百年もの間, n 元の連立方程式を解くにはn3に比例する演算が必要なもの,とされてきたが,新しい 方法によれば,これをn2に比例する演算回数で解くことができる・・・。

という記事を(中略) はっきり記憶している。 数値計算法の一解法が,これほど大々的に報道されたことは, 前にも後にも例がない。

当時の意気込みが伝わる報道ではないか。そして、著者による次の説明が続く。

当時は,電子計算機が実用の段階に入りつつある時期であった. そのために電子計算機のための数値計算技術を確立することが早急に必要とされている時期であった. 特に,これも当時の重要課題の一つ,原子力関係の計算のために,また,航空機の強度計算のために, 大次元の連立1次方程式の効率よい解法が切望されていた.

そうか、と今思う。原子力は花形だったのだ。ただ素人の私には、原子力関係の計算をなんのために使うのかが、未だによくわからない。 続く航空機では強度計算とはっきり出ている。実際、構造物の強度を計算するために有限要素法を使うと、 疎行列(スパース行列)の連立一次方程式が得られる。これを解く一方法として共役勾配法があるのはわかる。

では、原子力関係の何に必要だったのだろうか。一つは、やはり原子力発電所で用いられる構造物、 たとえば原子炉の強度計算ということであろう。どのような形状であれば圧力に耐えられるのかどうか。 きっと原子炉は当時、技術の粋を集めて設計されたのだろう。その結果原子炉は実用化され、多くの電力を供給した。 しかし、2011 年 3 月 11 日の津波で原子炉は崩壊した。技術のむなしさを、今思う。

基本計算手順

嘆いていても仕方がない。著者の記述方法に従い、概観する。`bbx` に対する連立一次方程式 `A bb x=bb b` を解くものとする。 なお、いくつか添字を省いたり、誤植を私の責任で直したりしている。

  1. ステップの変数 `k` を`k=0`とおく。第 0 近似解 `bb x^((0))`を適当に選ぶ。
  2. 第 0 近似解に対する誤差を次の式で計算する。
    `bb r^((0))= bb b - A bb b^((0))`
  3. 補助変数 `bb p` を導入し、出発値を`bbp^((0)) = bbr^((0))` とする。
  4. `bb y^((k)) = A bb p^((k))`
    を計算する。
  5. 第`k`回の修正係数`α^((k))`を次の式で求める
    `alpha^((k)) = (bb r^((k)) * bb p^((k))) / (bb y^((k)) * bb p^((k)))`
  6. 第`k+1`回の近似値`bb x^((k+1))`を次の式で求める。
    `bb x^((k+1)) = bb x^((k)) + alpha^((k)) bb p^((k))`
  7. 第`k+1`回の近似値に関する誤差`bb r^((k+1))`を次の式で求める
    `bb r^((k+1)) = bb r^((k)) - alpha^((k)) bb y^((k))`
  8. 第`k`回の刻み幅`beta^((k))`を次の式で求める
    `beta^((k)) = (bbr^((k+1)) * bbr^((k+1))) / (bbr^((k)) * bbr^((k)))`
  9. 補助変数 `bb p` を次の式で更新する。
    `bb p^((k+1)) = bb r^((k)) + beta^((k)) bb p^((k))`
  10. 収束判定をする。収束が十分でなければ手順 4. に戻る。

数式の記述

数式は ASCIIMathML で記述し、 MathJax で表示している。

書 名共役勾配法
著 者戸川 隼人
発行日 年 月 日
発行元教育出版
定 価
サイズ
ISBN
NDC

まりんきょ学問所数学の本 > 戸川 隼人:共役勾配法


MARUYAMA Satosi