裏 RjpWiki

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

算額(その507)

2023年11月24日 | Julia

算額(その507)

長岡高専和算倶楽部オリジナル算額
山田 章,谷口 悠,加藤 祐樹,長谷川 柊太,平田 大成,中山 雅友美,冨樫 瑠美,涌田 和芳: 長岡高専和算倶楽部オリジナル算額について,長岡工業高等専門学校研究紀要,57 巻,p. 41-45,2021.
https://kinpoku.nagaoka-ct.ac.jp/lib/kiyo/vol_57/57_41yamada.pdf

正三角形に内接する正方形(正方形の3つの頂点が正三角形の 3 つの辺上にある)の一辺の長さが最小になるのはどのようなときか。

正三角形の一辺の長さを a,正方形の一辺の長さを b とする。
正方形の 4 つの頂点座標を (x1, 0 ), (x2, y2), (x3, y3), (x4, y4) とする。
(x1, 0), (x2, y2) を結ぶ線分が正三角形の底辺となす角を θ° として,
以下の連立方程式を解く。

include("julia-source.txt");

using SymPy
@syms a, b, θ, x1, x2, y2, x3, y3, x4, y4

x2 = x1 + b*cosd(θ)
y2 =      b*sind(θ)
x3 = x2 - b*sind(θ)
y3 = y2 + b*cosd(θ)
x4 = x1 - b*sind(θ)
y4 =      b*cosd(θ)

eq1 = y4/x4 - sqrt(Sym(3))
eq2 = y3/(a - x3) - sqrt(Sym(3))
res = solve([eq1, eq2], (x1, b))

   Dict{Any, Any} with 2 entries:
     b  => sqrt(3)*a/(2*(sin(pi*(θ/180 + 1/3)) + cos(pi*θ/180)))
     x1 => a*sin(pi*(θ/180 + 1/6))/(sin(pi*(θ/180 + 1/3)) + cos(pi*θ/180))

正方形の一辺の長さは sqrt(3)/(2*(sin(pi*(θ/180 + 1/3)) + cos(pi*θ/180))) である。
0 ≦ θ ≦ 30 で図を描くと以下のようになる。

using Plots
pyplot(size=(400, 200), grid=false, aspectratio=:none, label="", fontfamily="IPAMincho")
plot(res[b]/a, xlims=(0, 30), xlabel="θ", ylabel="b")

b の式の導関数を求め,導関数 = 0 となる θ を求め,そのときの b の値を求める。
正三角形の一辺の長さを a とすれば,θ が 15° のとき,正方形の一辺の長さは最小値 (3√2 - √6)a/4 = 0.448287736084027a になる。

solve(diff(res[b]/a))[1] |> println

   15

eq = (res[b])(θ => 15) |> simplify
eq |> println
eq(θ => 15).evalf() |> println

   -sqrt(6)*a/4 + 3*sqrt(2)*a/4
   0.448287736084027*a

   a = 1;  θ = 15;  x1 = 0.366025;  b = 0.448288

using Plots

function draw(more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   a = 1
   θ = 15
   b  = sqrt(3)*a/(2*(sin(pi*(θ/180 + 1/3)) + cos(pi*θ/180)))
   x1 = a*sin(pi*(θ/180 + 1/6))/(sin(pi*(θ/180 + 1/3)) + cos(pi*θ/180))
   @printf("a = %g;  θ = %g;  x1 = %g;  b = %g\n", a, θ, x1, b)
   plot([0, a, a/2, 0], [0, 0, √3*a/2, 0], color=:black, lw=0.5)
   x2 = x1 + b*cosd(θ)
   y2 =      b*sind(θ)
   x3 = x2 - b*sind(θ)
   y3 = y2 + b*cosd(θ)
   x4 = x1 - b*sind(θ)
   y4 =      b*cosd(θ)
   plot!([x1, x2, x3, x4, x1], [0, y2, y3, y4, 0], color=:blue, lw=0.5)
   if more
       delta = (fontheight = (ylims()[2]- ylims()[1]) / 500 * 10 * 2) /3  # size[2] * fontsize * 2
       hline!([0], color=:black, lw=0.5)
       vline!([0], color=:black, lw=0.5)
       point(x1, 0, "(x1,0) ", :blue, :right, :bottom, delta=delta/2)
       point(x2, y2, "(x2,y2)", :blue, :left, delta=-delta/2)
       point(x3, y3, " (x3,y3)", :blue, :left, :vcenter)
       point(x4, y4, " (x4,y4)", :blue, :left, delta=-delta/2)
       point(a/2, √3a/2, " (a/2, √3a/2)", :black, :left, :vcenter)
       point(a, 0, "a", :black, :left, :bottom, delta=delta/2)
   else
       plot!(showaxis=false)
   end
end;


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

コメントを投稿

Julia」カテゴリの最新記事