算額あれこれ

算額問題をコンピュータで解きます

算額(その1701)

百 群馬県前橋市本町 八幡宮 安政6年(1859)

群馬県和算研究会:群馬の算額,上武印刷株式会社,高崎市,1987年3月31日.
キーワード:円3個,等脚台形,斜線
#Julia #SymPy #算額 #和算 #数学


等脚台形の中に,斜線 2 本を隔てて大円 1 個,小円 2 個を容れる。上頭(上底)が 1 寸,大円の直径が 2 寸のとき,下頭(下底)はいかほどか。

等脚台形の上頭,下頭,高さを \(2b,\ 2a,\ h\)
大円の半径と中心座標を \(r_1,\ (0,\ h - r_1)\)
小円の半径と中心座標を \(r_2,\ (r_2,\ r_2)\)
斜線と斜辺の交点座標を \( (c,\ d)\)
とおき,以下の連立方程式を解く。
ただし,一時には解けないので,まずは eq1, eq2, eq4, eq5 から,\(c,\ d,\ h,\ r_2\) を求める。
次いで,その解を eq3 に代入して,\(a\) を求める。

include("julia-source.txt");  # julia-source.txt ソース

using SymPy

@syms a, b, c, d, h, r1, r2
eq1 = d/(a - c) - h/(a - b)
eq2 = dist2(-a, 0, c, d, r2, r2, r2)
eq3 = dist2(-a, 0, c, d, 0, h - r1, r1)
eq4 = dist2(a, 0, b, h, r2, r2, r2)
eq5 = dist2(a, 0, b, h, 0, h - r1, r1);
# res = solve([eq1, eq2, eq3, eq4, eq5], (c, d, h, r2, a))

res = solve([eq1, eq2, eq4, eq5], (c, d, h, r2))[2]  # 2 of 3

    (a*b*(b + r1)/(-b^2 + 2*b*r1 + r1^2), 2*a*b*r1*(2*b + r1)/(-b^3 + b^2*r1 + 3*b*r1^2 + r1^3), 2*b*r1*(a - b)/(-b^2 + r1^2), a*b/(b + r1))

eq13 = eq3(c => res[1], d => res[2], h => res[3], r2 => res[4]) |> factor

    \(\displaystyle - \frac{8 a^{2} b^{2} r_{1}^{2} \left(a b + a r_{1} - 2 b r_{1}\right) \left(- 2 a b^{2} - b^{2} r_{1} + 2 b r_{1}^{2} + r_{1}^{3}\right)}{\left(- b + r_{1}\right)^{2} \left(b + r_{1}\right) \left(- b^{2} + 2 b r_{1} + r_{1}^{2}\right)^{2}}\)

res2 = solve(eq13, a)

    \(\displaystyle \left[\begin{smallmatrix}\displaystyle 0\\\displaystyle \frac{2 b r_{1}}{b + r_{1}}\\\displaystyle - \frac{r_{1}}{2} + \frac{r_{1}^{2}}{b} + \frac{r_{1}^{3}}{2 b^{2}}\end{smallmatrix}\right] \)

# a
res2[3] |> together |> display
res2[3] |> together |> println

    \(\displaystyle \frac{r_{1} \left(- b^{2} + 2 b r_{1} + r_{1}^{2}\right)}{2 b^{2}}\)

    r1*(-b^2 + 2*b*r1 + r1^2)/(2*b^2)

解は面白い形をしている。「大円の半径の二乗を(上頭/2)で割ったものと,大円の半径の三乗を 2(上頭/2)^2 で割ったものを加え,大円の半径の半分を引く」
通分するとあまり面白くない。

いずれにせよ,上頭が 1,大円の直径が 2 のとき,(下頭/2) は 3.5 である。

res2[3](b => 1/2, r1 => 2/2) |> println

    3.50000000000000

なお,この場合に小円の直径は 7/3 ≒ 2.33333 で,「大円は小円より小さい!!」。

描画関数プログラムのソースを見る

function draw(b, r1, more)
    pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
    a = r1*(-b^2 + 2*b*r1 + r1^2)/(2*b^2)
    (c, d, h, r2) = (a*b*(b + r1)/(-b^2 + 2*b*r1 + r1^2), 2*a*b*r1*(2*b + r1)/(-b^3 + b^2*r1 + 3*b*r1^2 + r1^3), 2*b*r1*(a - b)/(-b^2 + r1^2), a*b/(b + r1))
    @printf("上頭が %g, 大円の直径が %g のとき,下頭は %g である。なお小円の直径は %g である。\n", 2b, 2r1, 2a, 2r2)
    plot([a, b, -b, -a, a], [0, h, h, 0, 0], color=:green, lw=0.5)
    circle(0, h - r1, r1)
    circle2(r2, r2, r2, :blue)
    segment(-a, 0, c, d, :orange)
    segment(a, 0, -c, d, :orange)
    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, h - r1, "大円:r1,(0,h-r1)", :red, :center, delta=-delta)
        point(r2, r2, "小円:r2,(r2,r2)", :blue, :center, delta=-delta)
        point(c, d, " (c,d)", :orange, :left, :vcenter)
        point(b, h, " (b,h)", :green, :left, :vcenter)
        point(a, 0, "a", :green, :left, :bottom, delta=delta/2)
    end
end;

draw(1/2, 2/2, true)


以下のアイコンをクリックして応援してください