山形県鶴岡市羽黒町 出羽三山神社(羽黒山神社) 文政6年(1823)
東北大学総合知デジタルアーカイブ
出羽羽黒山算額(第10問)
https://touda.tohoku.ac.jp/portal/item/10010000022927
キーワード:円5個,直線上
#Julia, #SymPy, #算額, #和算
直線上に 5 個の円が載っている。直線から戊円のてっぺんまでの高さが与えられたとき,戊円の直径はいかほどか。
図形としては「算額(その0394)」と同じであるが,結果ははるかに「面白い」。

甲円の半径と中心座標を \(r_1,\ (x_1,\ r_1)\)
乙円の半径と中心座標を \(r_2,\ (0,\ r_2)\)
丙円の半径と中心座標を \(r_3,\ (x_3,\ r_3)\)
丁円の半径と中心座標を \(r_4,\ (x_4,\ r_4)\)
戊円の半径と中心座標を \(r_5,\ (x_5,\ y_5)\)
高さを \(h = y_5 + r_5\)
とおき,以下の連立方程式の数値解を求める。
include("julia-source.txt"); # julia-source.txt ソース
function driver(h)
function H(u)
function parameters()
x1 = 2sqrt(r1*r2)
x4 = 2sqrt(r2*r4)
x3 = x4 + 2sqrt(r4*r3)
y5 = h - r5
# 算法助術公式47
eq1 = (r3 + r4)*h - (2r3*r4 + 2sqrt(2r3*r4*r5*h))
eq2 = x1 - (x4 + 2sqrt(r4*r3) + 2sqrt(r3*r1))
eq3 = (x1 - x5)^2 + (r1 - y5)^2 - (r1 + r5)^2
eq4 = x5^2 + (r2 - y5)^2 - (r2 + r5)^2
eq5 = (x5 - x4)^2 + (y5 - r4)^2 - (r4 + r5)^2
eq6 = (x5 - x3)^2 + (y5 - r3)^2 - (r3 + r5)^2
return [eq1, eq2, eq3, eq4, eq5, eq6]
end;
(r1, r2, r3, r4, r5, x5) = u
return parameters()
end;
iniv = BigFloat[1.77, 1.65, 0.29, 0.29, 0.25, 1.67].*h
res = nls(H, ini=iniv)
res[2] || println("収束していない")
return res[1]
end;
h = 1pi
(r1, r2, r3, r4, r5, x5) = driver(h)
(r5, h, r5/h)
(0.7853981633974483, 3.141592653589793, 0.25)
高さとしてどんな値を与えても,戊円の直径は正確に,高さの 1/2 になる。
描画関数プログラムのソースを見る
function draw(h, more=false)
pyplot(size=(500, 500), grid=false, aspectratio=1, showaxis=false, label="", fontfamily="IPAMincho")
(r1, r2, r3, r4, r5, x5) = driver(h)
println(2r5)
@printf("戊円の直径 %.15g は,高さ %.15g の %.15g 倍である。\n", 2r5, h, 2r5/h)
x1 = 2sqrt(r1*r2)
x3 = 2sqrt(r2*r4) + 2sqrt(r4*r3)
x4 = 2sqrt(r2*r4)
y5 = h - r5
plot()
circle(x1, r1, r1)
circle(0, r2, r2, :blue)
circle(x3, r3, r3, :magenta)
circle(x4, r4, r4, :orange)
circle(x5, y5, r5, :green)
if more
delta = (fontheight = (ylims()[2]- ylims()[1]) / 500 * 10 * 2) /3 # size[2] * fontsize * 2
hline!([0], color=:black, lw=0.5)
vline!([0], color=:gray80, lw=0.5)
point(x1, r1, "甲円:r1,(x1,r1)", :red, :center, delta=-delta)
point(0, r2, "乙円:r2,(0,r2)", :blue, :center, delta=-delta)
point(x3, r3, "丙円:r3,(x3,r3)", :magenta, :left, delta=-7delta)
point(x4, r4, "丁円:r4,(x4,r4)", :orange, :right, delta=-7delta)
point(x5, y5, "戊円:r5,(x5,y5)", :green, :left, :bottom, deltax=6delta)
dimension_line(x5, 0, x5, h, "高さ", :black, :left, delta=-delta, deltax=2delta, length=4delta)
end
end;
draw(pi, true)
1.5707963267948966
戊円の直径 1.5707963267949 は,高さ 3.14159265358979 の 0.5 倍である。
以下のアイコンをクリックして応援してください