裏 RjpWiki

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

算額(その1125)

2024年07月06日 | Julia

算額(その1125)

三十四 岩手県一関市舞川相川 菅原神社後額 嘉永3年(1850)
山村善夫:現存 岩手の算額,昭和52年1月30日,熊谷印刷,盛岡市.

http://www.wasan.jp/yamamura/yamamura.html
キーワード:円1個,正三角形,正方形,斜線,黒積

正方形の中に円,正三角形,斜線を容れる。円の直径が 1 寸のとき,図で示した灰色の部分の面積(黒積)を求めよ。

正方形(正三角形)の一辺の長さを a
円の半径と中心座標を r, (r, a - r)
とおき,以下の連立方程式を解く。

include("julia-source.txt")

using SymPy
@syms r::positive, a::positive,
     A::positive, B::positive, C::positive
A = 2(a - √Sym(3)a/2)
B = a
C = sqrt(A^2 + B^2)
eq = A + B - C - 2r
ans_a = solve(eq, a)[1] |> simplify
ans_a |> println

   -2*r/(-3 + 2*sqrt(2 - sqrt(3)) + sqrt(3))

黒積 = ((a - A)*(B/2)/2)(a => ans_a) |> simplify;

分子の r^2 がついていると SymPy では簡約化できないので,一旦外して(係数のみにして)簡約化を試みる。

temp = 黒積/r^2
temp |> println

   (-1 + sqrt(3))/(-3 + 2*sqrt(2 - sqrt(3)) + sqrt(3))^2

@syms d
temp2 = apart(temp, d) |> sympy.sqrtdenest |> factor
黒積2 = temp2*r^2
黒積2 |> println
黒積2(r => 1/2).evalf() |> println

   r^2*(2*sqrt(6) + 5 + 6*sqrt(2) + 5*sqrt(3))/2
   3.38056436220616

黒積は 等円の半径の二乗に,(2√6 + 5 + 6√2 +5√3)/2 を掛けることで得られる。

「答」は「三歩三分」と正解と異なる印象を受けるが,「術」は正しく,正確な結果を与えるあ。
なお,山村の解説は計算ミス・転記ミス・近似計算で正しい答えを示していない。

円径 = 1
位 = √3 - 1
A = (1 - sqrt(1 - 位))^2
黒積 = (円径/A)^2*位/4

   3.380564362206166

function draw(r, more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   a = -2*r/(-3 + 2*sqrt(2 - sqrt(3)) + sqrt(3))
   黒積 = r^2*(2√6 + 5 + 6√2 +5√3)/2
   @printf("円の直径が %g のとき,黒積は %g である。\n", 2r, 黒積)
   plot([0, a, a, 0, 0,  a, a/2, 0], [0, 0, a, a, 0,  0, √3a/2, 0], color=:blue, lw=0.5)
   plot!([0, a/2, 0, 0], [0, √3a/2, (√3 - 1)a, 0], seriestype=:shape, fillcolor=:gray90)
   segment(0, a - 2(a - √3a/2), a, a, :black)
   circle(r, a - r, r)
   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(a, 0, " a", :black, :left, :bottom, delta=delta/2)
       point(0, a, "a", :black, :left, :bottom, delta=delta/2)
       point(r, a - r, "r,(r,a-r)", :red, :center, delta=-delta/2)
       point(a/2, √3a/2, "(a/2,√3a/2)", :blue, :right, :bottom, delta=delta/2)
       point(0, (√3 - 1)a, " (√3 - 1)a", :blue, :left, delta=-delta/2)
   end
end;


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

コメントを投稿

Julia」カテゴリの最新記事