本年(2008年)3月26日のパラメトロン計算機PC-1の完成50年記念から半年がたつ.
記念の日の講演会会場で, NIIの橋爪君たちのパラメトロン加算回路のデモがあったが, それ以外にもこの半年にはパラメトロンのニュースがいくつかあったので記録しておく.
NTTの研究所でもパラメトロンの試作をしているというニュースを読んだ.
「パラメトロン・コンピュータよ再び」NTT研が低消費の論理素子を開発 EE Times Japan 2008年6月号
長さ250μm, 幅85μm, 厚さ1.4μmの長さの両側から圧電で正弦波の力を加えると, 上下に曲がりながら振動する. それが0相, π相になるという.
9月になると, 逗子の井村さんから, パラメータ発振に成功したというメイルを貰った. 励振と発振の様子やNOTらしいものが見える.
ただ加算回路までは出来ていないらしい.
パラメータ励振に興味を持つ人がいるのは嬉しいことだ.
2008年9月26日金曜日
2008年9月19日金曜日
多面体描画道楽
小学生の頃, 算術か図画か工作の教科書に正五角形の書き方が載っていた. 正三角形, 正方形, 正六角形ならコンパスで描けるが, 正五角形は分度器を使うものと思っていたから, この方法には驚かされた. その後, 1辺の長さ1の正五角形の対角線の長さが(√5+1)/2であることを知ると,なんのことはなく, 驚きは霧散した.
この描き方は正五角形の書き方をサーチエンジンで探せばあるだろうが, 図のように底辺ABを引く. 辺の長さを1とする. その中点Cから垂線を立て, CD=1の点Dをとり, ADをDの方向へ延長してDE=1/2に点Eをとる. AEに等しくCDの延長線上にAFをとると, Fは正五角形の頂点になる.

正五角形をPostScriptで描くのは簡単だ.
描いて楽しいのは正多面体である. 高木貞治先生の「数学小景」には, 正十二面体と, 正二十面体のEuclid幾何学原本による描き方が載っている.
どちらも立方体から始める. 正十二面体では, 面を構成する正五角形の対角線を1辺とする立方体をまず描く. これが内接立方体になる. 対角線を1とすると, 辺の長さは(√5-1)/2である. これををaとする. 立方体の上のの面には, 中央に前後に長さaの線を引く. 左右の面には, 中央に上下に, 前後の面には左右にそれぞれ長さaの線を引く. 図ではこれらの線を多少太めに示した.
さて上の面の線の両端U,Vから上方へ長さa/2の線UP, VQを立てる. 右の面の線の上端から右へ長さa/2の線WRを立てる. こらP,Q,Rと元の立方体の頂点A,Bとが正五角形になる.
中央の線は各面にあるから計6本で, そのそれぞれから2枚の屋根のような正五角形が作られるから, 十二面体になる.


一方正二十面体は同じような立方体の内部に作る. これが今度は外接立方体になる. 先ほどの各面の中央の線の両端U,V,W,X,Y,Zの隣り同士を結べばよい. すると三角形の屋根が12枚の他, 立方体の頂点に対応する三角形が8枚あり, 合わせて二十面体になる.
ここからはご用とお急ぎのないお立ち会いに. 私のかような図の描き方をご披露する.
上の図で, 私は手前をx, 右手をy, 上をzと見ることにしている. そして手前を左に寄せ, 上を手前に引き, x軸方向から見た位置に各点を移して描く. 左に寄せる角度をθ, 手前に引く角度をφとすると, 画面の左右方向Xと上下方向Yについては
だから, x, y, zを変換(map)し, X, Yに移動し(moveto), または線を延す(lineto)命令をmm, mlとすると
基盤の立方体は直ぐ描けて(稜の長さの半分lは多面体ごとに決める)
でよい.
正十二面体では
とした後
正二十面体では
とした後
で描くことが出来る.
数学小景には『正十二面体と正二十面体とは, 自然界が産み能わざる結晶で, それは純然たる「脳産物」である. 』の記述がある.
この描き方は正五角形の書き方をサーチエンジンで探せばあるだろうが, 図のように底辺ABを引く. 辺の長さを1とする. その中点Cから垂線を立て, CD=1の点Dをとり, ADをDの方向へ延長してDE=1/2に点Eをとる. AEに等しくCDの延長線上にAFをとると, Fは正五角形の頂点になる.
正五角形をPostScriptで描くのは簡単だ.
/l 200 def % 辺の長さ
0 0 moveto % 左下の位置へ移動
0 72 216 {dup cos l mul exch sin l mul rlineto} for
% 0度から72度おきに216度まで
closepath stroke
描いて楽しいのは正多面体である. 高木貞治先生の「数学小景」には, 正十二面体と, 正二十面体のEuclid幾何学原本による描き方が載っている.
どちらも立方体から始める. 正十二面体では, 面を構成する正五角形の対角線を1辺とする立方体をまず描く. これが内接立方体になる. 対角線を1とすると, 辺の長さは(√5-1)/2である. これををaとする. 立方体の上のの面には, 中央に前後に長さaの線を引く. 左右の面には, 中央に上下に, 前後の面には左右にそれぞれ長さaの線を引く. 図ではこれらの線を多少太めに示した.
さて上の面の線の両端U,Vから上方へ長さa/2の線UP, VQを立てる. 右の面の線の上端から右へ長さa/2の線WRを立てる. こらP,Q,Rと元の立方体の頂点A,Bとが正五角形になる.
中央の線は各面にあるから計6本で, そのそれぞれから2枚の屋根のような正五角形が作られるから, 十二面体になる.
一方正二十面体は同じような立方体の内部に作る. これが今度は外接立方体になる. 先ほどの各面の中央の線の両端U,V,W,X,Y,Zの隣り同士を結べばよい. すると三角形の屋根が12枚の他, 立方体の頂点に対応する三角形が8枚あり, 合わせて二十面体になる.
ここからはご用とお急ぎのないお立ち会いに. 私のかような図の描き方をご披露する.
上の図で, 私は手前をx, 右手をy, 上をzと見ることにしている. そして手前を左に寄せ, 上を手前に引き, x軸方向から見た位置に各点を移して描く. 左に寄せる角度をθ, 手前に引く角度をφとすると, 画面の左右方向Xと上下方向Yについては
X=- x sin θ + y cos θ+ 300
Y=(-x cos θ - y sin θ) sin φ+ z cos φ + 400
(300と400は原点を適当に移動)
だから, x, y, zを変換(map)し, X, Yに移動し(moveto), または線を延す(lineto)命令をmm, mlとすると
/phi 15 def /theta 15 def
/map {3 dict begin /z exch def /y exch def /x exch def
x theta sin mul neg y theta cos mul add 300 add
x theta cos mul neg y theta sin mul sub phi sin mul
z phi cos mul add 400 add end} def
/mm {map moveto} def /ml {map lineto} def
基盤の立方体は直ぐ描けて(稜の長さの半分lは多面体ごとに決める)
/ln l neg def
l l ln mm l l l ml l ln l ml l ln ln ml l l ln ml ln l ln ml
ln l l ml ln ln l ml l ln l ml l l l mm ln l l ml stroke
でよい.
正十二面体では
/l 1 5 sqrt add 2 div 60 mul def
/a 5 sqrt 1 sub 2 div l mul def /an a neg def
とした後
a 0 l a add mm %P
l l l ml %A
0 a l add a ml %R
ln l l ml %B
an 0 a l add ml %Q
a 0 l a add ml stroke %P
正二十面体では
/l 1 5 sqrt add 2 div 80 mul def
/a 5 sqrt 1 sub 2 div l mul def /an a neg def
とした後
an 0 l mm %V
a 0 l ml %U
l an 0 ml %Y
l a 0 ml %Z
a 0 l ml %U
0 l a ml %W
l a 0 ml %Z
0 l a mm 0 l an ml stroke %W X
で描くことが出来る.
数学小景には『正十二面体と正二十面体とは, 自然界が産み能わざる結晶で, それは純然たる「脳産物」である. 』の記述がある.
2008年9月14日日曜日
八進法算盤
下の図は, 私が1960年代の始め頃使っていた, 八進法の算盤である.

当時の計算機はIBM7040で, これはIBM704と同様のアーキテクチャゆえ, 命令語もデータも, 1語36ビットであった. 命令語はその36ビットを左からprefix(3ビット), decrement(15ビット), tag(3ビット), address(15ビット)の部分に分けた. このaddressとdecrementがLispでいうcarとcdrの語源になっているのは周知のとおり. (car=content of address part of register, cdr=content of decrement part of register) 各部分が3の倍数のビット数なので, 命令語の表示は八進法だったのである.
従って, コンソールの前で, 八進法の計算(加減算だけだが)をすること, しばしばであった.
その時考えたのは, 市販の算盤は十進法だが, 下の1の珠を1個外せば, 八進法の算盤として使えるということだ. 早速12桁の算盤を売っていないかと探したが, 市販の算盤はすべて奇数桁であり, 12桁のものはなかった. やむを得ず13桁の算盤を買い求め, 糸鋸などで縮めたのが, 上掲の算盤である.
通常は上が5の珠, 下が1の珠だが, 八進法算盤では, 上が4の珠となる. それ以外は十進法での計算と余り違わない.
この算盤は多いに実用的であった.
引き出しにまだ残っていたので, 実物の写真も載せておく.
八進法算盤
私が小学校で習ったときは, 下の1の珠は4個であったが, 私の母は1の珠が5個の算盤を使っていた. そのずーっと前は, (中国だけかも知れないが) 上の5の珠も2個あったらしい. 1の珠5個で十進法の計算をしていたことを考えると, なにも下の珠を外さなくても, 八進法で計算出来たわけだが, 実際にやってみると改造算盤には及ばない.
余談だが, 昔は病院にいくと, 4号室とか19号室とかはなかった. 4と9は「死」と「苦」を連想するので, 使わなかったのだ. 0,1,2,3,5,6,7,8の8個の数字を使うから, これも一種の八進法である. 私の算盤で, 上の珠を5と解釈すると, この八進法になる. 私はこの八進法を通常のと区別するため, 迷信法といったことがあるが, 東京女子大学の水谷先生がこの命名に興味を持たれたらしい.
最近のアーキテクチャは, 十六進法が多いので, 八進法算盤はお蔵入りになっている. 十六進法算盤はどういう構造にすべきか, 上下それぞれ3個というのもありかも知れないが, 操作出来るだろうか. 目もくらくらしてくる.

ところで, Hewlett PackardのHP16Cが市販されてから, 八進法, 十六進法の計算はもっぱらHP16Cを利用している.
HP16C
当時の計算機はIBM7040で, これはIBM704と同様のアーキテクチャゆえ, 命令語もデータも, 1語36ビットであった. 命令語はその36ビットを左からprefix(3ビット), decrement(15ビット), tag(3ビット), address(15ビット)の部分に分けた. このaddressとdecrementがLispでいうcarとcdrの語源になっているのは周知のとおり. (car=content of address part of register, cdr=content of decrement part of register) 各部分が3の倍数のビット数なので, 命令語の表示は八進法だったのである.
従って, コンソールの前で, 八進法の計算(加減算だけだが)をすること, しばしばであった.
その時考えたのは, 市販の算盤は十進法だが, 下の1の珠を1個外せば, 八進法の算盤として使えるということだ. 早速12桁の算盤を売っていないかと探したが, 市販の算盤はすべて奇数桁であり, 12桁のものはなかった. やむを得ず13桁の算盤を買い求め, 糸鋸などで縮めたのが, 上掲の算盤である.
通常は上が5の珠, 下が1の珠だが, 八進法算盤では, 上が4の珠となる. それ以外は十進法での計算と余り違わない.
この算盤は多いに実用的であった.
引き出しにまだ残っていたので, 実物の写真も載せておく.
私が小学校で習ったときは, 下の1の珠は4個であったが, 私の母は1の珠が5個の算盤を使っていた. そのずーっと前は, (中国だけかも知れないが) 上の5の珠も2個あったらしい. 1の珠5個で十進法の計算をしていたことを考えると, なにも下の珠を外さなくても, 八進法で計算出来たわけだが, 実際にやってみると改造算盤には及ばない.
余談だが, 昔は病院にいくと, 4号室とか19号室とかはなかった. 4と9は「死」と「苦」を連想するので, 使わなかったのだ. 0,1,2,3,5,6,7,8の8個の数字を使うから, これも一種の八進法である. 私の算盤で, 上の珠を5と解釈すると, この八進法になる. 私はこの八進法を通常のと区別するため, 迷信法といったことがあるが, 東京女子大学の水谷先生がこの命名に興味を持たれたらしい.
最近のアーキテクチャは, 十六進法が多いので, 八進法算盤はお蔵入りになっている. 十六進法算盤はどういう構造にすべきか, 上下それぞれ3個というのもありかも知れないが, 操作出来るだろうか. 目もくらくらしてくる.
ところで, Hewlett PackardのHP16Cが市販されてから, 八進法, 十六進法の計算はもっぱらHP16Cを利用している.
2008年9月3日水曜日
和綴じ本
8月にSilicon Valleyに行った折, Stanford大学のDon Knuthさんの家に寄った. 私は数年前からThe Art of Computer Programming(TAOCP)の監訳をしていて, エラーを見つけてはメイルで報告し, 先方からは航空便でコメントが送られてきたりしていたが, 会うのは初めてであった
TAOCPの第4巻は, ペーパーバックの分冊(Fascicle)の形で, これまで分冊2, 3, 4, 0が刊行されている. これらの分冊は刊行前に, Pre-Fascicleとしてインターネットからダウンロード出来る. 私はPre-Fascicleを和綴じにしていたので, 今回その1冊をDonに見せた. Donは奥さんのJillが和綴じが大好きだと喜び, 階下に伝えにいった. やがてJillが和綴じの本を持って2階へ来, しばらく和綴じの話題になった.

上の図は和綴じを示す. 細い線は本の輪郭, 太い線は綴じ糸を示す. 本の方は隠線消去してある. 糸の実線は外から見える部分, 破線は本の中である. 本には綴じる側に穴を4個所開け, 図のように糸を通して綴じる. この糸の線はEuler Circuitになっている. つまり一筆で書け, 出発点に戻れる. だから1本の糸で綴じられる.
しかしトポロジーの問題ならそこまでだが, 和綴じの場合は糸が節点から外れないように通す必要がある.
和綴じは別に一筆書きの問題ではないから, 糸はそれぞれの穴の中を3回通す. つまり穴に向かって3本の糸が集まるが, どの糸も穴に入る. Eulerの件は, 線が2本増えるから, 各節点が偶点であることに変りはなく, やはり1本の糸で綴じることが出来る.
本の縦の長さをl, 綴じ目から背までの幅をm, 本の厚さをhとすると, 糸の長さは2l+8m+18hで, B5版の場合lは257ミリ, 私はmを10ミリとしているから, hを5ミリとして, 糸は(+ (* 257 2) (* 10 8) (* 5 18))=684ミリ要る. ぎりぎりでは作業がし難いから, まず1メートルくらい用意するのが常識だ.
和綴じのもう1つの技法は, 糸の端が本の中に隠れていることである. 穴のどれかの中に, 始点と終点が潜んでいる.
私流の糸の通り方を描いたのが, 下の図である. 上の図と見比べて欲しい. こういう図をPostscriptでプログラムするのは楽しい.

TAOCPの第4巻は, ペーパーバックの分冊(Fascicle)の形で, これまで分冊2, 3, 4, 0が刊行されている. これらの分冊は刊行前に, Pre-Fascicleとしてインターネットからダウンロード出来る. 私はPre-Fascicleを和綴じにしていたので, 今回その1冊をDonに見せた. Donは奥さんのJillが和綴じが大好きだと喜び, 階下に伝えにいった. やがてJillが和綴じの本を持って2階へ来, しばらく和綴じの話題になった.
上の図は和綴じを示す. 細い線は本の輪郭, 太い線は綴じ糸を示す. 本の方は隠線消去してある. 糸の実線は外から見える部分, 破線は本の中である. 本には綴じる側に穴を4個所開け, 図のように糸を通して綴じる. この糸の線はEuler Circuitになっている. つまり一筆で書け, 出発点に戻れる. だから1本の糸で綴じられる.
しかしトポロジーの問題ならそこまでだが, 和綴じの場合は糸が節点から外れないように通す必要がある.
和綴じは別に一筆書きの問題ではないから, 糸はそれぞれの穴の中を3回通す. つまり穴に向かって3本の糸が集まるが, どの糸も穴に入る. Eulerの件は, 線が2本増えるから, 各節点が偶点であることに変りはなく, やはり1本の糸で綴じることが出来る.
本の縦の長さをl, 綴じ目から背までの幅をm, 本の厚さをhとすると, 糸の長さは2l+8m+18hで, B5版の場合lは257ミリ, 私はmを10ミリとしているから, hを5ミリとして, 糸は(+ (* 257 2) (* 10 8) (* 5 18))=684ミリ要る. ぎりぎりでは作業がし難いから, まず1メートルくらい用意するのが常識だ.
和綴じのもう1つの技法は, 糸の端が本の中に隠れていることである. 穴のどれかの中に, 始点と終点が潜んでいる.
私流の糸の通り方を描いたのが, 下の図である. 上の図と見比べて欲しい. こういう図をPostscriptでプログラムするのは楽しい.
2008年8月26日火曜日
San Franciscoのケーブルカー
今回はSan Franciscoで少し時間があったので, 久しぶりにケーブルカーに乗った. 前回乗ったのは, 50年前, 最初の訪米の帰路, Los AngelesからSan Francisco経由で羽田へ向かおうとしたが, JALの機材に問題があり, 1日San Franciscoに滞在することになった. 早速ケーブルカーに乗りにいった.
その後San Franciscoは数回訪れたが, ケーブルカーに乗るような時間はなかった.
さて, 以前からケーブルカーにつき, いくつかの疑問があった. ケーブルカーは線路の下を動いているケーブルを, 車両の下に出ているグリップで掴み, 車両を動かす仕掛けである. 駅ではグリップを弱め, ブレーキを掛ければ止る. 動くときはグリップを強める.
問題はPowell通りとCalifornia通りのように, 2本の路線の交差はどうなっているか, であった. しかし案の定, 一方の線では, ケーブルを一旦放し, 交差点を過ぎてからケーブルをグリップしなおすのであった. ケーブルを放すのはPowell通りの方である.

この写真で横方向がPowellで, 左の先がMarcket通りである. このPowell線の向うの線, つまり右側通行でMarcket行きの線路が, 多少下がっているのが分かる. ケーブルカーは交差点でケーブルを放し, 少し過ぎた地点で, 車体が下がってグリップがケーブルの位置になり, そこで再びケーブルをグリップしなおすのである.
手前の線には, 交差点の直前に黄色の線が引いてある. これはグリップマン, すなわち運転手にここでケーブルをリリースせよという目印である.
坂の多いところでは, ケーブルカーは水平になった交差点内で停車し客扱いをする. Powell線は, 交差点を過ぎて, 線路が下がった辺りで停車し, 乗降させるとともに, ケーブルをグリップするようだ.
もう1点は登坂の下の話だ. 水平な交差点の下を通るケーブルは, 登坂の上から引かれると, 何もしなければ持ち上がってしまう. スキーリフトの鉄塔を見ると, ケーブルは大体は鉄塔についているプーリーの上を通るが, 谷間の鉄塔だと, プーリーの下を通っている. リフトの腕は水平に出ているから, ケーブルがプーリーの上でも下でもあまり問題はないが, San Franciscoのケーブルカーは, 真上にグリップがあるから, その辺はどうなっているか.
答えはDepression Beamという仕掛けであった.

左はケーブルカーの進行方向から見た摸式図で, 黒はグリップである. 灰色はグリップされているケーブルの断面である. 赤はDepression Beamでプーリーでオレンジ色のケーブルを押さえている. ケーブルカーが遠いときは, ケーブルはオレンジ色の位置で, 上がろうとするのをプリーが押さえている.
ケーブルカーが近づくと, ケーブルは徐々に押し下げられ, プーリーから離れる. 一方ケーブルカーのグリップが近づくにつれDepression Beamを横に押しだす. 赤の点線のような位置に移動し, グリップは無事に通過出来る.
ケーブルカーが通りすぎると, プーリーは元の位置に戻り, またケーブルも上がってきて,プーリーで押さえられる.
Depression Beamが入っていると思われる部分は, 鉄板で覆われ, 保守しやすいようになっていた.
その後San Franciscoは数回訪れたが, ケーブルカーに乗るような時間はなかった.
さて, 以前からケーブルカーにつき, いくつかの疑問があった. ケーブルカーは線路の下を動いているケーブルを, 車両の下に出ているグリップで掴み, 車両を動かす仕掛けである. 駅ではグリップを弱め, ブレーキを掛ければ止る. 動くときはグリップを強める.
問題はPowell通りとCalifornia通りのように, 2本の路線の交差はどうなっているか, であった. しかし案の定, 一方の線では, ケーブルを一旦放し, 交差点を過ぎてからケーブルをグリップしなおすのであった. ケーブルを放すのはPowell通りの方である.
この写真で横方向がPowellで, 左の先がMarcket通りである. このPowell線の向うの線, つまり右側通行でMarcket行きの線路が, 多少下がっているのが分かる. ケーブルカーは交差点でケーブルを放し, 少し過ぎた地点で, 車体が下がってグリップがケーブルの位置になり, そこで再びケーブルをグリップしなおすのである.
手前の線には, 交差点の直前に黄色の線が引いてある. これはグリップマン, すなわち運転手にここでケーブルをリリースせよという目印である.
坂の多いところでは, ケーブルカーは水平になった交差点内で停車し客扱いをする. Powell線は, 交差点を過ぎて, 線路が下がった辺りで停車し, 乗降させるとともに, ケーブルをグリップするようだ.
もう1点は登坂の下の話だ. 水平な交差点の下を通るケーブルは, 登坂の上から引かれると, 何もしなければ持ち上がってしまう. スキーリフトの鉄塔を見ると, ケーブルは大体は鉄塔についているプーリーの上を通るが, 谷間の鉄塔だと, プーリーの下を通っている. リフトの腕は水平に出ているから, ケーブルがプーリーの上でも下でもあまり問題はないが, San Franciscoのケーブルカーは, 真上にグリップがあるから, その辺はどうなっているか.
答えはDepression Beamという仕掛けであった.
左はケーブルカーの進行方向から見た摸式図で, 黒はグリップである. 灰色はグリップされているケーブルの断面である. 赤はDepression Beamでプーリーでオレンジ色のケーブルを押さえている. ケーブルカーが遠いときは, ケーブルはオレンジ色の位置で, 上がろうとするのをプリーが押さえている.
ケーブルカーが近づくと, ケーブルは徐々に押し下げられ, プーリーから離れる. 一方ケーブルカーのグリップが近づくにつれDepression Beamを横に押しだす. 赤の点線のような位置に移動し, グリップは無事に通過出来る.
ケーブルカーが通りすぎると, プーリーは元の位置に戻り, またケーブルも上がってきて,プーリーで押さえられる.
Depression Beamが入っていると思われる部分は, 鉄板で覆われ, 保守しやすいようになっていた.
2008年8月25日月曜日
Lermerの篩機械
先日のことだが, Mountain ViewにあるComputer History Museumに行ってきた. 思い込みの深い多くの計算機に対面できた. ただ残念ながらLehmerの初代の自転車のチェーンによる篩機械はドイツに出張中とかで, 見られなかった. これについて私は以前こう書いた. (bit 1997年7月号)
『「先日のことだが, ...」計算整数論者でカリフォルニア大学バークレイ校(以下UCB)教授だったDerrick Henry Lehmer(以下Dick)は昔のエピソードでもこう語り始めるのを好んだ. 私もひとつ真似をしよう.
先日のこと, Dickは集めてきた自転車のチェーンの部品でチェーンの輪を19個作った. それぞれの輪のリンク数は67までの素数だが, 13までの素数に対する輪は小さ過ぎるので64, 27, 25, 49, 22, 26とした. これをそれぞれ同軸に固定した10枚歯のスプロケットに掛け, 回転数をカウンターで数えながら軸をモーターで回転した. 輪は零の位置(または素数の倍数の位置)にピンを立てた時, カウンターが大きな整数Nになるまで軸を回転し, 停止時にどのピンも真上になければNには67以下の素因数はないわけだ.
また探すべき数が, いろいろな素数での法がいくつかという条件さえわかれば, その位置にピンを立て, ピンと接点, リレー, モーターを組合せ, 条件を満たす数が見つかった時点で回転を停止する機構も工夫した.
軸は300rpmで回転したので, 1日に432万個(=10×300×60×24)の整数を調べることができた. だが, この篩計算機を作った目的のMersenne数, 2257-1の素数性を調べるは$1070年かかるらしい. さよう, Dickがこの篩を試作したのは, 彼がUCBの学部学生であった1926年のことである. この機械の複製はボストンのコンピュータミュージアムにあるが, 展示はしていないらしい. 』
Computer History Museumは1990年代にBostonからCaliforniaへ移動している. インターネットで探すとcomputer history museumに写真は見つかった.

どういう問題を解くか. Lehmerのような整数論者は高尚な問題を解くだろうが, 簡単な例はChinese Remainder Theoremのようなものである. つまり3で割れば1余り, 5で割れば2余り, 7で割れば3余る数はなにか.
3での剰余がp, 5での剰余がq, 7での剰余がrなら70p+21q+15r mod 105が解で, 今の70+42+45=157, 157 mod 105 = 52 となる. この程度なら篩機械はいらない.
『「先日のことだが, ...」計算整数論者でカリフォルニア大学バークレイ校(以下UCB)教授だったDerrick Henry Lehmer(以下Dick)は昔のエピソードでもこう語り始めるのを好んだ. 私もひとつ真似をしよう.
先日のこと, Dickは集めてきた自転車のチェーンの部品でチェーンの輪を19個作った. それぞれの輪のリンク数は67までの素数だが, 13までの素数に対する輪は小さ過ぎるので64, 27, 25, 49, 22, 26とした. これをそれぞれ同軸に固定した10枚歯のスプロケットに掛け, 回転数をカウンターで数えながら軸をモーターで回転した. 輪は零の位置(または素数の倍数の位置)にピンを立てた時, カウンターが大きな整数Nになるまで軸を回転し, 停止時にどのピンも真上になければNには67以下の素因数はないわけだ.
また探すべき数が, いろいろな素数での法がいくつかという条件さえわかれば, その位置にピンを立て, ピンと接点, リレー, モーターを組合せ, 条件を満たす数が見つかった時点で回転を停止する機構も工夫した.
軸は300rpmで回転したので, 1日に432万個(=10×300×60×24)の整数を調べることができた. だが, この篩計算機を作った目的のMersenne数, 2257-1の素数性を調べるは$1070年かかるらしい. さよう, Dickがこの篩を試作したのは, 彼がUCBの学部学生であった1926年のことである. この機械の複製はボストンのコンピュータミュージアムにあるが, 展示はしていないらしい. 』
Computer History Museumは1990年代にBostonからCaliforniaへ移動している. インターネットで探すとcomputer history museumに写真は見つかった.
どういう問題を解くか. Lehmerのような整数論者は高尚な問題を解くだろうが, 簡単な例はChinese Remainder Theoremのようなものである. つまり3で割れば1余り, 5で割れば2余り, 7で割れば3余る数はなにか.
3での剰余がp, 5での剰余がq, 7での剰余がrなら70p+21q+15r mod 105が解で, 今の70+42+45=157, 157 mod 105 = 52 となる. この程度なら篩機械はいらない.
2008年7月24日木曜日
楕円アルゴリズム
MITのHakmemには意外な話題がたくさんある. プロッタで「円を描くアルゴリズム」もその1つだ.
下の式で, newXを使うところがなんとなく怪しげなところ. さっそくPostscriptでやってみる.
とやるとちゃんと円が描ける.

一方, yの計算に昔のxの値を使うには, Postscriptのスタックを活用し
とすると, おかしいことになる. やはり新しいxが正解である.

epsの値を徐々に大きくすると, 円ではなく, 45度傾いた楕円を描くプログラムだったことが分かる. そこで楕円の長軸と短軸の長さを計算し重ねてみた.

(100,0)から出発したときのepsに対する長軸と短軸の長さと離心率を数値計算で求めると
のようになる. 要するに「円を描くアルゴリズム」ではなく, 「楕円を描くアルゴリズム」であった.
newX=oldX-epsiron*oldY
newY=oldY+epsiron*newX
下の式で, newXを使うところがなんとなく怪しげなところ. さっそくPostscriptでやってみる.
200 200 translate
/x 100 def /y 0 def /eps 0.01 def
x y moveto
1 1 628 {pop
/x x y eps mul sub def %x=x-eps*y
/y y x eps mul add def %y=y+eps*x
x y lineto
} for stroke
とやるとちゃんと円が描ける.
一方, yの計算に昔のxの値を使うには, Postscriptのスタックを活用し
/x x y eps mul sub /y y x eps mul add def def
とすると, おかしいことになる. やはり新しいxが正解である.
epsの値を徐々に大きくすると, 円ではなく, 45度傾いた楕円を描くプログラムだったことが分かる. そこで楕円の長軸と短軸の長さを計算し重ねてみた.
200 200 translate
/x 100 def /y 0 def /eps 0.5 def
x y moveto
1 1 6.28 eps div {pop
/x x y eps mul sub def
/y y x eps mul add def
x y lineto
} for stroke
gsave
1 0 0 setrgbcolor %赤にする
45 rotate %45度傾ける
1.154700 0.894427 scale %長軸と短軸の長さにscaleする
100 0 moveto 0 0 100 0 360 arc stroke
grestore
0 0 1 setrgbcolor
-100 0 moveto 100 0 lineto
0 -100 moveto 0 100 lineto stroke
(100,0)から出発したときのepsに対する長軸と短軸の長さと離心率を数値計算で求めると
eps 長軸 短軸 離心率
0.5 115.47 89.44 0.6325
0.1 102.60 97.59 0.3086
0.01 100.25 99.75 0.0997
のようになる. 要するに「円を描くアルゴリズム」ではなく, 「楕円を描くアルゴリズム」であった.
登録:
投稿 (Atom)
