裏 RjpWiki

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

算額(その332)

2023年07月16日 | Julia

算額(その332)

石川県能登町 白山神社
【算額に挑戦】石川県の算額 ―その2―
http://blog.livedoor.jp/enjoy_math/archives/51206109.html

直線上に甲円と乙円が載っており,互いに接している。
大円と小円も同じ直線上にあり,互いに接している。
また,甲円と大円,乙円と小円も互いに接している。
甲円,乙円,大円の直径がそれぞれ 64寸,54寸,11寸のとき,小円の直径を求めよ。

甲円の直径,中心座標を r1, (0, r1)
乙円の直径,中心座標を r2, (x2, r2)
大円の直径,中心座標を r3, (x3, r3)
小円の直径,中心座標を r4, (x4, r4)
とおき,以下の連立方程式を解く。
なお,同一直線に載っている2つの円 r1, r2 の中心間の水平距離は 2√(r1*r2) なので,eq1 は見かけは長ったらしいが実際には x2^2 = 3456 という式になっている。ほかも同様である。

include("julia-source.txt");

using SymPy

@syms r1::positive, r2::positive, x2::positive,
     r3::positive, x3::positive, r4::positive, x4::positive;
#@syms r1, r2, x2, r3, x3, r4, x4;
(r1, r2, r3) = (64, 54, 11) .// 2
eq1 = x2^2 + (r1 - r2)^2 - (r1 + r2)^2
eq2 = x3^2 + (r1 - r3)^2 - (r1 + r3)^2
eq3 = (x2 - x4)^2 + (r2 - r4)^2 - (r2 + r4)^2
eq4 = (x4 - x3)^2 + (r3 - r4)^2 - (r3 + r4)^2
res = solve([eq1, eq2, eq3, eq4], (x2, x3, r4, x4))

   1-element Vector{NTuple{4, Sym}}:
    (24*(18 - sqrt(66))/sqrt(65 - 6*sqrt(66)), 8*(-11 + 3*sqrt(66))/sqrt(65 - 6*sqrt(66)), 211232/1849 - 24960*sqrt(66)/1849, 48*sqrt(4290/1849 - 396*sqrt(66)/1849))

それぞれの式は,必要に応じて分母の有理化や二重根号を外すなどで簡約化できる場合もある。

@syms dummy
apart(res[1][1], dummy) |> sympy.sqrtdenest |> simplify |> println
apart(res[1][2], dummy) |> sympy.sqrtdenest |> simplify |> println
apart(res[1][3], dummy) |> println
apart(res[1][4], dummy) |> sympy.sqrtdenest |> simplify |> println

   24*sqrt(6)
   8*sqrt(11)
   211232/1849 - 24960*sqrt(66)/1849
   -528*sqrt(6)/43 + 864*sqrt(11)/43

小円の直径は 2(211232 - 24960*sqrt(66))/1849 = 9.146567247470445 である

2(211232 - 24960*sqrt(66))/1849

   9.146567247470445

using Plots

function draw(more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   (r1, r2, r3) = (64, 54, 11) .// 2
   x2 = 24*sqrt(6)
   x3 = 8*sqrt(11)
   r4 = 211232/1849 - 24960*sqrt(66)/1849
   x4 = -528*sqrt(6)/43 + 864*sqrt(11)/43
   @printf("小円の直径 = %.6f\n", 2r4)
   plot()
   circle(0, r1, r1)
   circle(x2, r2, r2, :blue)
   circle(x3, r3, r3, :green)
   circle(x4, r4, r4, :orange)
   if more
       point(0, r1, " 甲円\n r1", :red, :left, :vcenter)
       point(x2, r2, " 乙円:r2\n (x2,r2)", :blue, :left, :vcenter)
       point(x3, r3, " 大円:r3   \n(x3,r3)   ", :green, :right, :bottom)
       point(x4, r4, "    小円:r4,(x4,r4)", :orange, :left, :bottom)
       vline!([0], color=:black, lw=0.5)
       hline!([0], color=:black, lw=0.5)
   else
       plot!(showaxis=false)
   end
end;


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

コメントを投稿

Julia」カテゴリの最新記事