2010年12月25日土曜日

微分解析機

今回は微分解析機といっても, トルクアンプ, 日本語では回転力増幅器の, それも図の話である.

微分解析機の積分機の出力は, 摩擦で生じる微少な力なので, これで他のものを駆動することは出来ない. ところがNewmanにより, トルクアンプが発明され, それによって微分解析機は実用になった.

トルクアンプは, 下の図のような構造である.



右のinputの軸の回転を, 左のoutputの軸から力を増幅して取り出すのである. その間にロープを書けたドラムが2組あり, ロープの端は, 入力と出力軸に取りつけたT字状のレバーの先に固定されている. ドラムは両端のプーリーにかけたベルトで, 矢印の方向に, 逆方向に回転している. 入力軸が回転しない時は, ロープはドラムの面を滑っている.

今, 入力軸が, 右に回転したとする. そうすると, 下のT字状のレバーが持ち上がり, 左のロープがドラムの上で締まり, ドラムとの間に摩擦が生じ, 上のT字状のレバーが押し下げられ, 出力軸が入力軸と同じ方向に回転する. 回転角が同じになれば, ロープは弛み, 再び滑り出す.

入力軸が反対に回る場合は, 右のドラムの摩擦が生じ, 出力軸はやはり入力軸と同回転する.

つまり, 回転するドラムが動力になり, 入力の微少な力を増幅するのである.

こういう仕掛けは船の碇を巻き上げる装置にもあるらしい.

さて, 上のような図で説明したが, 私としては, ロープを直線で描いたのが気に入らないのである. 図はなるべく正確に描きたいというからには, このようにドラムの縁で光の反射のような図はだめである.



そこで考えたのがこの図である. 上と下のT字状のレバーにロープが繋がっている点をAとEとする. 図の円はドラムの断面である. ロープは, AからBに至ってドラムに接し, BCDFBCDとドラムを1回とすこし回り, Dから離れてEでもう一方のT字状のレバーに辿り着く. 先ほどの図は, これを左から見たものだ. そうすると, ロープ上の点は, Aから下がり, ドラムの円の右半分を上がり, また下がるように見えるはずである. また左右の座標位置は, ロープの長さに比例して右へ移動するはずである.

その移動の様子を, 半径の右の, 点の列で示す. 赤はロープのAからBに対応する. 緑はBCDFBCDに対応, 最後の青はDからEである.

そういう解釈で, 最初の図を描き直すと下の絵になる.



ざっと見ると最初の図と左程違わないが, ドラム回りのロープは本当らしくなったのではないか.

2010年12月23日木曜日

クリスマスツリー講義

今月(2010年12月)始め, Knuth先生から, いつもの航空便ではなく, 珍しくメイルで返事が来た. その最後に

By the way, my lecture next Monday will probably be webcast live, so you might be able to watch it via Internet in Japan.

と書いてあった. その日(日本時間では7日朝)は所用あって, インターネットも見ずに過ぎたが, ホームページには,

Monday, 06 December, 5:30pm, in the new NVIDIA auditorium (Huang Engineering Center) A Computer Musing entitled ``Why pi?'' [the sixteenth annual Christmas Tree Lecture]

あ, これがあのクリスマスツリー講義(Christmas Tree Lecture)だったのか.

すぐに連想するのは, 元祖「クリスマス講演」である.

「これから皆さんにロウソクのお話をいたそうと思います.」で始まるMichael Faradayの「ロウソクの科学」は, 1860年のクリスマスであった. だから150年前の話だ. ところでこの原題はThe Chemical History of a Candleという.

Royal Institution Christmas LecturesをWikipediaでみると, 1825年に始まり, 第2次世界大戦中を除き, 今年も続けているというから, 英国のこだわりにはまったく脱帽する.

一方, クリスマスツリー講義は, Knuth先生が, 年末に一般向けに講義するものらしい.

TAOCP V4F4の表4に8次のクリスマスツリーパターンという図があり, その脚注に(TAOCPに脚注があるのは異例なことだが),

"This name was chosen for sentimental reasons, because the pattern has a general shape not unlike that of a festive tree, and because it was the subject of the author's ninth annual "Christman Tree Lecture" at Stanford University in December 2002."

と書いてある.

8次は大きすぎるから遠慮し, 6次のクリスマスツリーは以下のように, 6ビットの二進数64個を, 6C3=20行, 6+1列に配置する.

左からの各列は, 1の個数が0, 1, ..., 6である. 従って中央の高さは6C3である. 同じ行では, 右に行くに従い, 0が1に変っていく. 赤い0は, 次に1になるもの, 青い1は, 前に0だったものだ.

この配置法は, 1951年にde Bruijn, van Ebbenhorst Tengbergen, Kruyswijkが発見した.



101010
101000 101001 101011
101100
100100 100101 101101
100010 100110 101110
100000 100001 100011 100111 101111
110010
110000 110001 110011
110100
010100 010101 110101
010010 010110 110110
010000 010001 010011 010111 110111
111000
011000 011001 111001
001010 011010 111010
001000 001001 001011 011011 111011
001100 011100 111100
000100 000101 001101 011101 111101
000010 000110 001110 011110 111110
000000 000001 000011 000111 001111 011111 111111


これはどうできているかというと, 1次は

0 1

の1行. これではクリスマスツリーにならない. 2次は

10
00 10 11

の2行. いささかツリーらしくなる.

さて, n次のツリーの各行を,
σ1,...,σs
とすると, n+1次のツリーは, 各行を
σ20,...,σs0と
σ10,σ11,...,σs1の
2行にする.

すなわち, 後に0をつけたものと, 後に1をつけたものを作り, 0をつけたものの先頭の1個を1をつけたものの先頭に移動するのである. 先頭を外した後が0個になったら, その行は除く.

Schemeで書くと

(define (next ct)
(if (null? ct) '()
(let ((ss0 (map (lambda (s) (string-append s "0"))
        (car ct)))
(ss1 (map (lambda (s) (string-append s "1"))
        (car ct))))
(set! ss1 (cons (car ss0) ss1))
(set! ss0 (cdr ss0))
(if (null? ss0) (cons ss1 (next (cdr ct)))
(cons ss0 (cons ss1 (next (cdr ct))))))))

である. ctを

(define ct '(("0" "1")))

によって1次のクリスマスツリーとし, ctにnextを順に作用させると,

(("10") ("00" "01" "11"))

(("100" "101") ("010" "110") ("000" "001" "011" "111"))

(("1010") ("1000" "1001" "1011") ("1100")
 ("0100" "0101" "1101") ("0010" "0110" "1110")
("0000" "0001" "0011" "0111" "1111"))


が得られる. クリスマスツリーらしいのは, 次数nが偶数の時である.

6次のクリスマスツリーパターンは, 異なる64の要素があるから, それを八卦の64のパターンで置き換えたのか以下である.



これは, 昨年の, 私からKnuth先生へのクリスマスカードであった.

2010年12月22日水曜日

1のかたまり

TAOCPに  Ank=0n n-kC2k  という式があった(演習問題7.1.4--125).

その解答のHistorical Noteに Ancounts binary x1...xn-1 with each 1 next to another と書いてある. なんだろうと思っているうちに, Knuth先生からのある手紙にヒントがあった.

ちなみにAnの値は

n 1 2 3 4 5 6 7 8 9 ...
An 1 1 2 4 7 12 21 37 65 ... .

とりあえずn=5を考える. するとbinary x1...xn-1

0 0 0 0 *
0 0 0 1
0 0 1 0
0 0 1 1 *
0 1 0 0
0 1 0 1
0 1 1 0 *
0 1 1 1 *
1 0 0 0
1 0 0 1
1 0 1 0
1 0 1 1
1 1 0 0 *
1 1 0 1
1 1 1 0 *
1 1 1 1 *


with each 1 next to another は, 1があれば単独では現れないということで, そういうものは, 上で星印をつけた7=A5個になる. 1は孤立していて失格である. 問題はこのパターンの見つけかたである. 星印のものを取り出すと

0 0 0 0
0 0 1 1
0 1 1 0
0 1 1 1
1 1 0 0
1 1 1 0
1 1 1 1

最初のは1がないから別にして, 残りは1のかたまりが1個ある. 1が孤立するかたまりはないから, 1のかたまりから1個外したパターンを書くと

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

となる. ビットの境界に左から1,2,3,4と番号をつけ, 0と1の境界の位置を書いてみると

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

となり, これは4個から2個選ぶ数であった. つまり4C2=n-1C2=6.


同様にして, 1のかたまりが2個あるパターンは, n=7の0 1 1 0 1 1 から考え始めて

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

だから, 右にあるような境界の位置を見れば, 5C4=n-2C4(1のかたまりが2個の場合).

という次第で, 一般に1のかたまりがk個ある数はn-kC2k.
一番上の1のかたまりのないものはnC0=1.



2項係数nCmは, n<mの時に0だから, かたまりがとれるところまで足せばよく, 1のかたまりの置き方の数になるのであった. 結構むずかしい. 私もヒントなしでは, ここまで辿りつかなかっただろう.

2010年12月11日土曜日

2011

1年ほど前 2010が1から9までを使ったどういう式で表わせるかを計算し, このブログに書いたことがある.

今回は2011である. 28個の解があった.


(+ 1 (* (/ 2 3) (- (* (* (* (+ 4 5) 6) 7) 8) 9)))
(- 1 (* 2 (+ 3 (* (* (- (- (- 4 5) 6) 7) 8) 9))))
(- (* (- (/ 1 2) (* (* (- (- 3 4) 5) 6) 7)) 8) 9)
(+ (* 1 2) (* (+ 3 4) (- (* (+ (* 5 6) 7) 8) 9)))
(* 1 (+ 2 (* (+ 3 4) (- (* (+ (* 5 6) 7) 8) 9))))
(* 1 (- (* (+ (* 2 3) 4) (- (* (* 5 6) 7) 8)) 9))
(- (* (+ (+ (+ 1 2) 3) 4) (- (* (* 5 6) 7) 8)) 9)
(- (* (+ (* (* 1 2) 3) 4) (- (* (* 5 6) 7) 8)) 9)
(- (* (* 1 (+ (* 2 3) 4)) (- (* (* 5 6) 7) 8)) 9)
(- 1 (* (/ 2 3) (- (+ 4 5) (* (* (* 6 7) 8) 9))))
(+ 1 (* (* (/ 2 3) (+ (- 4 5) (* (* 6 7) 8))) 9))
(+ (- (* 1 2) 3) (* 4 (+ (- 5 6) (* (* 7 8) 9))))
(* 1 (+ (- 2 3) (* 4 (+ (- 5 6) (* (* 7 8) 9)))))
(+ (* 1 (- 2 3)) (* 4 (+ (- 5 6) (* (* 7 8) 9))))
(+ (/ 1 (- 2 3)) (* 4 (+ (- 5 6) (* (* 7 8) 9))))
(+ 1 (* (+ 2 (* (- 3 (* 4 (- (/ 5 6) 7))) 8)) 9))
(+ (* 1 2) (* (+ 3 4) (+ 5 (* 6 (- (* 7 8) 9)))))
(* 1 (+ 2 (* (+ 3 4) (+ 5 (* 6 (- (* 7 8) 9))))))
(- (- 1 (* 2 3)) (* (* (* (* 4 (- 5 6)) 7) 8) 9))
(- (- 1 (* 2 3)) (* (* (* (/ 4 (- 5 6)) 7) 8) 9))
(- 1 (* (+ (/ 2 3) (* (* (* 4 (- 5 6)) 7) 8)) 9))
(- 1 (* (+ (/ 2 3) (* (* (/ 4 (- 5 6)) 7) 8)) 9))
(- (* 1 2) (* (+ 3 4) (+ (* (- 5 (* 6 7)) 8) 9)))
(* 1 (- 2 (* (+ 3 4) (+ (* (- 5 (* 6 7)) 8) 9))))
(- 1 (* (* 2 3) (+ (* (- (- 4 5) (* 6 7)) 8) 9)))
(+ 1 (* (* 2 3) (- (* 4 (+ (* 5 6) (* 7 8))) 9)))
(- 1 (* (* (- (/ 2 3) 4) (+ (+ 5 6) (* 7 8))) 9))
(+ (* (+ 1 (* (* 2 (+ 3 (* 4 5))) 6)) 7) (* 8 9))


最後の
(1+2*(3+4*5)*6)*7+8*9
が美しい.

2010年11月20日土曜日

双曲線

円錐曲線の中で, もっとも馴染みがないのが双曲線である. したがってda Vinciも双曲線コンパスは考えなかったかも知れない.

反比例 y=1/xを習うと, この形は双曲線と教わる. 確かにx軸とy軸は漸近線だし, 第1象限と同じ図形が第3象限にもある.

xy=1を x'=√2 x-√2 y, y'=√2 7+√2で置き換える. つまり45度回転すると, 確かにx2/2-y2/2=1となり, 双曲線である.

ところで, 双曲線というと, 以前から気になる文言がある. 高橋秀俊先生の「数理と現象」に

「楕円は丸い茶碗やお盆を横から見たときの形として, 万人の日常接しているところであるが, 放物線と双曲線はそれほど親しみがあるとはいえないかもしれない. しかし, 円錐曲線はすべて円錐の切り口, つまり円形をある方向から見たときの形であって, 誰でも目にふれるはずのものである. すなわち大きい円を近くから見て, 円の一部が眼よりも後に来るような場合は, 円は双曲線(の片側)に見え, ちょうど眼の平面(眼のところを通って視線に垂直な平面)に接する場合は放物線に見えるのである.」

と書いてある. 確かに付随する写真では放物線や双曲線のように見える. これはどういうことか, ずーっと疑問に思っていた.

私は自他ともに認めるPostScript描画大好き人間なので, さっそく図を実際に書いてみることにした.




すなわち, 円Oの中央の真上の点Hから, 水平に置いた円Oを, その円周上で接している面Pに投影し, 得られる(赤線の)図形を描いてみたのである. 特殊な環境だが, 計算式を簡単にしたかったからである.

たしかにHの真横の円の部分は右下, 左下の遠方に投影されるから, 双曲線になりそうである. そして出来た図が下である.






視点HをOの真上にとったのは, 怪我の功名であって, 実はHを頂点とする円錐を平面Pで切ったので, 断面が双曲線なのは当たり前である. 高橋先生がいわれるのは, 円内のもっと一般的なところで見ても双曲線ということで, それには別の視点が必要そうだ.

2010年11月17日水曜日

楕円コンパス(つづき)

Leonardo da Vinciは放物線のためのコンパスも考案した. この方はたまたまウェブに図があった(http://www.japandesign.ne.jp/HTM/REPORT/art_review/38/big/05.html)ので, 借用させていただく.



前回のブログの最後に書いたように, 離心率が大きい(=1に近い)と楕円コンパスは苦しくなる. 放物線は離心率が1なので, 発想の転換が必要だ. そこでda Vinciは別の機構を考えたのであろう.

こちも原理は楕円の場合と同じである. 円錐を母線と平行な面で切ると放物線になる性質を利用している. 前回の図で, 切断面が母線と平行になると, 上の球は作図出来るが, 下の球は存在しない. つまり焦点は1つになる.



放物線コンパスの仕掛けを上の図で説明しよう.

ACは鉛直な回転軸である. Cを頂点とし, 底面が円DQEFの円錐を考える. 回転軸を支えるのに, CD, CE, CFの3本がある. 3本の足は, 別に母線に合っている必要はないが, da Vinciの図がなんとなくそうなっているのに従った.

P点に筆記具をつけた伸縮自在の腕 BPは, 母線に沿って回転し, PはDからスタートしてPへ至り, さらにEまで進む. すると放物線DPEが描けるのである.

円錐の角度を一定に保つために, GHがある. 模型で見るように, 放物線を描く面は, 母線と平行に傾けてある. その面の上をPが伸縮しながら放物線を描くのである. 筆記具を平面に押し付けるためか, CPの中間に錘りがぶら下がっているのも面白い.

2010年11月1日月曜日

楕円コンパス

この世には円(お金ではない)も多いが, 楕円はもっと多いに違いない. 丸いものも正面以外の方向から見ればみな楕円に見える. そもそもが, 惑星の軌道から楕円である. また円は楕円の特殊な場合に過ぎぬ.

正弦や余弦の曲線も正確に手書き出来る人はまずいないが, 楕円や放物線も正確には書きにくい曲線である. 最近楕円型の炬燵があると聞いたが, 見ると陸上競技のトラックの形(小判形)であった. 世の常識はそれも楕円だ.

小学生の頃習った楕円の書き方は, 2本のピンと糸を使うものであった. 実際にやってみると, 鉛筆の芯から糸が外れたりで, 結構苦心する. 与えられた長径2a, 短径2bの楕円を描こうとすると, まずピンの間隔を2√(a2-b2), 糸の輪の長さを2(a+√(a2-b2))にしなければならず, 糸の輪の長さをこのように正確にするのは, 極めて難しい.

従って, 製図では, 楕円上の点を適当にとり, 雲形定規でつなげて描いたりする.

最近はPostScriptさまさまで, 縦横のスケールを変えて円を描けば簡単に出来るようになった. しかし線の太さも影響を受けるのが問題である. 長径a, 短径bの楕円は,

a 0 moveto
1 1 360 {dup cos a mul exch sin b mul lineto} for stroke

で描くのがよい. Processingはellipse関数の方が基本で, 円はその特殊なケースとする. この方が正しいやり方である.

しかし, やはりコンパスで円を描くような, 名案はないであろうか.

Archimedesの楕円コンパスというものがある. 我が家にはそのおもちゃがある.



おもちゃとしては, これは何の軌跡かというクイズなのだが. ...

Archimedesの楕円コンパス下の図のようなものだ.



長さaの棒の一端Pに筆記具, 他端と, 筆記具からbの距離に, それぞれ短軸, 長軸に沿って動くスライダN, Mをつけ, その棒を回転すると, 長径2a, 短径2bの楕円が描ける. この動画はここにある.

∠PMQをθ. Pの座標をx, yとする. x=a cos (θ), y=a sin (θ) - (a - b) sin (θ) = b sin (θ)で, Pの軌跡は, 長径2a, 短径2bの楕円になる.

2007年に東京国立博物館で,「レオナルド・ダ・ヴィンチ--天才の実像」という特別展があった. 殆んどの入場者には, 「受胎告知」が関心の的であったろう.

私の場合は, 「レオナルドの書斎」が面白く, 中でもアトランティコ手稿に基づく楕円作図のためのコンパス[複製]に目がとまった.



上の図のようなものである. 通常のコンパス同様, 回転軸ABがあり, Aを固定し, Bをつまんで回す. 通常のコンパスとは異なり, 軸は傾斜している. その傾斜角を維持するために, 支柱CDとCEがある.

軸上の点Qから腕QPが分かれており, Pに筆記具を着ける. AQPの角 θ が一定になるようにして, 軸を回すと, Pが楕円を描くという仕掛けである. ただし, PQは, 軸が傾斜しているから, 通常のコンパスと違い, 伸縮できなければならない.

このコンパスに味噌は, θを一定にして軸を回転すると, QPを母線として円錐が描け, それを平面で切っているのである.

なるほど, 円錐を斜めに切ると楕円が出来ることの応用と思い, さっそくアニメーションのプログラムを書いた.

これは面白かったので, 2007年のlightweight languages spiritで話をした.

円錐を斜めに切ると, 卵形ではなく, 楕円になるというのも, 直ぐには信じ難い.


上のような図を描くといちおう納得する. 円錐を右上から左下へ平面で切った断面である. 円錐と切った平面に上から内接する球を O , 下から内接する球を O'とする. O と円錐の接円, O'と円錐の接円は赤い横線のようになる. また, O , O' と切った平面の接点をそれぞれ F, F' とする.

さて, 任意の母線ABを考える. この母線と Oの接円, 切った平面, O'の接円との交点を, T, P, T'とする. 球面外の点から, 球面へ引いた接線の, 接点までの距離は等しいから, PT=PFであり, PT'=PF'である. 従って, FP+F'P=PT+PT'=TT'=一定となって, Pは楕円となる.

ところで, da Vinciのコンパスの最大の問題は, 伸縮する腕のことだ. 長い時と短い時の長さの比が大きい腕は作るのが困難である. つまり離心率の大きい楕円は描けない. 私の図でも, 比を2:1にとるのがやっとであった. 要するにこのコンパスは話だけで, 実用には遠いのだ.