算額(その1599)
宮城県角田市小田字斗蔵 斗蔵寺 明治42年(1909)
https://tajin.shiriagari.com/framepage5000.htm
(リンク先の左のインデックスから選択)
キーワード:直角三角形,面積,最大値
#Julia, #SymPy, #算額, #和算, #数学
直角三角形の中に,図のように正方形を容れる。正方形の一辺の長さが 12 寸のとき,黒積が最大になるのはどのようなときか。またその最大値はいかほどか。
正方形の一辺の長さを a,黒積の直角三角形の頂点を (0, 0), (x, 0), (0, y)
鈎,股,弦をそのまま変数名とする。
証明はそんなに難しいものでもないが,直感でわかり,またそれが正しいことも簡単に示すことができる。
黒積が最大になるのは黒積が直角二等辺三角形のときである。斜辺が 12 寸のとき等辺は 12/√2 なので,黒積は (12/√2)^/2 = 36平方寸 である。
鈎 = 25.4558; 股 = 25.4558; 弦 = 36; 正方形の一辺の長さ = 12; 黒積 = 36
答えは 「4 歩」,術は「弦の冪(二乗)を 36 で割る」となっている。
図に描いてみると,元の直角三角形は黒積と相似(相似比は 3)なので,弦は 12*3 = 36 である。
確かに 36^2 / 36 = 36 となるが,「36」が「4 歩」というのはちょっとおかしい。一般的には「1 歩 = 36 平方尺 = 3600 平方寸」なので,単位に無頓着に「1 歩 = 36 平方寸」としてしまったのか?それにしても「4 歩 = 36」は理解しがたい。
以下は,無理やり SymPy で解く筋道である。
include("julia-source.txt");
# julia-source.txt ソース https://blog.goo.ne.jp/r-de-r/e/ad3a427b84bb416c4f5b73089ae813cf
using SymPy
@syms 股, 鈎, 弦, 黒積, a, x, y
弦 = sqrt(鈎^2 + 股^2)
a = 12
eq1 = x^2 + y^2 - a^2
eq2 = y/x - 鈎/股
eq3 = 黒積 - x*y/2
res = solve([eq1, eq2, eq3], (黒積, x, y))[2]
(72*股*鈎/(股^2 + 鈎^2), 12*股*sqrt(1/(股^2 + 鈎^2)), 12*鈎*sqrt(1/(股^2 + 鈎^2)))
黒積 = 72*股*鈎/(股^2 + 鈎^2)= 72*股*鈎/弦^2 である。
diff(res[1], 鈎) |> simplify |> println
72*股*(股^2 - 鈎^2)/(股^2 + 鈎^2)^2
ans_鈎 = solve(diff(res[1], 鈎), 鈎)[2] # 2 of 2
ans_鈎 |> println
股
鈎 = 股 のとき(つまり,二等辺直角三角形のとき)に,黒積は最大になる。
黒積の直角三角形は外側の直角三角形と相似なので,黒積が最大のとき,x = y である。
x^2 + y^2 = 12 なので x = 6√2 である。
つまり,x = y = 6√2 の二等辺三角形のとき黒積が最大値 = (6√2)^2/2 = 36平方寸 である。
function draw(a, more=false)
pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
x = y = 12/√2
鈎 = 股 = 3x
弦 = sqrt(鈎^2 + 股^2)
黒積 = x*y/2
@printf("鈎 = %g; 股 = %g; 弦 = %g; 正方形の一辺の長さ = %g; 黒積 = %g\n", 鈎, 股, 弦, a, 黒積)
plot([0, 股, 0, 0], [0, 0, 鈎, 0], color=:green, lw=0.5)
segment(x, 0, 0, y, :black)
segment(0, y, y, y + x, :black)
segment(x, 0, x + y, x, :black)
plot!([0, x, 0, 0], [0, 0, y, 0], seriestype=:shape, color=:gray80, fillcolor=:gray80, lw=0.5)
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(0, 鈎, " 鈎", :red, :left, :bottom, delta=delta/2)
point(股, 0, "股", :red, :left, :bottom, delta=delta/2, deltax=0.7delta)
point(0, y, " y", :red, :left, :vcenter)
point(x, 0, "x", :red, :center, :bottom, delta=delta)
end
end;
draw(12, true)