裏 RjpWiki

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

算額(その619)

2024年01月08日 | Julia

算額(その619)

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

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

正方形の一辺の長さを a とする。図のように,正方形内に 3 本の線を引く。

甲,乙,丙の三角形の面積が 111 平方寸,68 平方寸, 8 平方寸のとき,正方形の一辺の長さはいかほどか。

周りにある直角三角形の面積は計算できる。中央の三角形の面積を x とおき,以下の連立方程式を解けばよい。

include("julia-source.txt");

using SymPy

@syms a::positive, b::positive, c::positive, x::positive;

eq1 = a*b/2 - 68
eq2 = a*c/2 - 111
eq3 = (a - b)*(a - c)/2 - 8
eq4 = 111 + 8 + 68 + x - a^2
res = solve([eq1, eq2, eq3, eq4], (a, b, c, x))

   1-element Vector{NTuple{4, Sym}}:
    (sqrt(187 - sqrt(4777))*(sqrt(31191) + 11*sqrt(1887))/444, 2*sqrt(352869 - 1887*sqrt(4777))/111, sqrt(1221/4 - 111*sqrt(4777)/68), sqrt(4777))

a = sqrt(187 - sqrt(4777))*(sqrt(31191) + 11*sqrt(1887))/444 となり,SymPy ではこれ以上簡約化できない。
しかし,裏をかいて a^2 を求めて簡約化すると以下のようになる。この平方根をとれば a = sqrt(sqrt(4777) + 187) である。

res[1][1]^2 |> simplify |> println

   sqrt(4777) + 187

a = sqrt(sqrt(4777) + 187) = 16.003619739999756 である。

sqrt(sqrt(4777) + 187) 

   16.003619739999756

その他のパラメータは以下の通り。

   a = 16.0036;  b = 8.49808;  c = 13.8719;  x = 69.1158

function draw(more=false)
   pyplot(size=(300, 300), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   (a, b, c, x) = res[1]
   @printf("正方形の一辺の長さ a = %g;  b = %g;  c = %g;  x = %g\n", a, b, c, x)
   plot([0, a, a, 0, 0,  a, c, 0], [0, 0, a, a, 0,  b, a, 0], color=:black, lw=0.5)
   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(a, 0, " a", :red, :left, :bottom, delta=delta/2)
       point(a, b, " (a,b)", :red, :left, :vcenter)
       point(c, a, "(c,a)", :red, :center, :bottom, delta=delta/2)
       point(0, a, "  a", :red, :center, :bottom, delta=delta/2)
       point(5, 12, "甲: 111", :green, :center, :vcenter, mark=false)
       point(12.5, 2.5, "乙: 68", :green, :center, :vcenter, mark=false)
       point(16, 13, "丙: 8 ", :green, :right, :vcenter, mark=false)
       point(11, 9, "x", :green, :center, :vcenter, mark=false)
   end
end;


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

コメントを投稿

Julia」カテゴリの最新記事