裏 RjpWiki

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

算額(その1414)

2024年11月21日 | Julia

算額(その1414)

八四 加須市不動岡 総願寺 明治12年(1879)
埼玉県立図書館:埼玉県史料集 第二集『埼玉の算額』,昭和44年,誠美堂印刷所,埼玉県与野市.
キーワード:円4個,正方形,斜線3本
#Julia, #SymPy, #算額, #和算

正方形の中に一つの頂点から対角線を含んで 3 本の斜線を引く。できた 4 個の区画に等円を入れる。

問題は判読不能ということであるが,算額(その1413)にも書いたように,どのような問題であるかは何通りか考えることができる。

一案として,「正方形の一辺の長さが与えられたとき,等円の直径を求める術(すべ)を述べよ。」を吟味しよう。

これは算額(その1205)と同じである。

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

using SymPy
@syms a::positive, b::positive, r::positive, y::positive
eq1 = a + b - sqrt(a^2 + b^2) - 2r
eq2 = dist2(a, 0, 0, b, r, y, r)
eq3 = dist2(a, 0, 0, a, r, y, r)
eq4 = dist2(a, 0, 0, b, r, r, r);

[eq1, eq2, eq3] を使う場合の解と [eq2, eq3, eq4] を使う場合の解では,数値にすると同じであるが,見かけの式は随分違う。

前者では r = a*(1 - sqrt(-1 + sqrt(2)))/2 であるが,
後者では r = a*(-22*sqrt(2) - 3*sqrt(-1 + sqrt(2)) + 33)/(2*(-7*sqrt(2) - 7*sqrt(2)*sqrt(-1 + sqrt(2)) + 8*sqrt(-1 + sqrt(2)) + 11)) であり,SymPy では簡約化できない。

res1 = solve([eq1, eq2, eq3], (r, y, b))[3]  # 3 of 3

    (a*(1 - sqrt(-1 + sqrt(2)))/2, -sqrt(2)*a/2 + sqrt(2)*a*sqrt(-2 + 2*sqrt(2))/4 + a*sqrt(-2 + 2*sqrt(2))/2 + a/2, a*(-20 - 2*sqrt(-2 + 2*sqrt(2)) + 3*sqrt(-1 + sqrt(2)) + 14*sqrt(2))/(-12*sqrt(-1 + sqrt(2)) - 4 + 3*sqrt(2) + 8*sqrt(2)*sqrt(-1 + sqrt(2))))

res1[1](a => 3973).evalf() |> println
res1[2](a => 3973).evalf() |> println
res1[3](a => 3973).evalf() |> println

    708.000016603060
    2263.73675775652
    1808.07201601373

res2 = solve([eq2, eq3, eq4], (r, y, b))[4]  # 4 of 4

    (a*(-22*sqrt(2) - 3*sqrt(-1 + sqrt(2)) + 33)/(2*(-7*sqrt(2) - 7*sqrt(2)*sqrt(-1 + sqrt(2)) + 8*sqrt(-1 + sqrt(2)) + 11)), a*(-3*sqrt(-1 + sqrt(2)) - sqrt(2) + sqrt(-2 + 2*sqrt(2)) + 3)/(2*(-sqrt(2) + sqrt(2)*sqrt(-1 + sqrt(2)) + 1)), a*sqrt(-1/2 + sqrt(2)/2))

res2[1](a => 3973).evalf() |> println
res2[2](a => 3973).evalf() |> println
res2[3](a => 3973).evalf() |> println

    708.000016603060
    2263.73675775652
    1808.07201601373

正方形の一辺の長さが 3973 のとき,等円の直径は 1416.0000 有奇である。

全てのパラメータは以下のとおりである。

  a = 3973;  r = 708;  y = 2263.74;  b = 1808.07

function draw(a, more)
    pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho") 
    (r, y, b) = (a*(1 - sqrt(-1 + sqrt(2)))/2, -sqrt(2)*a/2 + sqrt(2)*a*sqrt(-2 + 2*sqrt(2))/4 + a*sqrt(-2 + 2*sqrt(2))/2 + a/2, a*(-20 - 2*sqrt(-2 + 2*sqrt(2)) + 3*sqrt(-1 + sqrt(2)) + 14*sqrt(2))/(-12*sqrt(-1 + sqrt(2)) - 4 + 3*sqrt(2) + 8*sqrt(2)*sqrt(-1 + sqrt(2))))
    @printf("正方形の一辺の長さが %.9g のとき,等円の直径は %.9g である。\n", a, 2r)
    @printf("a = %g;  r = %g;  y = %g;  b = %g\n", a, r, y, b)
    plot([0, a, a, 0, 0], [0, 0, a, a, 0], color=:green, lw=0.5)
    circle(r, r, r)
    circle(r, y, r)
    circle(a - y, a - r, r)
    circle(a - r, a - r, r)
    segment(0, a, a, 0, :magenta)
    segment(0, b, a, 0, :magenta)
    segment(a - b, a, a, 0, :magenta)
    if more
        delta = (fontheight = (ylims()[2]- ylims()[1]) / 500 * 10 * 2) /3  # size[2] * fontsize * 2
        hline!([0], color=:gray80, lw=0.5)
        point(r, r, "等円:r,(r,r)", :red, :left, :center, delta=-delta)
        point(r, y, "等円:r,(r,y)", :red, :left, :center, delta=-delta)
        point(0, b, "b ", :magenta, :right, :vcenter)
        point(a, 0, "a", :green, :center, delta=-delta/2)
        plot!(xlims=(-4delta, a + 5delta), ylims=(-4delta, a + 5delta))
    end
end;

draw(3973, true)


コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 算額(その1413) | トップ | 算額(その1415) »
最新の画像もっと見る

コメントを投稿

Julia」カテゴリの最新記事