1つの抵抗をn個使って作れる抵抗値が何種類あるかを調べるプログラムを作ってみました。
以下の図のように直列は+、並列は|で表すことにします。
例えばn = 3、つまり3個のRを使うと、全部で4種類の抵抗値を作ることができます。上の図はn = 2の全通りになります。
n = 4のときは9通りですが、一つ困ったことが出てきます。(R+R)|(R+R)はRです。この値は抵抗1個でも作れます。何種類か数えるときに、n個ないと作れない抵抗値だけ数えるかどうかを、どうするかという問題です。n = 4については4個ないと作れない抵抗値は8種類で、4個なくても作れるものまで含めると9種類ということになります。とりあえず両方について数えてみることにしました。
結果です。n = 1~12の抵抗値の種類。中欄がn個より少なくても実現できる抵抗値も含んだ数。右欄はn個ないと作れない抵抗値のみを数えたものになります。
n = 1~6の全リストです。n個ないと作れない抵抗値だけです。同じ抵抗値になる別の構成もありますが、そのうちの1つだけになります。また、抵抗値の昇順に並んでいます。
gooのブログは10000文字までらしいので、結果を全て張ることはできません。
プログラムはJavaで書きました。n = 12で2分くらいです。n = 13は時間がかかりそうなので試していません。
どんなプログラムかというと、逆ポーランド記法を使って可能な式のパターンを全て生成して、式を評価することで抵抗値を求めます。今まで現れていない抵抗値だったら新たに登録する、ことを式がなくなるまで繰り返しています。
図はLTSpiceで書きました。プログラムの出力はテキストのみです。
直列と並列を入れ替えると、抵抗値は逆数になります。
一応作るだけは作ってみたんですが、本当に全種類数えているのかどうか不安なところもあります。ネタ自体はオリジナルなつもりですが、たぶん誰か過去に調べてるはずと思ってググっていません。どこかに正解があったりするんでしょうか?
以下の図のように直列は+、並列は|で表すことにします。
例えばn = 3、つまり3個のRを使うと、全部で4種類の抵抗値を作ることができます。上の図はn = 2の全通りになります。
n = 4のときは9通りですが、一つ困ったことが出てきます。(R+R)|(R+R)はRです。この値は抵抗1個でも作れます。何種類か数えるときに、n個ないと作れない抵抗値だけ数えるかどうかを、どうするかという問題です。n = 4については4個ないと作れない抵抗値は8種類で、4個なくても作れるものまで含めると9種類ということになります。とりあえず両方について数えてみることにしました。
結果です。n = 1~12の抵抗値の種類。中欄がn個より少なくても実現できる抵抗値も含んだ数。右欄はn個ないと作れない抵抗値のみを数えたものになります。
n 1 1 1 2 2 2 3 4 4 4 9 8 5 22 20 6 53 42 7 131 102 8 337 250 9 869 610 10 2213 1486 11 5691 3710 12 14517 9228
n = 1~6の全リストです。n個ないと作れない抵抗値だけです。同じ抵抗値になる別の構成もありますが、そのうちの1つだけになります。また、抵抗値の昇順に並んでいます。
n = 1 1 R 1 R = 1.000000R n = 2 1 R|R 1/2 R = 0.500000R 2 R+R 2 R = 2.000000R n = 3 1 R|R|R 1/3 R = 0.333333R 2 R|(R+R) 2/3 R = 0.666667R 3 R+(R|R) 3/2 (=1+1/2) R = 1.500000R 4 R+R+R 3 R = 3.000000R n = 4 1 R|R|R|R 1/4 R = 0.250000R 2 R|R|(R+R) 2/5 R = 0.400000R 3 R|(R+(R|R)) 3/5 R = 0.600000R 4 R|(R+R+R) 3/4 R = 0.750000R 5 R+(R|R|R) 4/3 (=1+1/3) R = 1.333333R 6 R+(R|(R+R)) 5/3 (=1+2/3) R = 1.666667R 7 R+R+(R|R) 5/2 (=2+1/2) R = 2.500000R 8 R+R+R+R 4 R = 4.000000R n = 5 1 R|R|R|R|R 1/5 R = 0.200000R 2 R|R|R|(R+R) 2/7 R = 0.285714R 3 R|R|(R+(R|R)) 3/8 R = 0.375000R 4 R|R|(R+R+R) 3/7 R = 0.428571R 5 R|(R+(R|R|R)) 4/7 R = 0.571429R 6 R|(R+(R|(R+R))) 5/8 R = 0.625000R 7 R|(R+R+(R|R)) 5/7 R = 0.714286R 8 R|(R+R+R+R) 4/5 R = 0.800000R 9 (R|R|R)+(R|R) 5/6 R = 0.833333R 10 (R+(R|R))|(R+R) 6/7 R = 0.857143R 11 (R|(R+R))+(R|R) 7/6 (=1+1/6) R = 1.166667R 12 (R+R+R)|(R+R) 6/5 (=1+1/5) R = 1.200000R 13 R+(R|R|R|R) 5/4 (=1+1/4) R = 1.250000R 14 R+(R|R|(R+R)) 7/5 (=1+2/5) R = 1.400000R 15 R+(R|(R+(R|R))) 8/5 (=1+3/5) R = 1.600000R 16 R+(R|(R+R+R)) 7/4 (=1+3/4) R = 1.750000R 17 R+R+(R|R|R) 7/3 (=2+1/3) R = 2.333333R 18 R+R+(R|(R+R)) 8/3 (=2+2/3) R = 2.666667R 19 R+R+R+(R|R) 7/2 (=3+1/2) R = 3.500000R 20 R+R+R+R+R 5 R = 5.000000R n = 6 1 R|R|R|R|R|R 1/6 R = 0.166667R 2 R|R|R|R|(R+R) 2/9 R = 0.222222R 3 R|R|R|(R+(R|R)) 3/11 R = 0.272727R 4 R|R|R|(R+R+R) 3/10 R = 0.300000R 5 R|R|(R+(R|R|R)) 4/11 R = 0.363636R 6 R|R|(R+(R|(R+R))) 5/13 R = 0.384615R 7 R|R|(R+R+(R|R)) 5/12 R = 0.416667R 8 R|R|(R+R+R+R) 4/9 R = 0.444444R 9 R|((R|R|R)+(R|R)) 5/11 R = 0.454545R 10 R|(R+(R|R))|(R+R) 6/13 R = 0.461538R 11 R|((R|(R+R))+(R|R)) 7/13 R = 0.538462R 12 R|(R+R+R)|(R+R) 6/11 R = 0.545455R 13 R|(R+(R|R|R|R)) 5/9 R = 0.555556R 14 R|(R+(R|R|(R+R))) 7/12 R = 0.583333R 15 R|(R+(R|(R+(R|R)))) 8/13 R = 0.615385R 16 R|(R+(R|(R+R+R))) 7/11 R = 0.636364R 17 R|(R+R+(R|R|R)) 7/10 R = 0.700000R 18 R|(R+R+(R|(R+R))) 8/11 R = 0.727273R 19 R|(R+R+R+(R|R)) 7/9 R = 0.777778R 20 (R|R|(R+R))+(R|R) 9/10 R = 0.900000R 21 (R+(R|(R+R)))|(R+R) 10/11 R = 0.909091R 22 (R|(R+(R|R)))+(R|R) 11/10 (=1+1/10) R = 1.100000R 23 (R+R+(R|R))|(R+R) 10/9 (=1+1/9) R = 1.111111R 24 R+(R|R|R|(R+R)) 9/7 (=1+2/7) R = 1.285714R 25 R+(R|R|(R+(R|R))) 11/8 (=1+3/8) R = 1.375000R 26 R+(R|R|(R+R+R)) 10/7 (=1+3/7) R = 1.428571R 27 R+(R|(R+(R|R|R))) 11/7 (=1+4/7) R = 1.571429R 28 R+(R|(R+(R|(R+R)))) 13/8 (=1+5/8) R = 1.625000R 29 R+(R|(R+R+(R|R))) 12/7 (=1+5/7) R = 1.714286R 30 R+(R|(R+R+R+R)) 9/5 (=1+4/5) R = 1.800000R 31 R+(R|R|R)+(R|R) 11/6 (=1+5/6) R = 1.833333R 32 R+((R+(R|R))|(R+R)) 13/7 (=1+6/7) R = 1.857143R 33 R+(R|(R+R))+(R|R) 13/6 (=2+1/6) R = 2.166667R 34 R+((R+R+R)|(R+R)) 11/5 (=2+1/5) R = 2.200000R 35 R+R+(R|R|R|R) 9/4 (=2+1/4) R = 2.250000R 36 R+R+(R|R|(R+R)) 12/5 (=2+2/5) R = 2.400000R 37 R+R+(R|(R+(R|R))) 13/5 (=2+3/5) R = 2.600000R 38 R+R+(R|(R+R+R)) 11/4 (=2+3/4) R = 2.750000R 39 R+R+R+(R|R|R) 10/3 (=3+1/3) R = 3.333333R 40 R+R+R+(R|(R+R)) 11/3 (=3+2/3) R = 3.666667R 41 R+R+R+R+(R|R) 9/2 (=4+1/2) R = 4.500000R 42 R+R+R+R+R+R 6 R = 6.000000R
gooのブログは10000文字までらしいので、結果を全て張ることはできません。
プログラムはJavaで書きました。n = 12で2分くらいです。n = 13は時間がかかりそうなので試していません。
どんなプログラムかというと、逆ポーランド記法を使って可能な式のパターンを全て生成して、式を評価することで抵抗値を求めます。今まで現れていない抵抗値だったら新たに登録する、ことを式がなくなるまで繰り返しています。
図はLTSpiceで書きました。プログラムの出力はテキストのみです。
直列と並列を入れ替えると、抵抗値は逆数になります。
一応作るだけは作ってみたんですが、本当に全種類数えているのかどうか不安なところもあります。ネタ自体はオリジナルなつもりですが、たぶん誰か過去に調べてるはずと思ってググっていません。どこかに正解があったりするんでしょうか?
> どこかに正解があったりするんでしょうか?
岡村 廸夫 著「定本 OPアンプ回路の設計」のP134に似たような話が載っています。
集合抵抗は、それぞれの抵抗の特性がそろっていることが期待されるので、同一抵抗のみで異なる抵抗(比)を作ることによって、増幅回路全体の温度特性などを良くすることができると言う話ですね。
ざっと眺めてみたところ、n=5までは、simさんの結果と一致しているようです。
それ以上のnについては記述が無い代わりに、8本入りの集合抵抗ひとつで作れる増幅回路のゲインについての議論が書いてあります。
E24系列なので飛び飛びの値しかなかったので、
2本並列で合成抵抗値を出しソートして一覧表を作っていました。(1桁違い以内から選んで)
系列にない計算値になったときは重宝しました。
当時はN-88BASICでタイピュータ
(吸い取り紙のような紙に
静電偏向のインクジェットで
一筆書き文字を書くプリンタ)
に出して表紙を付けていました。
今だったら、オープンオフィスカルクでE24系列さえ打ち込めば一瞬で表が作れますね。
情報ありがとうございます。なるほど、そんな使い道があったんですね。
本見てきました。直列と並列を入れ換えると抵抗値が逆数になることも書いてありました。
そういえばトラ技にお名前がありましたね。
今回は1種類の抵抗だけで作れる抵抗値でしたが、2種類、3種類と増やしていくと、もっとすごいことになりそうです。パズル的には、あまりおもしろくないかもしれませんが。
何のお話かと思えば、Reader's FORUMですね・・・恥ずかしいので見なかったことにしてください。
トラ技にお名前が、といえば今月号はのりたんさんの記事がありますね。
可変三端子レギュレータは、軽い負荷には向かないという。確かにデータシートのそんな隅まで読まないよなあ、と思います。
いつか私も記事の方に名前を載せたいですね。読者アンケートじゃなく。
岡村さんの本には、抵抗5本までの合成抵抗しか載っていなかったので、私も6本までの合成抵抗表を作ったことがあります。
ちなみに
11/13 Rとか39/33 Rとかも6本で作れます。
負荷が軽い(中くらい?)場合にはドロップする電圧も少ないという話もあるようです。
最近のりたんさんのお名前をいろいろな所でお見かけします。
ありゃ、抜けがありましたか。11/13と13/11(=39/33)はうちの表だと8本ないと駄目なことになっています。よろしければ回路を教えていただけないでしょうか?
・・・って、私が答え書いちゃまずいですよね。
のりたんさんのお名前、本当にいろいろなところでお目にかかりますね。
最近に限らず、昔の掲示板のログを、面白いなあ、と思いながら読んでいると、投稿者がのりたんさんだった!なんてことも。