算額あれこれ

算額問題をコンピュータで解きます

算額(その1599)

宮城県角田市小田字斗蔵 斗蔵寺 明治42年(1909)

 https://tajin.shiriagari.com/framepage5000.htm
    (リンク先の左のインデックスから選択)
キーワード:直角三角形,正方形
#Julia #SymPy #算額 #和算 #数学


直角三角形の中に,図のように正方形を容れる。正方形の一辺の長さが 12 寸のとき,黒積が最大になるのはどのようなときか。またその最大値はいかほどか。

正方形の一辺の長さを \(a\),黒積の直角三角形の頂点を \( (0,\ 0),\ (x,\ 0),\ (0,\ y)\)
鈎,股,弦をそのまま変数名とする。

証明はそんなに難しいものでもないが,直感でわかり,またそれが正しいことも簡単に示すことができる。

黒積が最大になるのは黒積が直角二等辺三角形のときである。斜辺が 12 寸のとき等辺は \(12/\sqrt{2}\) なので,黒積は \( (12/\sqrt{2})^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 ソース

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股\cdot 鈎/(股^2 + 鈎^2)= 72股\cdot鈎/弦^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\sqrt{2}\) である。
つまり,\(x = y = 6\sqrt{2}\) の二等辺三角形のとき黒積が最大値 = \( (6\sqrt{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)


以下のアイコンをクリックして応援してください