裏 RjpWiki

Julia ときどき R, Python によるコンピュータプログラム,コンピュータ・サイエンス,統計学

算額(その1586)

2025年02月03日 | Julia

算額(その1586)

岡山県瀬戸内市長船町土師宮森 片山日子神社 明治6年(1873)
深川英俊,トニー・ロスマン:聖なる数学:算額,森北出版株式会社,2010年4月22日.

キーワード:直角三角形の区分法
#Julia, #SymPy, #算額, #和算, #数学

AC = 30m,BC = 40m の直角三角形状の畑がある。この畑に,幅が 2 メートルのあぜ道 DEFGHIJ を残りの面積が等しくなるように作りたい。BE, DE, HC, JC, AI, FG の長さを求めよ。

A の座標を (Ax, Ay) などとし,A ~ J までの合計 20 変数と,面積を S とおき,以下の連立方程式を解く。
いくつかの変数値は自明であるが,方程式の本数としては 7 本,変数は Dy, Ex, Fy, Hx, Iy, Jy, S の 7 個なので,過不足ない。

include("julia-source.txt")
# julia-source.txt ソース https://blog.goo.ne.jp/r-de-r/e/ad3a427b84bb416c4f5b73089ae813cf

using SymPy
@syms Ax, Bx, Cx, Dx, Ex, Fx, Gx, Hx, Ix, Jx,
      Ay, By, Cy, Dy, Ey, Fy, Gy, Hy, Iy, Jy,
      S
Ax = Ix = Jx = Cx = 40
Ay = 30
Dx = Ex
Fx = Gx = Hx
Bx = By = Ey = Hy = Cy = 0
Gy = Iy
eq1 = Hx - Ex - 2
eq2 = Iy - Jy - 2
eq3 = (30*40//2 - 2(Ix - Gx) - ((Dy - Ey) + (Fy - Hy)))/3 - S
eq4 = (Dy - Ey)/(Ex - Bx) - 3//4
eq5 = (Ay - Fy)/(Cx - Hx) - 3//4
eq6 = ((Fy - Gy)+(Ay - Iy))*(Ix - Gx)/2 - S
eq7 = (Ex - Bx)*(Dy - Ey)/2 - S;
res = solve([eq1, eq2, eq3, eq4, eq5, eq6, eq7],
        (Dy, Ex, Fy, Hx, Iy, Jy, S))[2]  # 2 of 2

    (1/6 + sqrt(9406)/6, 2/9 + 2*sqrt(9406)/9, 5/3 + sqrt(9406)/6, 20/9 + 2*sqrt(9406)/9, sqrt(9406)/24 + 107/12, sqrt(9406)/24 + 83/12, sqrt(9406)/27 + 9407/54)

このあと,該当する線分の長さは座標点から計算される。

3 区画の面積 = 177.79572351294942
BE = Ex - Bx = 21.77434107769659
DE = Dy - By = 16.330755808272443
HC = Cx - Hx = 16.22565892230341
JC = Jy - Cy = 10.95768895206811
AI = Ay - Iy = 17.04231104793189
FG = Fy - Gy = 4.873066856204332

深川は以下のように解いている。
小数点以下4桁までで示しているが本文(P.104)と解答編(P.125)で四捨五入の誤りなどがあるが,正確な値は上に示したものと同じである。

@syms t
eq = 3//8*t^2 - (38 - t)*((3t + 110)/16)
BE = t = solve(eq, t)[2].evalf()
DE = (3/4)*t
CH = x = 38 - t
JC = y = (3t +110)/16
AI = 28 - y
FG = (3/4)t + (3/4)*2 - (y + 2);

(BE, 21.7743, 21.7743) |> println
(DE, 16.331, 16.331) |> println
(CH, 16.2255, 16.2257) |> println
(JC, 10.9577, 10.9576) |> println
(AI, 17.0423, 17.0424) |> println
(FG, 4.873, 4.873125) |> println

    (21.7743410776966, 21.7743, 21.7743)
    (16.3307558082724, 16.331, 16.331)
    (16.2256589223034, 16.2255, 16.2257)
    (10.9576889520681, 10.9577, 10.9576)
    (17.0423110479319, 17.0423, 17.0424)
    (4.87306685620433, 4.873, 4.873125)

function draw(more)
    pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
    (Dy, Ex, Fy, Hx, Iy, Jy, S) = (1/6 + sqrt(9406)/6, 2/9 + 2*sqrt(9406)/9, 5/3 + sqrt(9406)/6, 20/9 + 2*sqrt(9406)/9, sqrt(9406)/24 + 107/12, sqrt(9406)/24 + 83/12, sqrt(9406)/27 + 9407/54)
    Ax = Ix = Jx = Cx = 40
    Ay = 30
    Dx = Ex
    Fx = Gx = Hx
    Bx = By = Ey = Hy = Cy = 0
    Gy = Iy
    println("3 区画の面積 = $S")
    println("BE = Ex - Bx = $(Ex - Bx)")
    println("DE = Dy - By = $(Dy - By)")
    println("HC = Cx - Hx = $(Cx - Hx)")
    println("JC = Jy - Cy = $(Jy - Cy)")
    println("AI = Ay - Iy = $(Ay - Iy)")
    println("FG = Fy - Gy = $(Fy - Gy)")
    plot([Bx, Cx, Ax, Bx], [By, Cy, Ay, By], seriestype=:shape, color=:goldenrod, fillcolor=:goldenrod, lw=0.5)
    plot!([Bx, Ex, Dx, Bx], [By, Ey, Dy, By], seriestype=:shape, color=:green, fillcolor=:green, lw=0.5)
    plot!([Hx, Cx, Jx, Hx, Hx], [Hy, Cy, Jy, Jy, Hy], seriestype=:shape, color=:green, fillcolor=:green, lw=0.5)
    plot!([Gx, Ix, Ax, Fx, Gx], [Gy, Iy, Ay, Fy, Gy], seriestype=:shape, color=:green, fillcolor=:green, lw=0.5)
    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(Ax, Ay, " A")
        point(Bx, By, "B", :green, :left, delta=-delta)
        point(Cx, Cy, " C", :green, :left, delta=-delta)
        point(Dx, Dy, " D", :green, :right, :bottom, delta=delta)
        point(Ex, Ey, "E", :green, :left, delta=-delta)
        point(Fx, Fy, "F", :green, :right, :bottom, delta=delta)
        point(Gx, Gy, "G", :green, :left, delta=-delta/2)
        point(Hx, Hy, "H", :green, :left, delta=-delta)
        point(Ix, Iy, " I")
        point(Jx, Jy, " J")
        ylims!(-5delta, Ay + 5delta)
    end
end;

draw(true)


コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 算額(その1585) | トップ | 琴平町 宗家 金毘羅饂飩 狸屋 »
最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。

Julia」カテゴリの最新記事