2017年11月14日火曜日

Mercedes Euklid

前回のこのブログでは, Mercedes Euklid Model 1の使い方の説明をしたが, 今回は演算機構の中心とでもいうべき比例梃子の話しをしたい.

この下がインターネットから拾ってきた比例梃子の原理図である. 中央に横向きに並んだ0番から9番の10本のラックレールが見える. この図では手前へ1,2,3,...,9が順に右へ移動しているが,定常状態では, 10本全部の左右が同じ位置に揃っている.





左の方, ラックの下に丸に2番と丸に5番とある斜めに描かれた板が, 比例梃子で, これも定常状態では下の端が丸に11番に位置にある.

図の上部に6個の10歯の結果レジスタの歯車があることから判るように, この図は6桁の計算機になっている. その各桁に足すべき数が, 歯車の上にある8,0,5,9,6,2で, その各桁の下の方にラックと噛んでいる歯車がある. 8ならその歯車は8番のラックに乘っている.

最左端の桁に8を足すとき, 右に見えるモーターが半回転し, それに連結した棒が右端に移動することにより, 比例梃子が11の位置から5の位置へ移動する. それに従って, それぞれのラックは, その番号の歯数だけ右へ移動する. つまり8番のラックは8単位だけ移動し, その上の歯車は8だけ回転し, その桁に8が足されるのである.

図では比例梃子が右へ移動しきった時を示すので, すべてのラックの歯が縱方向に見ると揃っているのがわかる. 左端のずれも隣とは1単位ずれている.

モーターが図の位置まで半回転して足し終わると, 右上のカップリングギアが開放され, さらにモーターが半回転し, ラックに乘る歯車が逆回転するが, 結果レジスタには影響はない.


比例梃子方式は引き算も簡単である. 足し算の時は, 比例梃子は0番のラックを中心にして回転したが, 引き算の時は, 9番のラックを中心にして回転する. モーターからの棒は, 4と5のラックの間で比例梃子に接続しているから, 今度は0番のラックが9歯移動し, n番のラックは9-nだけ移動することになり, つまり9の補数を足すことで引き算を実現している.

しかし, 補数の計算に委しい人は, 1だけ違う筈だとすぐに気付くに違いない. たしかにその通りで, mercedes euklidではその補正も組み込まれている. それにはもう1枚の図を見る必要がある.

下の図は比例梃子方式の全体図で, 横線の一番上のZ0が0番のラック, 一番下のZ9が9番のラックである. 縱線も何本がある. 中央に比例梃子がごちゃごちゃ描いてあるので分り難いが, 等間隔に縱線があるとすると, 縱の線は17本になる.




その内左の7本がAlで, 次の9本が添字なしのA, 右端の1本がArである. Aの線にはRと添えられた太い線分が見えるが, これがラックに乘る歯車である. つまり0から9の任意のラックに乗せることができ, その値だけ足すことができる.

さてAlとArにある太線が9の補数対策である. 足し算用の値数レジスタの範囲がAの9桁であるが, 値数レジスタの範囲を越えたAlの部分にも0番のラック上に歯車が用意してある. これは他のラックの上へ移動することはなく0番に固定である.

足し算の時は0のラックにあるから, これらの桁は何の影響も与えない. しかし9の補数による引き算の時は, 結果レジスタの範囲では値数レジスタの範囲を越えて繰上げを左端まで伝搬しなければならず, そのための9が並んでいるのである.

一方, Arにも0番のラックの上に太線が見える. よく見るとこれは0番のラックより上にずらせて描いてある. 実はここには0番のラックに貼り付いた特別なラックと歯車があり, 0番のラックが9歯だけ動くと, Arの軸は9/10回転ではなく, 1回転するようになっている.


その桁が1回転して繰り上がりが生じ, これが1の補正を行っている. なんとも巧妙な設計ではないか.

2017年11月9日木曜日

Mercedes Euklid

1905年にドイツで発売された, Mercedes Euklid Model 1という素敵な名前の機械式計算機があった. 自動車のメルセデスとは関係ないらしい.

タイガー計算機の修理や保守をされていた, 渡邊祐三さんの「美 機械式計算機の世界」にMercedes Euklid構造というページ(pp 68,69)があり, そこにこれは往復ラック方式であると書いていあった. 通常の説明書ではproportional leverだから比例梃子とでもいおうか. Mercedes Euklidの計算機はあまり知られていないが, 城憲三先生の「計算機械」の8,9ページにも簡單な記述がある.

なかなか面白そうな機械なので, この程そのシミュレータを作り, 感触を確かめることにした.

まずインターネットで見付たこの計算機の図である. 結構大きいものだ. これとよく似た計算機が, 東京理科大学の近代科学資料館にもあるが, それはタイガー計算機製となっている. それは実は電動化されたもので, Mercedes Euklid Model 7らしい.

この計算機(Modle 1), 巾が37cm, 奥行18cm, 高さ8cm, 重さ12Kg. 楔形の台に載っていて, 手前に傾いている. 手前の1/3くらいの上部がいわゆるキャリージで, 左右へ移動出来る.

インターネットを探すと, この計算機の シミュレータもあった. それが下だ.



上の方にOBENとあるのはoverのことで, 上から見た図である. 下のVORNEはfrontで, 正面図である. 灰色の薄い部分がキャリージに対応する. これはやってみるといちおう使えるけれども, 嬉しくないのはレジスタの数字が小さいことである. また数値の入力も面倒至極であった. というわけで自己流のシミュレータ(下図)を作った次第だ.



このシミュレータでは, 上の3/5くらいが本体, 下の2/5くらいがキャリージで, 右の方に余白があるが, そこはキャリージが動いていく場所である.

上の本体部分には, 9桁の置数レジスタMがある. 下のキャリージには, 16桁の結果レジスタP(Produktenzählwerkes)と, 8桁の回転数レジスQ(Quotientenaählwerkes)がある.

本物の計算機には, 本体側に置数レジスタに数をいれるスライダがあるが, 私のシミュレータではそういう入力法は面倒なので, 数値はキーボードから入れる.

上の本体部分の右上の円Kは, 本物の図にあるクランクハンドルのつもりである. Kと書いてある中央あたりのクリックが, ハンドルの右1回転に相当し, 加減算1回が出来る.

本体部分の左上には2個のスイッチ, ASとNCがある. ASは上に倒すとAdd Mulになり(つまりMの値がPに足され), 下に倒すとSub Divになる(Mの値がPから引かれる.) もう一方のNCのNはNormalstellung(標準状態), つまりKの1回転でQが1増え, Cは(Controlの略らしいが), Kの1回転でQが1減る.

キャリージ部分には, 左下にAEスイッチがあるが, この使用法は後述する.

このシミュレータのキャリージ下部の両端にあるLとRの矢印は, ここのクリックで, キャリージが左や右へ移動する.

Pの結果レジスタは通常の機械式計算機では, 直接数値の入力は出来ないが, Mercedes Euklidでは, 上の写真に見えるつまみ状のもので直接に入力出来る. 従って私のシミュレータでもキーボードから数値が入れられる.

M, P, Qの矢印は, それをクリックするとレジスタが零にリセット出来る. さらにMとPとでは, 矢印が黒い間はキーボードで打った数字が右から送り込まれる. MとPでは, レジスタの箱をクリックすると, 箱が黒くなり, キーボードからその桁に数字が入力できる. 負数は入力出来ない(負数は存在しない).

以下が基本的な使い方である.

加減算

加減算には置数レジスタMと結果レジスタPを使う. 例えば123+456なら, 左上のASスイッチをA(Addition)にし(クリックする度にAとSが切り替わる.) P矢印を2回クリックしてPレジスタをリセットする. (クリックが1回だと, Pが入力モードになったままである.)

次にM矢印をクリックして入力モードにし, キーボードから123を入れ, Mを再びクリックして入力モードから脱出し, Kのハンドルをクリック, 加算を1回行う.

もう1度Mに456を入れ, Kをクリックすると, 結果レジスタに和579が出来る.

ハンドルを回す度にQレジスタの内容も変化するが, いまは関係ないので無視しよう.

減算も同様だが, ASスイッチをS側にしておく. こういう計算機には負数というものはない. 引いた結果が負になると, 結果レジスタが16桁なので, 1016の補数表示になる. 例えば結果レジスタを0にしておき, 1を引くと, 結果レジスタは9999999999999999になる. 最上位まで繰下げが伝わるのは驚きである. タイガー計算機やBrunsvigaなどOdhner型の計算機では, 繰上げ, 繰下げは途中で止まってしまう.

乗除算

123を3倍したければ, 置数レジスタに123を置き, 結果レジスタをリセットし, ハンドルkを3回クリックする. 23倍したければクリックを23回やってもよいが, キャリージを右に1桁移動し, 置数レジスタが結果レジスタの10の桁に足せるようにして, 10の桁で2回足す. 乗算の積は結果レジスタに出る. 結果レジスタがPという名前なのは, (Product)だからであろう.

何回足したかわかるように, 回転数レジスタがある. キャリージがどの位置にあっても, 置数レジスタの1の位置に対応する回転数レジスタの桁で, NCスイッチがNの時は1が足され, Cの時は1が引かれる. その際, 回転数レジスタ内でも繰上げや繰下げは最上位まで正しく処理される.

従って通常の乗算の時は, ASスイッチはA, NCスイッチはNにしておく.

除算では, 披除数を結果レジスタに, 除数を置数レジスタに置き, キャリージで引く位置を調整しながら, 引き算を繰り返す. (見た目は悪いが, 結果レジスタに披除数が直接入れられるのは, 非常に便利である. 引いた回数が商になるから, NCスイッチはCにする.

披除数の最上位と除数の最上位の位置が合うようにキャリージを合わせ, 筆算でやるように, 各桁で引けなくなるまで, つまり結果レジスタ≤置数レジスタになるまで引き算を繰り返す. 商は回転数レジスタに得られる. このレジスタがQなのは, ここに商(Quotient)が出るからであろう.

短絡乗算

ある桁の乗数が8とか9とか大きい時は, 8回や9回まわすのではなく, 上の桁を1回多く足しておき, この桁では2回か1回引くことで済ませられる.

例えば256×4096なら, Mに256を置き, 3桁右シフト. 切替スイッチをAとNにして4回(4000倍を足した), 1桁左シフト, 1回(100倍を足した), 2桁左シフト, 切替スイッチをSとCにして4回まわす(4倍を引いた). この時, Qレジスタは4096, Pレジスタは1048576(=2^20)になっている.

自動除算

Mercedes Euklidは除算を容易にするために考案されたといってもいいような計算機であった. 例として1048576を144で割ることを考えよう. この除算の商は7281, 剰余は112である.

Pレジスタに1048576, Mレジスタに144を置く.

1048の下に144が來るようにキャリージを右3桁シフト.
SNにして負になるまで回転. 8回で Pレジスタは999...896576で負になり, Qレジスタは8000になる. この様子を下に示す.
Mercedes Euklidでは, 加減算の後, 結果レジスタが正から負, または負から正へ変化すると, ハンドルが固定され回転できない仕掛けyになっている. ー計算器ではベルがなるだけであったが, Mercedes Euklidではハンドル動かなくなることで,いわゆる引放し除算を実現している.



Mercedes Euklidにはさらに工夫があり, キャリージを右シフトした時に内部でスプリングを卷きあげ, 左シフトの時はラッチを外すだけで, スプリングの力で移動する. またAEスイッチをEの側にしておくと, キャリージが動くと同時にA/S, N/Cが反転する. Youtubeに除算をしている動画がある. この速さ除算が出来るのは見事というしかない. ただ白状すれば, どこでラッチを外しているか, 私にはよく判っていない.

2017年4月26日水曜日

したたり算法

この話題の前回のブログでは, 円周率を表すmixed radixの式を示し, 右の項から 正規化しながら十進の小数点以下の数字を求める話を書いた.

通常の計算ならそうするのだが, したたり算法では左から計算したい. それも 可能であって, 次のように計算が進行する.

下のtex出力の図で, 左上の式を見てほしい. 左端のvとuにすべての情報を 記憶させながら, 左側(外側)からかっこをはずす. 話の発端となった円周率の式 は, 左側の2行目のものである. 2+で始まっていたが, 外から1を掛けて標準形に してある.


最初の仕事は左かっこの外にあるvを, かっこ内の2つの項に掛けることだ. 今は 1だから左の3行目のように, vが消えた以外はなにも変らない.

次は先頭に来たuに相当する2を, 1/3の右のかっこの中にいれることである. それには この2に1/3の逆数, 3/1を掛ける. そうして出来た2×(3/1)+2をまとめて8 にする. 下から3行目のように, 1/3(8+ ... が出来て, 標準形であるが, かっこが 外側から1組減った.

また同じように1/3をかっこ内の8と2/5に掛ける. そうして出来た8/3を 2/15の逆数を掛けてかっこ内に入れる. すると右側の上の行のようになる. 後は 一々書かぬが, 同様に進むのである.

これを手でやるのは面倒なので, 以後は計算機にやってもらう. かっこ内は左からu とvと, 標準形の式にあったiの値である. 最後の項が5に相当するところ(4行目)までが 上の出力に見られる.

(8 1/3 2)
(22 2/15 3)
(160/3 2/35 4)
(122 8/315 5)
(1352/5 8/693 6)
(8818/15 16/3003 7)
(8832/7 16/6435 8)
(18782/7 128/109395 9)
(356984/63 128/230945 10)
...
これを更に進めると
(864779799556983658/40970475 67108864/450883717216034179 31)
のようになり, このuとvを掛けると3.1415926533011596になる. 小数点以下9 桁目まで合っている.

これが3.1415...なのは計算機が十進法にしてくれたからで, したたり算法では 自分で計算しなければならない. その過程が次の出力である.


最初の行は, 先程の長々とした分数のuとv, それとiから計算した残りの項 (31/63(2+...))である. u*vの整数部分を計算してみると
(floor->exact
 (*  67108864/450883717216034179
   864779799556983658/40970475)) => 3
と3になるので, 次の2行にわたる式のように, 先頭に3を括りだす. そしてかっこの中から3にvの逆数を掛けたものを引いて辻褄を合せる. かっこ 内を計算したものが最後の行である.

この最後の行のvとuと十進にしたいので10を掛けると, 整数部分に1が得られる. 3.14...の1のことだ.
(floor->exact
(* 10 67108864/450883717216034179
  2615629766097082765349437/2749482034790400)) => 1
ここでもTexで書くのは止め, 計算機にやってもらう. 次々のuとvと出力される 数である.
(2615629766097082765349437/2749482034790400
   67108864/450883717216034179 3)
(1536675519372845944725869/5498964069580800
   671088640/450883717216034179 1)
(58841914244318110336667/5498964069580800
   6710886400/450883717216034179 4)
(437921482322098289538739/109979281391616000
   67108864000/450883717216034179 1)
(136926162079932661882877/219958562783232000
   671088640000/450883717216034179 5)
(196056880918257839392441/10997928139161600000
   6710886400000/450883717216034179 9)
(60341900506756319941901/13747410173952000000
   67108864000000/450883717216034179 2)
(196925612577461046092237/549896406958080000000
   671088640000000/450883717216034179 6)
(48785647745580267174347/2199585627832320000000
   6710886400000000/450883717216034179 5)
(222531979586221607133547/109979281391616000000000
   67108864000000000/450883717216034179 3)
(8569388169424319751667/1099792813916160000000000
   671088640000000000/450883717216034179 3)
今日の計算はまずかっこを取り払い, つまりかっこの次の2を消し, この処理をi=31に なるまで進め, 今度は十進の各桁と順次に括りだすものであった. 大体は 左から右へ処理できたが, 本来のしたたり算法では, 出力できる状態に なると同時に出力するわけで, 次回はその話をしたい.

2017年4月13日木曜日

したたり算法

ことし(2017年)3月にオックスフォード大学のGibbons君が研究所のセミナーで話をしてくれることになった. 彼の話は面白いものもあるが, 難解なものも多いので, 少し昔の研究だが, Spigot Algorithmで円周率を計算する話をして貰った.

Spigot Algorithmとは, 円周率πや自然対数の底 e のような長い小数を, 頭の方から次々と出力する計算法である. これはちょうど水道の栓から水が一滴一滴したたり落ちる様子に似ているので, 水栓という意味のSpigotを使い, Spigot Algorithmという. 水栓算法というのが直訳だが, 殺風景なので, ここでは「したたり算法」といおう.

日本で電子計算機が使えるようになった1960年頃, あまり速くもなく, 記憶装置も少なかった当時の機械で, eの値を計算することが各センター間で流行した. 東大高橋研のパラメトロン計算機PC-1の記憶装置(18ビット512語)と計算速度(加算400マイクロ秒)では, eは小数点以下1000桁くらいがほどほど計算できる限界であり, eの多項式展開の460の階乗分の1くらいまで使えば1000桁の精度が得られると分ってそういう計算をしていた. まず十進1000桁に相当する値を二進で計算し, その後二進十進変換して2.7182...を出力した.

このように通常は何桁計算するかを初めに決めるのである. これに対してしたたり算法では普通には得ようとする桁を前もっては決めない. eの計算では, 長い時間かけて計算が進行し, 暫くは出力が現れないが, したたり算法ではいきなり出力が始まって見ていて楽しい. しかしそうなにもかも上手くいく筈はなく, 段々と疲れてきたが如く出力が遅くなる傾向がある.

前口上はこのくらいにして, Gibbons流の算法を何回かに分け, 少しずつ説明したい.

eの計算には e=1+1/1!+1/2!+1/3!+... を使うのが常識である. 解析概論でもこれを使ってeの値を計算してみせる(1953年版 p.75).

一方円周率には公式が山のようにあって, どれを使うか迷うが, その昔ENIACで2035桁まで計算した時はMachinの公式

π/4=4 arctan 1/5-arctan 1/239
arctan x=∑n=0(-1)nx2n+1/ (2n+1)

を使ったといわれている. (城,牧之内「計算機械」p.105.)

さて式が徐々に複雑になるので, 以後はTexで書いたものを見ていただく. Gibbonsの計算の式は下のTex出力の一番上のものである. これはeの式のように簡単には得られない. Wolframのページを見ると, その下のarctan xの式が見付かる. この式のxに1を代入すると, arctan 1 は45度つまりπ/4になる. xが1なら, x2n+1は1になり, (1+x2)n+1 は 2n+1になる.

πにするにはこの式を4倍にするわけで, それには22nを22n+2にする. 一方分母には2n+1があるので, 結局2の羃は2n+1になる. それが途中のhttp:...の行の下の式だ. このnに0, 1, 2, 3を代入して書いてみるとその下のようになり, 各項の共通の因子を前に出すと, その下の括弧の式になる.

ここでn=4の項を書くと, 一番下のようになる. 左にある分数は階乗の展開で, これをみると, 前に現れる共通因子 1/3, 2/5, 3/7は赤線で消したように消える. また青線のように分母の8, 6, 4, 2は分子の4, 3, 2, 1と右の5個の2のうちの4個とキャンセルし, 結局右辺にある4/9×2が残り, 一番上の式になった.

また次のTexの出力を見てほしい. 一番上は円周率π=3.1415...の十進法を強調して描いたものである. 1桁下る度の1/10の重みで足されることを示す.

その次は前の式で, 1桁下る度のその桁の値は常に2であることを示す. ただし重みは10ではなく, 3, 5/2, 7/3, ...と変っていく. 十進法をdecimal radixというが, 各桁で重みが変るのはmixed radixという.

mixed radixというと意外かも知れないが, 1日は24時間, 1時間は60分, 1分は60秒, 1秒は1000ミリ秒とか, 1里は36町, 1町は60間, 1間は6尺, 1尺は10寸とかなど身近になくはない.

πの場合はmixed radixではあるが, i番目の重みが(2i+1)/iと決っているのが有難く, その各桁の値が2に固定されているのが味噌である.

従ってもうπの値は分ったようなものだが, やはり十進でないと気がすまないから, mixed radixからdecimal radixへと基数変換(radix conversion)する必要がある.

上の出力で, Mixed radix to decimal conversionとある下が基数変換である. 最初はπの展開式を第5項までとったものだ. それでまずこれを10倍する. つまり 各桁の値を10倍する. それが次の行である.

十進の場合の各桁が0から9までの値しか取れないように, このmixed radixでも, 第i桁は2iまでしかとることができない. 従って下の桁から, 2iを越えていれば, 正規化する必要がある. (20)の下の方に1,9と見えるのは, 20を分母の11で除したときの商が1, 剰余が9であることを示す. つまりこの桁は正規化すると, 1が繰上がって9になるわけだ.

繰上がった1は, 分子の5を掛けて, 5として繰上がり, その桁の20と足して25になる. 次はその25を分母の9で除し, 商2, 剰余7になる. 商2に分子の4を掛け, 8を20に足し, 次の桁では28を正規化する.

これを繰り返すと, 第1桁では32を正規化し, 商10に分子1を掛けた10が繰上がり, 20と足して30になる. つまり円周率の10倍の整数部は30ということが分った.

各桁の値は剰余で置き換え, それを10倍すると, 300から始まる行のようになる.

これは最初の取った項数が少いし, 10倍と正規化も1回しかしていないので, 様子が分り難いが, 100項くらい取って, この操作を何回も繰り返したのが, 最後の数列である. この先頭がπを何回も10倍したもので, 3141592653までは正しいπの値が得られている.

今回の説明はこのくらいで.

2017年3月30日木曜日

地図のミウラ折り

ミウラ折りの地図が疊まれていく様子は一見なんとも不思議である. 今回はそれを検討した結果を書いてみたい.

下の図は1個の区画が折れ曲るところを描いたもので, 立体座標x,y,zを図のように設定する. 地図の1区画はABCDの形で, ABが前のブログの図の横方向の折り線, ADが左右に少しずつ屈折する縦方向の折り線である. 中の図で見るように∠BADをγとする. (γは鋭角である.)

上は区画が水平面(xy面)内にある場合で, 辺ABはx軸に接している. 辺ADとx軸の角をβとする. 今はβ=γである. これから辺ABをAを中心として時計回りにxz面内に回転し(ADで山折りにし), 辺ABとx軸の角をαということにすると, 今はα=0である.

辺ABを, xz面内で回転している途中が中の図である. αは50°になったところだ. 縦の折り線は山折り同士, 谷折り同士高さが揃っているから, 辺ADはxy面内を回転する. γは一定だから, βは徐々の縮小していき, 図のような形になる.

さらにBを下へ回していくと, Dはますますx軸へ接近し, αが区画の角度γに等しくなった時に, 辺ADはx軸に重なる(βが0になる). それが下の図である.

この区画以外の最初に水平面にあったどの区画も, この図のようにxz面内に収まってしまう.

αが増えるにつれ, βの減る様子は, γが一定だから, α, β, γの関係から分るわけだ.

原点に立つ2個のベクトル(a0,a1,a2)と(b0,b1,b2)のなす角θは

cosθ=(a0×b0+a1×b1+ a2×b2)/(√(a02+a12+a22) √(b02+b12+b22))

で得られる. 上の図でいえば, ABとADの作る面積を考えればよい.

AB=l, AD=sとすると,

a0=l cosα, a1=0 ,a2=l sinα, b0=0, b1= l cosβ ,b2=s sinα

だから

cos γ=(l cos α s cos β)/(l s)= cos α cos β

β = cos-1 (cos γ/cos α)

γが84°の時のαとβの関係は次のようだ.

以上は1区画であったが, 隣接の区画を追加し, 3×3の区画での動きを描いたのが次の図である. 区画の境界点に0から15まで番号をつけた. また山折り谷折りの色もつけた. 地図の周囲は黒で描いてあるが, 縦の境界は地図の中と同様に曲げてある.

上はα=0で, 縦線が屈折しているから平面と見るのは難しいが, 全体は平面である.

中と下はαが53°と83.7°(γになる直前)に対応するものである.

さらに隠面消去したのが次の図である. 境界点の番号は残してある.

私はこれで疊まれ方が理解できたが, どうであろうか. この3×3を疊む動画がhttp://www.iijlab.net/~ew/miurafig.htmlに置いてある.

2017年3月17日金曜日

クイズ

前回のこの話題のブログで, ADの長さは得られたが, 一辺が7の正三角形に外接する円に, 3辺が3, 5, 7の三角形が内接するかが気になっていた.

∠BDEが60°なので, ∠EABが120°ならいいわけだ.

余弦定理によると

cos ∠EAB=(32+52−72)/(2×3×5)=−1/2.

やはり120°であった. すっきりした.

2017年3月16日木曜日

クイズ

電車の中の広告に, 中学受験の問題らしいものがあった.

この図で, BDEは円に内接する一辺7の正三角形. その円周上にAB=CD=5, EA=BC=3となるようにAとCをとる. この時, ADの長さは何か.

中学受験をする子供にこれが解けるのかよく分らぬが, 面白そうなのでやってみた.

この図のようにBからCDと平行にBFを引き, AD上の点をFとする.

すると, ∠DEB=60° 弦BDに立つ円周角だから∠DAB=∠DEB=60°. 四辺形ABCDは等脚台形だから, ∠ADC=60°. CDとBFは平行だから, ∠AFB=60°. 従ってABFは正三角形. AF=5; BCDFは平行四辺形だからFD=3. AD=8.

小学6年生にはかなり難しいのではないだろうか. Cは何のためにあるかがヒントになるが.

2017年3月11日土曜日

地図のミウラ折り

ミウラ折りをした時の出来上がりの大きさは次のように計算出来る.

図の下寄りの横長の長方形が, 元の紙の最上段である. この下に続く横長の部分は, 山折り谷折りの繰り返しで, この裏にぴったりと隠れてしまい, この部分と一緒に折られていくから, 出来上がりの大きさには関係しない.

前回のこのブログの最初の図で, 95, 85, 92,...などと数値で長さが記入してあるのが, この図ではa, b, c,...と文字にしてある. 上下の縁や折り目には, 左から0, 1, ..., 7と番号をつける.

ダッシュが付いている番号は, 折る前の位置を示す.

左端から見ていくと, 最初の折り目1-1までの長さが上下で違うから, この折り目は傾く. その傾きをθとする.

θ=tan-1(a-b)/c

である. するとこの折り目と下の縁との角は, 左が∠R+θ, 右が∠R-θである.

次の折り目, 2'-2'は, 折り目1-1で折り返すと, 2-2の位置へ来る. この時, 下の012の角は, 2θになる. 下の2と下の1との横方向, 縦方向の差を図のようにe, fとすると, 1,2の長さをdとして,

e=d cos 2θ
f=d sin 2θ

である. 従って, 下の2の位置は, 下の0を原点とすると,

(b-e, f )

これに横方向のdを足すと3の位置が得られ, 横方向からeを引き, 縦方向にfを足すと4が得られる. 以後この作業を繰り返し, 最後は横方向にaを足す. 上の縁の座標も同様にして得られる.

まとめると

θ=tan-1(a-b)/c,
e=d cos 2θ
f=d sin 2θ

上の座標
0 0, c
1 a, c
2 a-e, c+f
3 a-e+d, c+f
4 a-2e+d, c+2f
5 a-2e+2d, c+2f
6 a-3e+2d, c+3f
7 a-3e+2d+b, c+3f
下の座標
0 0, 0
1 b, 0
2 b-e, f
3 b-e+d, f
4 b-2e+d, 2f
5 b-2e+2d, 2f
6 b-3e+2d, 3f
7 b-3e+2d+a, 3f

前回の地図の値をいれて計算すると

(define a 95) (define b 85) (define c 92)
(define d 80) (define theta (atan (/ (- a b) c)))
(define e (* d (cos (* 2 theta))))
(define f (* d (sin (* 2 theta))))
(+ a (* -3 e) (* 2 d) b) => 105.60485754320413
(+ c (* 3 f)) => 143.56468939747782
ところで近所の体育館で下のような大宮アルディージャの選手名鑑みたいなものを貰った. やや! これはミウラ折りではないか? 山折り谷折りの関係もそっくりである.

しかしこれは上の図のθが0になっている. 従って上の図の横から見た時, 2,4,6が同一点になり, ミウラ折りとは似てはいるが, ミウラ折りではない.

前回の後, もう1枚の地形図をミウラ折りにした.

今回, 山折りのところは, 裏面にも折り目を記入して, 裏から谷折りにしたが, やはり手間は増えた. もう少し能率のよい方法はないだろうか.

2017年3月9日木曜日

フィボナッチ数の話題

前回, この話題では Fn+1Fn-1-Fn2 =(-1)n を証明したが, 実はもっと簡単の単であった.

n=1の時は

1·0 -1·1=-1
つまり(-1)1 だ.

n+1の時の式は

Fn+2Fn - Fn+12

このFn+2とFn+1の一つを定義により前の2項の和に書き換える.

(Fn+1+Fn)Fn - Fn+1(Fn+Fn-1) = Fn2 - Fn+1Fn-1 = -(-1)n = (-1)n+1

2017年3月5日日曜日

地図のミウラ折り

ミウラ折りという言葉も知っていたし, 三浦さんに会ったこともあるが, 実際にミウラ折りを折ってみたのは, 最近のことだ.

この度, 国土地理院の地図をミウラ折りしてみたくて, 関連するページを探したら, こういうページ があり, これは正に国土地理院の地形図の大きさ(縦460ミリ, 横580ミリ)に基づいていた. (この種の地図の大きさは昔から殆どかわらず, 私が昭和25年頃に買った地理調査所の地図も同じである. ただこれは紙の大きさで, 地図自体の大きさは, 昔は縦が緯度10分, 横が経度15分であった.)

もとの図は見難いので, 私が書き直した図は次のようだ. (単位はミリ)

下側の図が折り線で, 赤が山折り, 青が谷折りである. 左上の青四角は, 地図の図幅名の場所である.

この図の折り方では, 私の計算では, 疊んだときの寸法が, 縦143.6ミリ, 横105.6ミリになる.

ところでミウラ折りの説明を見ると, 紙を横長に折り, それを傾けながら折り, 山折り谷折りを調整して作るとあるが, 紙を重ねて折ると正確には折れないから, 工夫が必要である.

以下私が今回使った方法を紹介しよう.

まず地図の上に, 後で消せるように鉛筆で上の図の折り線を書き込む.

つぎにこの線に沿って折るわけだが, 山折りは紙の下に木片をいれ, その角を折り線に合せて折り目を付ける. 谷折りは定規を線に合せて, 紙を上に曲げて折り目を付ける.

こうして出来たミウラ折りの地図がこれだ. 下にあるのは, 折り目をつけるのに使った木片と, その上に乗った定規である.

今回, この方法でやってみたところ, 木片の稜を使って山折りの折り目をつけるのは, 下が見えないので, 結構時間がかかった. 一方, 定規による谷折りの線を付けるのは簡単で, 地図を裏返して, 表の折り線が透過するような環境で, 裏から谷折りにするのがいいのではないかと思っている.

また最初の折り線を記入するのも, 正確にするため, ドラフタでも使いたいところである.

2017年3月2日木曜日

フィボナッチ数の話題

TAOCPのフィボナッチ数の話題(1.2.8)には Fn+1Fn-1-Fn2 =(-1)n というこれも気になる式がある.

1·0-1·1=-1
2·1-1·1=1
3·1-2·2=-1
5·2-3·3=1
8·3-5·5=-1
たしかに.

証明したくなった. 式が沢山でてくるので, Texで書いたものが下である.



式0が証明したいもの. Fnはφとそのハットを使って式1の ように書ける.

式2がそれらの定義だ.

φとφハットの積や比は, 式3と4のようだ.

さて, 式0の左辺に式1を代入したのが, 式5である.

とりあえず 1/√を忘れて, 式6のように第1項を掛ける. 第2項の積は 式7のようになる.

6から7を引くと, 式8が得られるが, 先程保留していた分母の√5が2個ずつ あったので, それで5が消え, (-1)nとなる.

2017年3月1日水曜日

フィボナッチ数の話題

ご存じフィボナッチ数の話だ.

F0=0, F1=1, Fn+2=Fn+1+Fn
と定義され, 初めの方の値は
0123456789
0112358132134

ところでTAOCPの第1巻に,
F3nは2(=F3)の倍数
F4nは3(=F4)の倍数
F5nは5(=F5)の倍数
FknはFkの倍数
と書いてあった.

たしかにF3, F6, F9は偶数だし,
F5と上の表にはないが, F10=55も5の倍数である.

その辺を読んでみると

Fn+m=FmFn+1+ Fm-1Fn

という式があり, これが味噌である.

この証明は簡単だ.

Fn+3=Fn+2+Fn+1. Fn+2にFn+1+Fnを 代入すると Fn+3=2Fn+1+Fn.
この係数の 2はF3だし, 1はF2なので, この式は Fn+3=F3Fn+1+F2Fnになる.

同様にして

Fn+4=F4Fn+1+F3Fnになる.

この4をmにすると上の式になるわけだ.

証明はこんな具合である.

Fn+m+1={Fibonacci数の定義}Fn+m+Fn+m-1. このそれぞれに上の式を代入する.

FmFn+1+Fm-1Fn
Fm-1Fn+1+Fm-2Fn
Fm+Fm-1=Fm+1だし Fm-1+Fm-2=Fmなので, 上の式が得られた.

ところでFnkがFkの倍数である証明も 簡単であった.

Fk=FkだからFkの倍数.
Fk+k=FkFk+1+ Fk-1Fkだからそれぞれの項にFkがあり, Fkの倍数.

FnkがFkの倍数とすると
Fk+nk=FnkFk+1+ Fnk-1Fkとなり, 前の項にはFnk, 後の項にはFkがあり, それぞれFkの 倍数なので, F(n+1)kもFkの倍数である.

面白い.