2007-02-11

無限少数と行列

プログラマーのための0.999...の解釈より

var one_third = function(q){
  return q() * 1 / 3;
}

あ、そっか。スパースな行列や、サイズはでかいけど高速に要素を計算できる行列を使うとき、行列をデータで定義するんじゃなくて、関数的なオブジェクトで定義するのと似ている。



たとえば、対角行列 D を愚直に書くと、



1 0 0 0
0 2 0 0
0 0 3 0
0 0 0 4



なわけだけど、1, 2, 3, 4 だけ覚えといて、i≠j の要素 D(i, j) は 0 を返すようにしておく。もちろん、計算順序の入れ替えだとか、いろいろ小細工はできるわけです。こうしておくと、あほみたいに大きな行列を扱うときにも、メモリを無駄遣いせずにすみます。



ぜんぜん、似てませんね。