作成日記 Schemeで数値計算(2)

今日は、今後の方向性を決めるだけ。

数値計算の中でも、固有値の計算は大きなテーマであり、大きな壁でもある。行列の固有値計算に関係する、次の3つの事実が広く知られている。

  1. 固有値の真値は複素平面上に必ず存在する。(代数学の基本定理
  2. 「5x5以上のサイズの正方行列の固有値の真値を求められないケースがある」ことが証明されている。したがって、一般的な行列の固有値の"真値"を求めるアルゴリズムは存在しない。
  3. 固有値の近似値を計算するアルゴリズムは、過去から現在に至るまで、多くの研究者によって研究し続けられている。(当然これからも間違いなく研究され続ける。)

まず、固有値計算が困難な事情は、2.と3.から伺える。私は、おそらく一生かかっても、優れたアルゴリズムを完成させることができないだろう。したがって、究極の固有値計算アルゴリズム研究はとりあえず「保留」する。

どうやって保留するかと言えば、例えば(eigen-value A "algo-tag")みたいな感じで、
計算方法のタグ"algo-tag"をつけることで、逃げ道を作る。
あらたに良い方法が見つかれば、タグを付けてライブラリに追加するつもりである。とりあえず付け足せる状況だけを作って保留にする。アイディアはとても簡単で単純である。しかし、きれいに実装するのは私にとってだいぶ難しい。

話は変わるが、固有値計算をするとき、避けて通れないのが複素数だ。
複素数については、
a. 自前で環境を作る
b. Gauche等で用意されている環境を使う
の2択がある。今回、私はbを選択することにした。
理由は、身も蓋もないのだが、aがめんどくさかったからだ。(こんな適当な意思決定で大丈夫なのだろうか?)

今日決めたことは、次の2点。

  • 固有値計算の関数にはアルゴリズムの名前にちなんだタグを付け、新たな計算手法を追加可能な状況を作る。
  • 複素数は処理系で用意された環境を使う。

(たぶんつづく)