福島県田村郡三春町山中 田村大元神社 明治34年(1901)
和算の館
http://www.wasan.jp/fukusima/tamuradaigen1.html
キーワード:円6個,外円,弦
#Julia #SymPy #算額 #和算 #数学
外円の中に弦を隔てて甲円 1 個,乙円 2 個,丙円 2 個を容れる。甲円の直径が 1 寸のとき,乙円を最大にするとき,丙円の直径はいかほどか。

この問題文は不適切である。図を描いてみればわかるが,外円を大きくしていけば乙円はどんどん大きくなる。究極的には,外円の半径が無限大になれば乙円の半径は甲円の半径と等しくなる。乙円が最大値を取るということは丙円の半径も無限大である。
問題文の意図するところは,「弦の最大長は弦が半径になるとき,つまり外円の直径が甲円の直径の 2 倍のときである。そのときの乙円は『最大』なので,そのときの乙円の直径を求めよ」ということであろう。
繰り返すが,この解釈はやはり不適切なものである。
外円の半径と中心座標を \(R,\ (0,\ 0)\)
甲円の半径と中心座標を \(r_1,\ (0,\ R - r_1)\)
乙円の半径と中心座標を \(r_2,\ (x_2,\ R - 2r_1 + r_2)\)
丙円の半径と中心座標を \(r_3,\ (r_3,\ R - 2r_1 - r_3)\)
とおき,以下の連立方程式を解く。
include("julia-source.txt"); # julia-source.txt ソース
using SymPy
@syms R::positive, r1::positive, r2::positive, x2::positive, r3::positive
R = 2r1
eq1 = r3^2 + (R - 2r1 - r3)^2 - (R - r3)^2
eq2 = x2^2 + (R - 2r1 + r2)^2 - (R - r2)^2
eq3 = x2^2 + (r1 - r2)^2 - (r1 + r2)^2
res = solve([eq1, eq2, eq3], (r2, x2, r3))[1]
(r1/2, sqrt(2)*r1, 2*r1*(-1 + sqrt(2)))
# r3: 丙円の半径
ans_r3 = res[3]
@show(ans_r3)
ans_r3 = 2*r1*(-1 + sqrt(2))
\(2 r_{1} \left(-1 + \sqrt{2}\right)\)
ans_r3(r1 => 1/2).evalf()
\(0.414213562373095\)
丙円の直径は甲円の直径の \(2(\sqrt{2} - 1)\) 倍である。
甲円の直径が 1 寸のとき丙円の直径は 0.828427124746190 である。
「答」は 「八分二厘八毛(強?)」とあるので,問題の解釈は合っているようだ。
# r2: 乙円の半径
ans_r2 = res[1]
@show(ans_r2)
ans_r2 = r1/2
\(\displaystyle \frac{r_{1}}{2}\)
ans_r2(r1 => 1/2).evalf() * 2
\(0.5\)
# x2: 乙円の中心の x 座標
ans_x2=res[2]
@show(ans_x2)
ans_x2 = sqrt(2)*r1
\(\sqrt{2} r_{1}\)
ans_x2(r1 => 1/2).evalf()
\(0.707106781186548\)
描画関数プログラムのソースを見る
function draw(r1, more)
pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
R = 2r1
r3 = 2*r1*(-1 + sqrt(2))
r2 = r1/2
x2 = sqrt(2)*r1
plot()
circle(0, 0, R, :blue)
circle(0, r1, R - r1, :darkorange)
circle2(x2, r2, R - 2r1 + r2)
circle2(r3, R - 2r1 - r3, r3, :gray40)
segment(-R, 0, R, 0, :green, lw=1)
if more
delta = (fontheight = (ylims()[2]- ylims()[1]) / 500 * 10 * 2) /3 # size[2] * fontsize * 2
hline!([0], color=:gray80, lw=0.5)
vline!([0], color=:gray80, lw=0.5)
point(0, R - r1, "甲円:r1,(0,r1)", :darkorange, :center, delta=-delta)
point(x2, R - 2r1 + r2, "乙円:r2,(x2,r2)", :red, :center, delta=-delta)
point(r3, R - 2r1 - r3, "丙円:r3,(r3,-r3)", :gray40, :center, delta=-delta)
point(0, R, "R", :blue, :center, :bottom, delta=delta)
end
end;
draw(1/2, true)
以下のアイコンをクリックして応援してください