算額あれこれ

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

算額(その1787)

岐阜県不破郡垂井町宮代 南宮大社 弘化2年(1845)

http://ryugen3.sakura.ne.jp/toukou3/wasankibousya.PDF
キーワード:円2個,楕円
#Julia #SymPy #算額 #和算 #数学


第五問 交差する合同な 3 個の楕円に接するように,合同な 2 個の円を描く。楕円の短径と円の直径を知って,楕円の長径を求めよ。


楕円の長半径,短半径を \(a,\ b\)
円の半径を \(r\)
円と楕円の接点座標を \( (x_0,\ y_0)\)
とおき,以下の連立方程式を解く。

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

using SymPy
@syms a, b, r, x0,  y0
eq1 = x0^2 + (b - r - y0)^2 - r^2
eq2 = (x0 -a)^2*b^2 + y0^2*a^2 - a^2*b^2
eq3 = -b^2*(x0 - a)*(b - r - y0) - x0*(a^2*y0);

res = solve([eq1, eq2, eq3], (a, x0, y0))[4]  # 4 of 6

    (sqrt(2)*sqrt(b*(8*b^3 - 20*b^2*r + 15*b*r^2 - 3*b*sqrt(r^3*(8*b - 7*r)) - 2*r^3 + 2*r*sqrt(r^3*(8*b - 7*r)))/(4*b^4 - 8*b^3*r + 8*b^2*r^2 - 4*b*r^3 + r^4))*(4*b^2*r - 6*b*r^2 + 2*b*sqrt(r^3*(8*b - 7*r)) + 5*r^3 - r*sqrt(r^3*(8*b - 7*r)))/(8*(b^2 - 4*b*r + 4*r^2)), sqrt(2)*r*sqrt(b*(8*b^3 - 20*b^2*r + 15*b*r^2 - 3*b*sqrt(r^3*(8*b - 7*r)) - 2*r^3 + 2*r*sqrt(r^3*(8*b - 7*r)))/(4*b^4 - 8*b^3*r + 8*b^2*r^2 - 4*b*r^3 + r^4))/2, b*(4*b^2 - 8*b*r + 3*r^2 - sqrt(r^3*(8*b - 7*r)))/(2*(2*b^2 - 2*b*r + r^2)))

# a: 長半径
@show(res[1])

    res[1] = sqrt(2)*sqrt(b*(8*b^3 - 20*b^2*r + 15*b*r^2 - 3*b*sqrt(r^3*(8*b - 7*r)) - 2*r^3 + 2*r*sqrt(r^3*(8*b - 7*r)))/(4*b^4 - 8*b^3*r + 8*b^2*r^2 - 4*b*r^3 + r^4))*(4*b^2*r - 6*b*r^2 + 2*b*sqrt(r^3*(8*b - 7*r)) + 5*r^3 - r*sqrt(r^3*(8*b - 7*r)))/(8*(b^2 - 4*b*r + 4*r^2))

 \(\displaystyle \frac{\sqrt{2} \sqrt{\frac{b \left(8 b^{3} - 20 b^{2} r + 15 b r^{2} - 3 b \sqrt{r^{3} \left(8 b - 7 r\right)} - 2 r^{3} + 2 r \sqrt{r^{3} \left(8 b - 7 r\right)}\right)}{4 b^{4} - 8 b^{3} r + 8 b^{2} r^{2} - 4 b r^{3} + r^{4}}} \left(4 b^{2} r - 6 b r^{2} + 2 b \sqrt{r^{3} \left(8 b - 7 r\right)} + 5 r^{3} - r \sqrt{r^{3} \left(8 b - 7 r\right)}\right)}{8 \left(b^{2} - 4 b r + 4 r^{2}\right)}\)

円の半径 = 1, 楕円の短半径 = 3 のとき,楕円の(長半径ではなく)長径は 14.5478243546329 となる。

2*res[1](r => 1, b => 3).evalf() |> println

    14.5478243546329

術の式は,一時変数をすべて展開するとかなり長い式になる。

@syms 円径, 短径
天 = 短径 - 円径
地 = 4(天 - 円径)
人 = (地 + 14円径)*2天 - 円径^2
長径 = sqrt(8天*短径/(人 - sqrt(人^2 - 地^3*天)))*円径
@show(長径)

    長径 = 円径*sqrt(短径*(-8*円径 + 8*短径)/(-円径^2 + (-2*円径 + 2*短径)*(6*円径 + 4*短径) - sqrt(-(-8*円径 + 4*短径)^3*(-円径 + 短径) + (-円径^2 + (-2*円径 + 2*短径)*(6*円径 + 4*短径))^2)))

 \(\displaystyle 円径 \sqrt{\frac{短径 \left(- 8 円径 + 8 短径\right)}{- 円径^{2} + \left(- 2 円径 + 2 短径\right) \left(6 円径 + 4 短径\right) - \sqrt{- \left(- 8 円径 + 4 短径\right)^{3} \left(- 円径 + 短径\right) + \left(- 円径^{2} + \left(- 2 円径 + 2 短径\right) \left(6 円径 + 4 短径\right)\right)^{2}}}}\)

円径 = 1*2, 短径 = 3*2 のとき,長径は 14.5478243546329 となり,上述の値に一致する。
@SymPy では十分に簡約化できないが,実質的に同じ式であることがわかった。

長径(円径 => 2, 短径 => 6) |> display
長径(円径 => 2, 短径 => 6).evalf() |> println

 \(\displaystyle \frac{16 \sqrt{3}}{\sqrt{284 - 68 \sqrt{17}}}\)

    14.5478243546329

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

function draw(r, b, more=false)
    pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
    a = √2sqrt(b*(8b^3 - 20b^2*r + 15b*r^2 - 3b*sqrt(r^3*(8b - 7r)) - 2r^3 + 2r*sqrt(r^3*(8b - 7r)))/(4b^4 - 8b^3*r + 8b^2*r^2 - 4b*r^3 + r^4))*(4b^2*r - 6b*r^2 + 2b*sqrt(r^3*(8*b - 7*r)) + 5*r^3 - r*sqrt(r^3*(8b - 7r)))/(8(b^2 - 4b*r + 4r^2))
    x0 = √2r*sqrt(b*(8b^3 - 20b^2*r + 15b*r^2 - 3b*sqrt(r^3*(8b - 7r)) - 2r^3 + 2r*sqrt(r^3*(8b - 7r)))/(4b^4 - 8b^3*r + 8b^2*r^2 - 4b*r^3 + r^4))/2
    y0 = b*(4b^2 - 8b*r + 3r^2 - sqrt(r^3*(8b - 7r)))/(2(2b^2 - 2b*r + r^2))
    plot()
    ellipse(0, 0, a, b, color=:blue)
    ellipse(a, 0, a, b, color=:blue)
    ellipse(-a, 0, a, b, color=:blue)
    circle22(0, b - 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(a, 0, "楕円:a,b,(a,0)", :blue, :left, delta=-delta, deltax=delta)
        point(0, b, "b", :blue, :center, :bottom, delta=3delta)
        point(2a, 0, "2a", :blue, :left, :bottom, delta=delta)
        point(0, b - r, "円:r,(0,b-r)", :red, :left, delta=-9delta, deltax=6delta)
    end
end;

draw(1, 3, true)


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