二十六 群馬県安中市簗瀬 稲荷神社 文化11年(1814)
群馬県和算研究会:群馬の算額,上武印刷株式会社,高崎市,1987年3月31日.
キーワード:円4個,正方形,等脚台形
#Julia #SymPy #算額 #和算 #数学
等脚台形の中に正方形 1 個と等円 4 個を容れる。等円の直径が 3 寸のとき,正方形の一辺の長さはいかほどか。
等脚台形の下底,上底,高さを \(2a, 2b, h\)
等円の半径と中心座標を \(r, (x, r), (r, h - r)\)
等脚台形の斜辺上の正方形の頂点座標を \( (c, c)\)
とおき,以下の連立方程式を解く。
正方形の一辺の長さは \(\sqrt{2}c\) である。
include("julia-source.txt"); # julia-source.txt ソース
using SymPy
@syms a::positive, b::positive, c::positive, h::positive,
r::positive, x::positive
eq1 = dist2(a, 0, b, h, x, r, r)
eq2 = dist2(a, 0, b, h, r, h - r, r)
eq3 = dist2(0, 0, c, c, x, r, r)
eq4 = dist2(0, 2c, c, c, r, h - r, r)
eq5 = c/(a - c) - h/(a - b);
function H(u)
(a, b, c, h, x) = u
return [
h*(a^2*h - 2*a^2*r + 2*a*b*r - 2*a*h*x + 2*a*r*x - 2*b*r*x - h*r^2 + h*x^2), # eq1
h*(2*a*b*r - 2*a*r^2 + b^2*h - 2*b^2*r - 2*b*h*r + 2*b*r^2), # eq2
-r^2/2 - r*x + x^2/2, # eq3
2*c^2 - 2*c*h + h^2/2 - r^2, # eq4
c/(a - c) - h/(a - b), # eq5
]
end;
r = 3/2
iniv = BigFloat[36.8/2, 18.7/2, 29.1/2, 40, 12]
res = nls(H, ini=iniv)
([5.576158402821451, 2.6509904819684404, 4.397777478867205, 10.916875301294052, 3.6213203435596424], true)
√2*4.397777478867205
6.219396554912959
等円の直径が 3 寸のとき,正方形の一辺の長さは 6.219396554912959 である。
「答」では 6 寸としているが,「術」は 等円の直径の \(\sqrt{0.5} + 0.5 + \sqrt{0.75}\) 倍としており,正しく \(3(\sqrt{0.5} + 0.5 + \sqrt{0.75} = 6.219396554912959\) となる。
描画関数プログラムのソースを見る
function draw(r, more)
pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
(a, b, c, h, x) = [36.8/2, 18.7/2, 29.1/2, 36, 12]
(a, b, c, h, x) = res[1]
length = √2c
@printf("等円の直径が %g のとき,正方形の一辺の長さは %g である。\n", 2r, length)
@printf("r = %g; a = %g; b = %g; c = %g; h = %g; x = %g\n", r, a, b, c, h, x)
plot([a, b, -b, -a, a], [0, h, h, 0, 0], color=:green, lw=0.5)
plot!([0, c, 0, -c, 0], [0, c, 2c, c, 0], color=:magenta, lw=0.5)
circle2(x, r, r)
circle2(r, h - r, r)
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, 2c, "(0,2c)", :magenta, :left, :vcenter, deltax=delta)
point(c, c, "(c,c)", :magenta, :left, :vcenter, deltax=delta)
point(a, 0, "a", :green, :left, :bottom, delta=delta/2, deltax=delta/3)
point(b, h, "(b,h)", :green, :right, :bottom, delta=delta/2)
point(x, r, "等円:r,(x,r)", :red, :center, delta=-delta/2)
point(r, h - r, "等円:r,(r,h-r)", :red, :center, :bottom, delta=delta/2)
end
end;
draw(3/2, true)
以下のアイコンをクリックして応援してください