6/13 MIKUセミナー 歯車の歯について

第七章 歯車の歯について
 
本としては、1以上の整数の歯をもつ歯車Aと、歯車Bの間にいくつか歯車をかませて、速度をどうにか変えたい、ということ。
 
やりたいことは、実数を有理数の積によって近似したい、ということである。
 

つなぎ方の制約として、歯車G_nと歯車G_{n+1}は直列につなぐ。つまり、ひとつの入力に対して、ひとつの出力を持つ。
歯車の法則、というものを調べてみると、歯車の速度変換は、歯車の歯の数だけで決まるらしい。
セミナーの最中は理解が及ばなかったのだが、おそらく右図のような歯車だけなら、リンクの歯車の法則から言うと、最初と最後の歯車だけで最終的な変換が行われるが、左図のような歯車の真ん中のやつ(複合歯車という)をかませると、たぶん、角速度から考えて、外側の歯車の歯の数がg_{out}、内側の歯車の歯の数がg_{in}だとすると、速度比は\frac{g_{in}}{g_{out}}になる。
だから、最初と最後は直列つなぎ、間には複合歯車をかませることにすると、最初と最後の歯車の比を\frac{1}{\alpha}とすると
\frac{1}{\alpha}=\frac{g_1}{g_2}\frac{g_3}{g_4}\frac{g_5}{g_6}\hspace{3}\dots\hspace{3}\frac{g_{n-1}}{g_n}
を目指す。
 
本中に出ていた近似値を探すアルゴリズムは、大学入試でよくある
aとbが互いに素のとき、ax+by=1を満たす自然数(x,\hspace{3}y)の組を探せ
という問題。
プログラムするときには、誤差が0のものはabからすぐわかるので、誤差が絶対値1になるものをひとつ見つければよい。
そうしたら、ふたつの組からたくさん解を生成できる。
ax+by=1を満たす(x,\hspace{3}y)の組のなかから、\frac{1}{\alpha}に対する誤差をどれだけ小さくできるかごりごりやることもできるが、誤差の範囲をあらかじめ設定してしてもよい、というか、しないとプログラムが延々まわる。