微分解析機のことを調べようとすると, 参考になる文献は
城憲三「計算機械」共立全書
佐々木達治郎「計算機械」河出書房
くらいであった. 微分解析機を使われたり, 設計されたりした渡辺勝先生に先頃お目にかかったら, John CrankのThe Differntial
Analyser(1947年刊)を読むべきだといわれた.
私が在職していた東大工学部計数工学科の図書室にあったので, さっそく読み始めた. まことに実用的な本であった. 英国のCambridge大学にあった微分解析機に基いて豊富な説明があった.
そこの微分解析機も, 積分機の円板の方を被積分関数に応じて動かす方式なので, 独立変数の入力は円板を`rotate'する(回す); 被積分関数の入力は積分機を`displace'する(動かす)と使い分けていて実に理解しやすい.
従って積分機の図も次のようで, 積分機を押し上るような矢印が被積分関数, 円板の横の一部網かけのドライブの軸が独立変数, 円板中央のT字状の軸が積分出力である. それらに繋がる縦の軸がクロスシャフト. 横の軸がバスシャフトである.
積分機を2台使ってsin, cosを発生させるのは, どこにでも例題があるが, もっと他の基本関数の発生法もなかなか面白かったので, 今回はそれが話題である.
本番で使うときは, 係数処理をしなければならないが, とりあえずどの関数は積分機何台で出来るかという一覧表があった. その中から:
sin z, cos z
d sin z/dz = cos z
d cos z/dz = -sin zだから
sin z = ∫ cos z dz,
cos z = ∫ -sin z dz
cos zで「動かし」, zで「回す」と sin zが得られ,
-sin zで「動かし」, zで「回す」と cos zが得られる.
図は上に示した通り. バスシャフトとクロスシャフトの交点が丸で囲んであるのは, クロスシャフトの回転を通常と反対にすることを示す.
z=0からπまでをプログラムでシミュレートしてみると(積分区間を1024分割した):
(define k 1024)
(define z 0) (define sinz 0) (define cosz 1)
(define pi (* 4 (atan 1)))
(define dz (/ pi k))
(do ((i 0 (+ i 1))) ((> i k))
(set! z (+ z dz))
(set! sinz (+ sinz (* cosz dz)))
(set! cosz (- cosz (* sinz dz))))
(display (list z sinz cosz)) =>
(3.1423596439839487 -7.670673988518897e-4 -.9999994116371386)
ez
d ez/dz = ezだから
ez = ∫ezdz
ezで「動かし」, zで「回す」と, ezが得られる.
次の図のようだ.
z=0から1までをプログラムでシミュレートしてみると(積分区間を1024分割した):
(define k 1024)
(define z 0)
(define ez 1)
(define dz (exact->inexact (/ 1 k)))
(do ((i 0 (+ i 1))) ((> i k))
(set! z (+ z dz))
(set! ez (+ ez (* ez dz))))
z => 1.0009765625
ez => 2.719609006545993
z2, z3
z2 = 2 ∫z dz
z3 = 3 ∫z2 dz
zで「動かし」, zで「回し」, 2倍するとz2が得られ,
z2で「動かし」, zで「回し」, 3倍するとz3が得られる.
バスシャフト間を繋ぐ[1 2]や[1 3]は, 回転をそれぞれ2倍, 3倍する歯車を示す. z3はこのように積分機2台が必要である.
シミュレーションは不要であろう.
他の関数は次の機会にしよう.
この本を読んだ収穫のひとつが独立変数は「回す」, 被積分関数は「動かす」と言い分けることであった. 若き日のWilkes先生を含め, Cambridge大学の微分解析機のグループが, rotate, displaceを使うと意思の疎通が捗ると知り作業していたらしいことが想像できる.
大学院生のころよく読んだ海外誌がBSTJ(Bell System Technical Journal)であった. C.E.Shannonの通信理論の論文もBSTJに掲載された. BSTJの電話交換機の論文では, Sheといえば交換手, Heといえば加入者であって, 便利な使い分けだと感心したが, こういうこともコミュニケーションで大事なノウハウであろう.