問題:
1Ω の抵抗 10個を使い、合成抵抗が黄金比 1.6180339887..Ωにもっとも近づく場合の値を、少数第10位まで求めよ。
aΩ と bΩ の抵抗をつなげる場合、直列つなぎにすれば合成抵抗はたんに a + b Ω になりますが、並列つなぎの場合はそれらの逆数の和の逆数、つまり
になるのが重要なところです。抵抗10個できわめて複雑な組み合わせをつくることができます。
Ruby で求めてみました。
require 'set' def product(a, b) @ar[a].each do |i| @ar[b].each do |j| @ar[a + b] << i + j @ar[a + b] << (i * j) / (i + j) end end end @ar = Array.new(11) {Set.new} @ar[1] << Rational(1, 1) for i in 2..10 for j in 1..(i / 2) product(j, i - j) end end ans = 10 @ar[10].each do |x| ans = x if (x - 1.6180339887).abs < (ans - 1.6180339887).abs end puts "%.10f" % ans.to_f puts ans
答えは 1.6181818182 となります。分数だと 89/55 ですね。
ちなみに、模範解答よりもずっとシンプルなコードだと思います。
さて、これがどのような回路なのかですが、それも求めるとなるとさらに手を入れないといけないですね。だいぶ複雑になりそうです。
プログラマ脳を鍛える数学パズル シンプルで高速なコードが書けるようになる70問
- 作者: 増井敏克
- 出版社/メーカー: 翔泳社
- 発売日: 2015/10/16
- メディア: Kindle版
- この商品を含むブログ (7件) を見る