裏 RjpWiki

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

算額(その1143)

2024年07月13日 | Julia

算額(その1143)

二九 戸田市美女木 八幡社 天保4年(1833)
埼玉県立図書館:埼玉県史料集 第二集『埼玉の算額』,昭和44年,誠美堂印刷所,埼玉県与野市.
キーワード:直角三角形,正方形,繰り返し

直角三角形の中に甲,乙,丙,丁の正方形を 4 個容れる。甲と丁の正方形の一辺の長さが与えられたとき,丙の正方形の一辺の長さはいかほどか。

直角三角形の直角を挟む二辺の短い方を鈎,長い方を股とする。
甲,乙,丙,丁の正方形の一辺の長さを a, b, c, d とおき,以下の連立方程式を解く。

include("julia-source.txt")

using SymPy

@syms 鈎::positive, 股::positive,
     a::positive, b::positive, c::positive, d::positive,
     e::positive, f::positive
eq1 = a/(股 - a) - 鈎/股
eq2 = b/(股 - a - b) - 鈎/股
eq3 = c/(股 - a - b - c) - 鈎/股
eq4 = d/(股 - a - b - c - d) - 鈎/股
res4 = solve([eq1, eq2, eq3, eq4], (鈎, 股, b, c))[1]

   (a^(4/3)/d^(1/3), a^(7/3)/(a^(4/3) - a*d^(1/3)), a^(2/3)*d^(1/3), a^(1/3)*d^(2/3))

res4[1](a => 4, d => 1).evalf() |> println
res4[2](a => 4, d => 1).evalf() |> println
res4[3](a => 4, d => 1).evalf() |> println
res4[4](a => 4, d => 1).evalf() |> println

   6.34960420787280
   10.8096575356773
   2.51984209978975
   1.58740105196820

正方形が増えるとどのような規則性があるのかやってみる。

eq5 = e/(股 - a - b - c - d - e) - 鈎/股
eq6 = f/(股 - a - b - c - d - e - f) - 鈎/股

# n = 5
res5 = solve([eq1, eq2, eq3, eq4, eq5], (鈎, 股, b, c, d))[1]

   (a^(5/4)/e^(1/4), a^(9/4)/(a^(5/4) - a*e^(1/4)), a^(3/4)*e^(1/4), sqrt(a)*sqrt(e), a^(1/4)*e^(3/4))

res5[1](a => 4, e => 1).evalf() |> println
res5[2](a => 4, e => 1).evalf() |> println
res5[3](a => 4, e => 1).evalf() |> println
res5[4](a => 4, e => 1).evalf() |> println
res5[5](a => 4, e => 1).evalf() |> println

   5.65685424949238
   13.6568542494924
   2.82842712474619
   2.00000000000000
   1.41421356237310

# n = 6
res6 = solve([eq1, eq2, eq3, eq4, eq5, eq6], (鈎, 股, b, c, d, e))[1]

   (a^(6/5)/f^(1/5), a^(11/5)/(a^(6/5) - a*f^(1/5)), a^(4/5)*f^(1/5), a^(3/5)*f^(2/5), a^(2/5)*f^(3/5), a^(1/5)*f^(4/5))

res6[1](a => 4, f => 1).evalf() |> println
res6[2](a => 4, f => 1).evalf() |> println
res6[3](a => 4, f => 1).evalf() |> println
res6[4](a => 4, f => 1).evalf() |> println
res6[5](a => 4, f => 1).evalf() |> println
res6[6](a => 4, f => 1).evalf() |> println

   5.27803164309158
   16.5192518405067
   3.03143313302080
   2.29739670999407
   1.74110112659225
   1.31950791077289

正方形の数を n,最初と最後の正方形の一辺の長さを a,z とすれば,以下のようになる。
鈎 = a^(n/(n - 1))/z^(1/(n - 1))
股 = a^((2n - 1)/(n - 1)) - a*z^(1/(n - 1))
i 番目の正方形の一辺の長さは
a^((n - i)/(n - 1))*z^(i/(n - 1)), i = 1,...,n
である。

n = 6; a = 4; z = 1
println("鈎 = ", a^(n/(n - 1))/z^(1/(n - 1)))
println("股 = ", a^((2n - 1)/(n - 1))/(a^(n/(n - 1)) - a*z^(1/(n - 1))))
for i = 1:n
   println("i = $i; ", a^((n - i)/(n - 1))*z^(i/(n - 1)))
end

   鈎 = 5.278031643091577
   股 = 16.519251840506687
   i = 1; 4.0
   i = 2; 3.0314331330207964
   i = 3; 2.2973967099940698
   i = 4; 1.7411011265922482
   i = 5; 1.3195079107728942
   i = 6; 1.0

function draw(n, a, z, more=false)
    pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   鈎 = a^(n/(n - 1))/z^(1/(n - 1))
   股 = a^((2n - 1)/(n - 1))/(a^(n/(n - 1)) - a*z^(1/(n - 1)))
   plot([0, 股, 0, 0], [0, 0, 鈎, 0], color=:blue, lw=0.5)
   prev = 0
   for i = 1:n
       side = a^((n - i)/(n - 1))*z^(i/(n - 1))
       @printf("%d 個目の正方形の一辺の長さは %g\n", i, side)
       #plot!([prev, prev + loc[i], prev + loc[i]], [loc[i], loc[i], 0], color=:red, lw=0.5)
       plot!([prev, prev + side, prev + side], [side, side, 0], color=i, lw=0.5)
       prev += side
   end
   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, 鈎, " 鈎", :blue, :left, :bottom, delta=delta/2)
       point(股, 0, " 股", :blue, :left, :bottom, delta=delta/2)
   end
end;


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

コメントを投稿

Julia」カテゴリの最新記事