算額(その345)
美濃・飛騨の国の和算の歴史 -算額の問題に挑戦しよう-
http://hamaguri.sakura.ne.jp/minohidawasan.htm
岐阜県郡上市八幡町 郡上八幡神社(小野天満宮) 嘉永3年(1850)
鉤股弦に内接する円がある。鉤 + 股 = 17,(鉤^3 + 股^3 + 弦^3)/(弦 - 円の直径) = 213 のとき,弦の長さはいかほどか。
一般解を求めるために,与えられる 2 つの定数を a, b とおく。
鉤 + 股 = a
(鉤^3 + 股^3 + 円の直径^3)/(弦 - 円の直径) = b
eq3 は鉤股弦に内接する円の直径,eq4 は鉤股弦に関するピタゴラスの定理
include("julia-source.txt");
using SymPy
@syms a::positive, b::positive, 鉤::positive, 股::positive, 弦::positive, 円の直径::positive
(a, b) = (17, 213)
eq1 = 鉤 + 股 - a
eq2 = (鉤^3 + 股^3 + 円の直径^3)/(弦 - 円の直径) - b
eq3 = 鉤 + 股 - 弦 - 円の直径
eq4 = 鉤^2 + 股^2 - 弦^2
solve([eq1, eq2, eq3, eq4], (鉤, 股, 弦, 円の直径))
4-element Vector{NTuple{4, Sym}}:
(a/2 - sqrt(13*a^2 - 8*a*sqrt(3*a^2 - 2*b) - 4*b)/2, a/2 + sqrt(13*a^2 - 8*a*sqrt(3*a^2 - 2*b) - 4*b)/2, 2*a - sqrt(3*a^2 - 2*b), -a + sqrt(3*a^2 - 2*b))
(a/2 + sqrt(13*a^2 - 8*a*sqrt(3*a^2 - 2*b) - 4*b)/2, a/2 - sqrt(13*a^2 - 8*a*sqrt(3*a^2 - 2*b) - 4*b)/2, 2*a - sqrt(3*a^2 - 2*b), -a + sqrt(3*a^2 - 2*b))
(a/2 - sqrt(13*a^2 + 8*a*sqrt(3*a^2 - 2*b) - 4*b)/2, a/2 + sqrt(13*a^2 + 8*a*sqrt(3*a^2 - 2*b) - 4*b)/2, 2*a + sqrt(3*a^2 - 2*b), -a - sqrt(3*a^2 - 2*b))
(a/2 + sqrt(13*a^2 + 8*a*sqrt(3*a^2 - 2*b) - 4*b)/2, a/2 - sqrt(13*a^2 + 8*a*sqrt(3*a^2 - 2*b) - 4*b)/2, 2*a + sqrt(3*a^2 - 2*b), -a - sqrt(3*a^2 - 2*b))
鉤 < 股 なので,最初の組のものが適解。
弦は 2*a - sqrt(3*a^2 - 2*b)
a = 17, b = 213 のとき,2*a - sqrt(3*a^2 - 2*b) = 13
(a, b) = (17, 213)
a/2 - sqrt(13*a^2 - 8*a*sqrt(3*a^2 - 2*b) - 4*b)/2,
a/2 + sqrt(13*a^2 - 8*a*sqrt(3*a^2 - 2*b) - 4*b)/2,
2*a - sqrt(3*a^2 - 2*b),
-a + sqrt(3*a^2 - 2*b)
(5.0, 12.0, 13.0, 4.0)
function draw(more)
pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
(鉤, 股, 弦, 円の直径) = (5.0, 12.0, 13.0, 4.0)
@printf("鉤 = %g, 股 = %g, 弦 = %g, 円の直径 = %g\n", 鉤, 股, 弦, 円の直径)
plot([0, 股, 0, 0], [0, 0, 鉤, 0], color=:black, lw=0.5)
circle(円の直径/2, 円の直径/2, 円の直径/2, :blue)
if more
point(円の直径/2, 円の直径/2, "", :blue)
point(股, 0, " 股", :black, :left, :bottom)
point(0, 鉤, " 鉤", :black, :left, :bottom)
hline!([0], color=:black, lw=0.5)
vline!([0], color=:black, lw=0.5)
else
plot!(showaxis=false)
end
end;