裏 RjpWiki

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

算額(その1368)

2024年10月23日 | Julia

算額(その1368)

五十九 群馬県佐波郡玉村町飯塚 光琳寺 天保8年(1837)
六十一 群馬県高崎市石原町 清水寺 天保10年(1839)
群馬県和算研究会:群馬の算額,上武印刷株式会社,高崎市,1987年3月31日.
キーワード:直角三角形,長方形,最大面積
#Julia, #SymPy, #算額, #和算

直角三角形の中に長方形を容れる。斜辺(弦)が 64 寸,長方形の長辺が 27 寸とする。長方形の面積が最大になるのは底辺(股)はいかほどか。

基本的に,算額(その816)と同じである。

鈎,股を A, B,鈎,股上にある点を a(平), b(長) とおくと,長方形の面積 S は S = a*b である。
以下の連立方程式を解く。

include("julia-source.txt");
# julia-source.txt ソース https://blog.goo.ne.jp/r-de-r/e/ad3a427b84bb416c4f5b73089ae813cf

using SymPy

@syms A, B, a, b, S

b = 27
eq1 = (A - a)/b - A/B
eq2 = a/(B - b) - A/B
eq3 = a*b - S
eq1 = A^2 + B^2 - 64^2
res = solve([eq1, eq2, eq3], (a, A, S))[2]

   (sqrt(4096 - B^2)*(B - 27)/B, sqrt(4096 - B^2), 27*sqrt(-(B - 64)*(B + 64))*(B - 27)/B)

面積 S は,B の関数である。

S = res[3]
S |> println

   27*sqrt(-(B - 64)*(B + 64))*(B - 27)/B

面積は B が 50 前後で最大値を取る。

pyplot(size=(300, 150), grid=false, aspectratio=:none, label="", fontfamily="IPAMincho")
plot(S, xlims=(27, 64), xlabel="B", ylabel="S(B)")

面積が最大になるのは上図の曲線の接線の傾きが 0 になるときである。数値的に解くには,S(B) を B で微分し,S'(B) = 0 になるときの B の値を求める。

diff(S, B) |> println

   27*sqrt(-(B - 64)*(B + 64))*(B - 27)/((B - 64)*(B + 64)) + 27*sqrt(-(B - 64)*(B + 64))/B - 27*sqrt(-(B - 64)*(B + 64))*(B - 27)/B^2

solve(diff(S, B), B)[1] |> println

   48

面積が最大になるのは,B が 48 のときである。

S(B => 48) |> println
S(B => 48).evalf() |> println

   189*sqrt(7)
   500.046997791208

B が 48 のとき,面積は最大値 500.046997791208 になる。

function draw(more)
    pyplot(size=(300, 300), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   S = 500.046997791208
   B = 48
   A = sqrt(4096 - B^2)
   a = sqrt(4096 - B^2)*(B - 27)/B
   b = S/a
   plot([0, B, 0, 0], [0, 0, A, 0], showaxis=false)
   rect(0, 0, b, a, :red)
   if more == true
       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)
       #plot!(showaxis=false, xlims=(-0.1, 9.5))
       point(0, A, " A(鈎)", :blue, :left, :bottom, delta=delta/2)
       point(B, 0, " B(股)", :blue, :left, :bottom, delta=delta/2)
       point(0, a, " a(平)", :red, :left, :bottom, delta=delta/2)
       point(b, 0, " b(長)", :red, :left, :bottom, delta=delta/2)
   end
end;

draw(true)


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

コメントを投稿

Julia」カテゴリの最新記事