裏 RjpWiki

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

算額(その625)

2024年01月10日 | Julia

算額(その625)

和算図形問題あれこれ
令和4年10月の問題-No.1

https://gunmawasan.web.fc2.com/kongetu-no-mondai.html

直角三角形の面積を縦線で n 等分する。甲の長さが a 寸であるとき,乙の長さを n と a で表わせ。また,n = 10,a = 419 のときの 乙の長さを求めよ。

底辺を n 個に区分する分点を w[1], w[2], ..., w[n-2], w[n-1], w[n] とする。
原点 w[0], からそれぞれの分点までを底辺とする直角三角形の高さ(分点から斜辺までの垂直距離)を h[1], h[2], ..., h[n-2], h[n-1], h[n] とする。
甲の長さは a = w[n] - w[n-1],乙の長さは w[n-1] - w[n-2] である。
(分点 w[n] までの)直角三角形全体の面積は S[n] = 底辺*高さ/2 = w[n]*h[n]/2 である。
分点 w[n-1] までの直角三角形の面積はS[n] の (n-1)/n 倍である。 S[n-1] = w[n-1]*h[n-1]/2 = S[n]*(n - 1)/n である。
分点 w[n-2] までの直角三角形の面積はS[n] の (n-2)/n 倍である。 S[n-2] = w[n-2]*h[n-2]/2 = S[n]*(n - )/n である。
この3つの直角三角形に関して以下の連立方程式を解くと,w[n], b[n], w[n-1], b[n-1], w[n-2], b[n-2] が求まる。
甲の長さは w[n] - w[n-1],乙の長さは w[n-1] - w[n-2] である。
乙の長さは甲の長さの (w[n-1] - w[n-2])/(w[n] - w[n-1]) 倍である。

以下の連立方程式では便宜上 10, 9, 8 を添え字として使っているように見えるが識別のためだけで分割数を n = 10 にしているわけではないことに注意。また,直角三角形の高さは問題を解くに当たっては不要なものである。
このやり方にしたがうと,相似比と面積比の関係などということも考えなくてよい。

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

using SymPy

@syms w8::positive, h8::positive,
     w9::positive, h9::positive,
     w10::positive, h10::positive,
     底辺::positive, 高さ::positive, n::positive
S = 底辺*高さ/2
eq1 = w10*h10/2 - S*(n - 0)/n
eq3 = w9*h9/2 - S*(n - 1)/n
eq5 = w8*h8/2 - S*(n - 2)/n
eq2 = h10/w10 - 高さ/底辺
eq4 = h9/w9 - 高さ/底辺
eq6 = h8/w8 - 高さ/底辺;

res = solve([eq1, eq2, eq3, eq4, eq5, eq6], (w10, w9, w8, h10, h9, h8))

   1-element Vector{NTuple{6, Sym}}:
    (底辺, 底辺*sqrt(n - 1)/sqrt(n), 底辺*sqrt(n - 2)/sqrt(n), 高さ, 高さ*sqrt(n - 1)/sqrt(n), 高さ*sqrt(n - 2)/sqrt(n))

甲の長さは以下のようになる。

res[1][1] - res[1][2] |> println  # w10 - w9

   底辺 - 底辺*sqrt(n - 1)/sqrt(n)

乙の長さは以下のようになる。

res[1][2] - res[1][3] |> println  # w9 - w8

   -底辺*sqrt(n - 2)/sqrt(n) + 底辺*sqrt(n - 1)/sqrt(n)

問題が「甲を与えて乙を求める」なので,「乙/甲」の倍率を求める。
簡約化する前は複雑な式に見えるが,簡約化するときれいな形になる。
f = (√(n - 1) - √(n - 2))/(√n - √(n - 1))

f = (res[1][2] - res[1][3]) / (res[1][1] - res[1][2])
f |> simplify |> println

   (-sqrt(n - 2) + sqrt(n - 1))/(sqrt(n) - sqrt(n - 1))

n = 10, 甲の長さ a = 419 のときの乙の長さ 443.00019273604335 は以下のよう求められる。

n = 10
a = 419
a*(√(n - 1) - √(n - 2))/(√n - √(n - 1))

   443.00019273604335

function draw(more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   (底辺, 高さ) = (10, 4)
   n = 10
   plot([0, 底辺, 底辺, 0], [0, 0, 高さ, 0], color=:blue, lw=0.5, showaxis=false)
   delta = (fontheight = (ylims()[2]- ylims()[1]) / 500 * 10 * 2) /3  # size[2] * fontsize * 2
   for i = 1:n
       w = 底辺*sqrt(i)/sqrt(n)
       h = w * 高さ/底辺
       segment(w, 0, w, h, :blue)
       point(w, 0, "w$i", :red, :center, delta=-3delta)
       point(w, h, "h$i", :red, :center, :bottom, delta=3delta)
   end
   if more
       delta = (fontheight = (ylims()[2]- ylims()[1]) / 500 * 10 * 2) /3  # size[2] * fontsize * 2
       # vline!([0], color=:black, lw=0.5)
       # hline!([0], color=:black, lw=0.5)
       point(0, 0, "w0", :red, :center, delta=-3delta)
   end
end;

 


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

コメントを投稿

Julia」カテゴリの最新記事