Sim's blog

電子工作はじめてみました

1つの抵抗をn個使って作れる抵抗値

2010-01-12 05:55:12 | 電子工作
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      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で書きました。プログラムの出力はテキストのみです。

直列と並列を入れ替えると、抵抗値は逆数になります。

一応作るだけは作ってみたんですが、本当に全種類数えているのかどうか不安なところもあります。ネタ自体はオリジナルなつもりですが、たぶん誰か過去に調べてるはずと思ってググっていません。どこかに正解があったりするんでしょうか?

最新の画像もっと見る

18 コメント

コメント日が  古い順  |   新しい順
集合抵抗で作れる抵抗値 (gomisai)
2010-01-12 06:43:10
おはようございます。

> どこかに正解があったりするんでしょうか?
岡村 廸夫 著「定本 OPアンプ回路の設計」のP134に似たような話が載っています。
集合抵抗は、それぞれの抵抗の特性がそろっていることが期待されるので、同一抵抗のみで異なる抵抗(比)を作ることによって、増幅回路全体の温度特性などを良くすることができると言う話ですね。

ざっと眺めてみたところ、n=5までは、simさんの結果と一致しているようです。
それ以上のnについては記述が無い代わりに、8本入りの集合抵抗ひとつで作れる増幅回路のゲインについての議論が書いてあります。
返信する
2本の抵抗 (ノンノ)
2010-01-12 13:55:07
以前は1%金属皮膜を使っていました。

E24系列なので飛び飛びの値しかなかったので、
2本並列で合成抵抗値を出しソートして一覧表を作っていました。(1桁違い以内から選んで)
系列にない計算値になったときは重宝しました。

当時はN-88BASICでタイピュータ
(吸い取り紙のような紙に
静電偏向のインクジェットで
一筆書き文字を書くプリンタ)
に出して表紙を付けていました。

今だったら、オープンオフィスカルクでE24系列さえ打ち込めば一瞬で表が作れますね。
返信する
re:集合抵抗で作れる抵抗値 (Sim)
2010-01-13 22:33:22
こんちには、gomisaiさん
情報ありがとうございます。なるほど、そんな使い道があったんですね。
本見てきました。直列と並列を入れ換えると抵抗値が逆数になることも書いてありました。

そういえばトラ技にお名前がありましたね。
返信する
re:2本の抵抗 (Sim)
2010-01-13 22:35:08
こんにちは、ノンノさん
今回は1種類の抵抗だけで作れる抵抗値でしたが、2種類、3種類と増やしていくと、もっとすごいことになりそうです。パズル的には、あまりおもしろくないかもしれませんが。
返信する
お名前がありましたねといえば・・・ (gomisai)
2010-01-15 21:16:34
> そういえばトラ技にお名前がありましたね。
何のお話かと思えば、Reader's FORUMですね・・・恥ずかしいので見なかったことにしてください。

トラ技にお名前が、といえば今月号はのりたんさんの記事がありますね。
可変三端子レギュレータは、軽い負荷には向かないという。確かにデータシートのそんな隅まで読まないよなあ、と思います。

いつか私も記事の方に名前を載せたいですね。読者アンケートじゃなく。
返信する
6本の抵抗で・・・ (シンボル)
2010-01-16 20:00:33
こんにちは、

岡村さんの本には、抵抗5本までの合成抵抗しか載っていなかったので、私も6本までの合成抵抗表を作ったことがあります。

ちなみに
11/13 Rとか39/33 Rとかも6本で作れます。
返信する
re:お名前がありましたねといえば・・・ (Sim)
2010-01-18 20:48:57
こんにちは、gomisaiさん
負荷が軽い(中くらい?)場合にはドロップする電圧も少ないという話もあるようです。
最近のりたんさんのお名前をいろいろな所でお見かけします。
返信する
re:6本の抵抗で・・・ (Sim)
2010-01-18 20:50:18
こんにちは、シンボルさん
ありゃ、抜けがありましたか。11/13と13/11(=39/33)はうちの表だと8本ないと駄目なことになっています。よろしければ回路を教えていただけないでしょうか?
返信する
Unknown (gomisai)
2010-01-18 21:11:29
11/13と13/11の方法見つけました。
・・・って、私が答え書いちゃまずいですよね。
返信する
Unknown (gomisai)
2010-01-18 21:16:03
リロードしない間にレスがついていたことに気がつきませんでした。

のりたんさんのお名前、本当にいろいろなところでお目にかかりますね。
最近に限らず、昔の掲示板のログを、面白いなあ、と思いながら読んでいると、投稿者がのりたんさんだった!なんてことも。
返信する

コメントを投稿