機械のギア比の計算
元日の朝(元旦?)、当ホームページの掲示板に、東京在住の方から、次のような書き込み
があった。
4つのギアの歯の枚数を、a、b、c、d とする。 任意のギア比 m (0<m<1)
に対して、
となる自然数 a、b、c、d の値を、数表を用いず、計算で求めたい。どうしたらよいか?
但し、a、b、c、d は、20以上120以下の値で、m との誤差は、0.0001以下としたい。
聞く所によると、数表は小数点以下6桁までの数値(m)に対応した4つの整数(a、b、c、d)
が並んだもので、数十ページあり、B5サイズ位の単行本ほどあるそうだ。今までは、この数
表を使っていたが、これを計算でできないものかと、ずっと考えられていたとのことである。
この問題に対して、私は、次のように考えた。 問題を整理して、
1.0と1の間の任意の数 m を与える。
2.m−0.0001<b/a<m+0.0001となる自然数 a、b を求める。
ただし、a、b は400以上14400以下の数で、それぞれ
P×Q (但し、P、Q は、20以上120以下の自然数)
の形に素因数分解されるものとする。
数学的な計算公式が思い浮かばなかったので、表計算ソフト Excel の助けを借りること
にした。
以下で、例えば、m=0.4329 に対する計算方法を示す。他の m の値に対しても同様
である。
各セルには、関数が組み込まれている。例えば、3201行については、次のような関数が
定義されている。
B3201=FA(A3201,2) ・・・・・VBAにより作成された関数(下記参照)
D3201=A3201*$D$1−INT(A3201*$D$1)
E3201=IF(D3201<0.01,INT(A3201*$D$1),””)
F3201=IF(E3201=””,””,FA(E3201,2))
G3201=IF(E3201=””,””,E3201/A3201−$D$1)
また、条件にあっているかどうかを判断するために、D列、G列には、条件付き書式が、次の
ように設定されている。
D列では、a の値の order が、102以上なので、0.01以下の場合に赤字を返す。
G列では、問題の条件通り、−0.0001以上で0.0001以下の場合に赤字を返す。
(注) 各自然数に対して、その素因数分解(1つの数を、素数の積で表すこと)を返す関数
FAは、VBAを用いて次のように記述される。
Function FA(n,d)
If n<d*d Then
FA=n
Else
If n−Int(n/d)*d=0 Then
FA=d & ”X” & FA(n/d,d)
Else
If d=2 Then
d=3
Else
If d=3 Then
d=5
Else
If d Mod 6 =1 Then d=d+4 Else If d Mod
6 =5 Then d=d+2
End If
End If
FA=FA(n,d)
End If
End If
End Function
Excel を起動し、[ツール]−[マクロ]−[Visual Basic Editor] とクリックして
Editor を起動し、[挿入]−[標準モジュール] を選択して、上記を記述すればよい。
後は、Excelの任意のセルに、例えば、 =FA(8614,2) と打ち込むと、瞬時に、
2×59×73 という、8614 の素因数分解が得られる。
以上の方法で、m=0.4329 の場合に適する自然数は、8組発見された。
aの値 | bの値 | 誤差 b/a−m の絶対値 | |
1 | 2×13×47 | 23×23 | 0.00000310966 |
2 | 24×5×19 | 2×7×47 | 0.00000526316 |
3 | 22×13×47 | 2×232 | 0.00000310966 |
4 | 59×61 | 2×19×41 | 0.00000197278 |
5 | 52×132 | 31×59 | 0.00000059172 |
6 | 2×59×73 | 3×11×113 | 0.00000006966 |
7 | 23×3×13×31 | 53×79 | 0.00000090985 |
8 | 24×54 | 32×13×37 | 0 |
上の表によれば、題意を満たす4つの自然数の組 (a,b,c,d) として、例えば、次のよう
なものが考えられる。
質問者の方に伺うところによれば、m に要求されている誤差の範囲を考えれば、どうして
も4枚の組合せでないと、大抵の場合うまくいかないとのことである。
しかしながら、上の計算方法でも分かるように、基本的には、素因数分解可能な2つの自
然数について、まず精査し、その中で、いろいろな歯車の組合せを考えた方が考えやすい
のではないかと思う。
以上の計算を見ると、多くの方は、「数表を使った方がはやいのでは?」と多分思われる
だろう。それが、数表そのものが持つ価値だと私は思うが、その数表に載っている数の組
を独自に発見することも、数表を使いこなす以上に大切なことと私は考える。
今回上に述べたことが、質問者の意図を100%理解しきって述べているとは、到底考え
られない。このページを見て、「こう考えたらいいのでは?」という方が現れることを期待す
るのみである。