算額(その1354)
十二 群馬県高崎市石原町 清水寺 安永3年(1774)
群馬県和算研究会:群馬の算額,上武印刷株式会社,高崎市,1987年3月31日.
キーワード:三角形,面積最大化
#Julia, #SymPy, #算額, #和算
三辺が,大斜,中斜,小斜の三角形がある。中斜と中鈎(頂点から大斜へおろした垂線の長さ。三角形の高さ)の和が 126 寸,小斜と中鈎の和が 121 寸のとき,三角形の面積が最大になるときの中鈎はいかほどか。
大斜,中斜,小斜,中鈎,面積をそのまま変数名として,以下の連立方程式を解き,中鈎,大斜,小斜を求める。解は中斜の関数になる。
include("julia-source.txt");
using SymPy
@syms 小斜::positive, 中斜::positive, 大斜::positive,
中鈎::positive, 面積::positive
eq1 = 中斜 + 中鈎 - 126
eq2 = 小斜 + 中鈎 - 121
eq3 = sqrt(中斜^2 - 中鈎^2) + sqrt(小斜^2 - 中鈎^2) - 大斜
res = solve([eq1, eq2, eq3], (中鈎, 大斜, 小斜))[1]
(126 - 中斜, 11*sqrt(2*中斜 - 131) + 6*sqrt(7*中斜 - 441), 中斜 - 5)
中鈎と大斜は以下のようになるので,面積は 中鈎*大斜/2 である。
中鈎 = 126 - 中斜
大斜 = 11*sqrt(2*中斜 - 131) + 6*sqrt(7*中斜 - 441)
res[1] |> println
res[2] |> println
126 - 中斜
11*sqrt(2*中斜 - 131) + 6*sqrt(7*中斜 - 441)
面積 = (126 - 中斜)*(11*sqrt(2*中斜 - 131) + 6*sqrt(7*中斜 - 441))/2;
面積も中斜の関数になり,下図のように中斜が 80〜90 の間に最大値 3000 程を取る。
pyplot(size=(300, 150), grid=false, aspectratio=:none, label="")
plot(面積, xlims=(60, 126), xlabel="中斜", ylabel="面積")
面積が最大になるときの中斜は,面積の導関数を取り,それが 0 になるときの値を求めればよい。
導関数 = diff(面積, 中斜);
ans_中斜 = solve(導関数, 中斜)[1].evalf()
ans_中斜 |> println
84.8502093388565
中斜が 84.8502093388565 のときの面積は,2934.69516643686 である。
面積(中斜 => 84.8502093388565) |> println
2934.69516643686
中鈎は「126 - 中斜」なので,126 - 84.8502093388565 = 41.1497906611435 寸である。
function draw(more)
pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
中斜 = 84.8502093388565
(中鈎, 大斜, 小斜) = (126 - 中斜, 11*sqrt(2*中斜 - 131) + 6*sqrt(7*中斜 - 441), 中斜 - 5)
大斜1 = sqrt(中斜^2 - 中鈎^2)
plot([0, 大斜, 大斜1, 0], [0, 0, 中鈎, 0], color=:blue, lw=0.5)
segment(大斜1, 0, 大斜1, 中鈎, :red)
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)
dimension_line(0, -3, 大斜, -3, "大斜", :blue, :center, delta=-4delta)
point(大斜1, 中鈎/2, "中鈎", :red, :left, :vcenter, deltax=2delta, mark=false)
point(大斜1/2, 中鈎/2, "中斜", :blue, :right, :vcenter, mark=false, deltax=-7delta)
point((大斜1 + 大斜)/2, 中鈎/2, "小斜", :blue, :left, :vcenter, mark=false, deltax=7delta)
ylims!(-15delta, 中鈎 + 2delta)
end
end;
draw(true)
※コメント投稿者のブログIDはブログ作成者のみに通知されます