裏 RjpWiki

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

算額(その122)

2023年02月06日 | Julia

算額(その122)

一関市博物館 > 和算に挑戦 > 令和元年度出題問題(2) [中級問題](中学・高校生向き)
岩手県一関市舞川の菅原神社に嘉永3年(1850)に奉納された算額
https://www.city.ichinoseki.iwate.jp/museum/wasan/r1/normal.html

正方形の内部に四分円を配置し等円が 2 個入っている。等円の直径が一寸のとき,黒く塗った部分の面積はいかほどか。

正方形の一辺の長さを a,右の等円の中心座標を (a - 1/2, y) とする。四分円と等円が接することから 2 本の方程式を立て,解く。

using SymPy

@syms a, y;

eq1 = (a - 1//2)^2 + y^2 - (a +1//2)^2
eq2 = (1//2)^2 + y^2 - (a - 1//2)^2
res = solve([eq1, eq2], (a, y))

   3-element Vector{Tuple{Sym, Sym}}:
    (0, 0)
    (3, -sqrt(6))
    (3, sqrt(6))

res |> println


   Tuple{Sym, Sym}[(0, 0), (3, -sqrt(6)), (3, sqrt(6))]

a = 3, y = sqrt(6) が適切な解である。すなわち,正方形の一辺の長さは元の単位で 3 寸である。

using Plots
using Printf

function circle(ox, oy, r, color=:red; beginangle=0, endangle=360)
   θ = beginangle:0.1:endangle
   x = r.*cosd.(θ)
   y = r.*sind.(θ)
   plot!(ox .+ x, oy .+ y, color=color, linewidth=0.5)
end;

function circle(ox, oy, r, color=:red; beginangle=0, endangle=360, fill=false)
 θ = beginangle:0.1:endangle
 x = r.*cosd.(θ)
 y = r.*sind.(θ)
  if fill
      plot!(ox .+ x, oy .+ y, color=color, linewidth=0.5, seriestype=:shape, fillcolor=color)
  else
      plot!(ox .+ x, oy .+ y, color=color, linewidth=0.5)
  end
end;

function point(x, y, string="", color=:green, position=:left, vertical=:top; mark=true)
   mark && scatter!([x], [y], color=color, markerstrokewidth=0)
   annotate!(x, y, text(string, 10, position, color, vertical))
end;

function segment(x1, y1, x2, y2, color=:black; linestyle=:solid, linewidth=0.5)
plot!([x1, x2], [y1, y2], color=color, linestyle=linestyle, linewidth=linewidth)
end;

function blackarea(ox, oy, a, color=:black; beginangle=0, endangle=360)
   θ = beginangle:0.1:endangle
   x = a * cosd.(θ); append!(x, x[1]); append!(x, x[1])
   y = a * sind.(θ); append!(y, y[end]); append!(y, y[1])
   plot!(ox .+ x, oy .+ y, color=color, seriestype=:shape, fillcolor=color, lw=0.5)
   x = a .- x[end:-1:1]
   y = y[end:-1:1]
   plot!(ox .+ x, oy .+ y, color=color, seriestype=:shape, fillcolor=color, lw=0.5)
end

function draw(more)
    pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   (a, y) = (3, sqrt(6))
   println("(a, y) = $((a, y))")
   plot([0, a, a, 0, 0], [0, 0, a, a, 0], color=:black, lw=0.5)
   blackarea(0, 0, a, :black, beginangle=60, endangle=90)
   circle(0, 0, a, :black, beginangle=0, endangle=90)
   circle(a, 0, a, :black, beginangle=90, endangle=180)
   circle(a - 1/2, y, 1/2, :red)
   circle(1/2, y, 1/2, :red)
   if more == true
       point(a/2, a√3/2, "   B")
       point(0, 0, " O")
       point(a/2, 0, " C")
       point(a, 0, " A")
       point(a/2, a, " D", :green, :left, :bottom)
       point(a, a, " E", :green, :left, :bottom)
       segment(a/2, a√3/2, a/2, a, :white, linewidth=1)
       segment(a/2, a√3/2, a, 0, :black)
       segment(a/2, a√3/2, a/2, 0)
       hline!([0], color=:black, lw=0.5)
       vline!([0], color=:black, lw=0.5)
   else
       plot!(showaxis=false)
   end
end;

   (a, y) = (3, 2.449489742783178)

長方形 ACDE の面積 = X = a^2 / 2,扇形 ABE の面積 = Y = a^2 * pi / 12,三角形 ABC の面積 = Z = (a/2)^2 * sqrt(3) / 2
黒く塗った部分の半分 BDE の面積 = X - Y - Z

黒く塗った部分の面積は 2(X - Y - Z) = 0.39049670258533675

2(a^2 / 2 - a^2 * pi / 12 - (a/2)^2 * sqrt(3) / 2)

@syms a
eq = 2(a^2 // 2 - a^2 * PI / 12 - (a/2)^2 * sqrt(Sym(3)) / 2);
simplify(eq) |> println

   a^2*(-pi/6 - sqrt(3)/4 + 1)

SymPy の integrate() で解いてみよう。

using SymPy
@syms x
2integrate(3-sqrt(9 - x^2), (x, 0, 1.5))

    0.390496702585335

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PVアクセスランキング にほんブログ村

PVアクセスランキング にほんブログ村