岐阜県大垣市西外側町 大垣八幡神社(大垣八幡宮) 天保年間
http://ryugen3.sakura.ne.jp/toukou3/wasankibousya.PDF
キーワード:正方形,斜線
#Julia #SymPy #算額 #和算 #数学
正方形の各頂点を通り平行な 2 組の直線を引き,区分された面積を青赤に塗り分ける。赤の面積を最大にせよ。

正方形の一辺の長さを \(a\)
右下の頂点\( (a,\ 0)\) を通る直線と正方形の一辺の交点座標を\( (0,\ b)\) とおく。
2 直線の交点座標\( (x,\ y)\)は,julia-source.txt で定義している intersection 関数により求められる。
include("julia-source.txt"); # julia-source.txt ソース
using SymPy
@syms a, b
(x, y) = intersection(0, 0, b, a, 0, b, a, 0)
(a*b^2/(a^2 + b^2), a^2*b/(a^2 + b^2))
赤で塗り分けられた 4 個の台形は合同である。
また,多角形の面積は頂点座標の配列を julia-source.txt で定義している intersection 関数に与えることにより求められる。
左下の赤い台形の頂点座標(反時計回り)は以下のようになる。
xy = [
0 0
x y
(a - y) x
(a - b) 0
]
\(\displaystyle \left[\begin{smallmatrix}0 & 0\\\frac{a b^{2}}{a^{2} + b^{2}} & \frac{a^{2} b}{a^{2} + b^{2}}\\- \frac{a^{2} b}{a^{2} + b^{2}} + a & \frac{a b^{2}}{a^{2} + b^{2}}\\a - b & 0\end{smallmatrix}\right]\)
赤い台形 4 個の面積は以下のようになる。
S = 4area(xy) |> simplify
\(\displaystyle \frac{2 a b \left(a^{2} - b^{2}\right)}{a^{2} + b^{2}}\)
\(a = 1\) のとき,\(S\) は
pyplot(size=(300, 200), grid=false, aspectratio=:none, label="", fontfamily="IPAMincho", dpi=75)
plot(S(a => 1), xlims=(0, 1), xlabel="b", ylabel="S")

\(b = 0.5 a\) 前後で \(S\) は最大値 \(0.6a^2\) 前後になるようだ。
正確に求めるには,\(S\) を \(b\) で微分し,
g = diff(S, b)
\(\displaystyle - \frac{4 a b^{2} \left(a^{2} - b^{2}\right)}{\left(a^{2} + b^{2}\right)^{2}} - \frac{4 a b^{2}}{a^{2} + b^{2}} + \frac{2 a \left(a^{2} - b^{2}\right)}{a^{2} + b^{2}}\)
\(g = 0\) となる \(b\) を求める。
ans_b = solve(g, b)[2]
\(\displaystyle a \sqrt{-2 + \sqrt{5}}\)
ans_b(a => 1).evalf() |> println
0.485868271756646
\(b = 0.485868271756646\) のとき,\(S\) が最大になる。
最大値は \(S\) に \(b = ans_b\) を代入すれば求まる。
s = S(b => ans_b) |> simplify
\(\displaystyle - a^{2} \sqrt{-2 + \sqrt{5}} + \sqrt{5} a^{2} \sqrt{-2 + \sqrt{5}}\)
\(s\) は SymPy ではこれ以上簡約化できないが,手作業で以下のように簡約化する。
\(s = a^2\sqrt{\sqrt{5} - 2}(\sqrt{5} - 1)\)
\(s = a^2\sqrt{(\sqrt{5} - 2)(\sqrt{5} - 1)^2}\)
\( (\sqrt{5} - 2)(\sqrt{5} - 1)^2 = 10\sqrt{5} - 22\) ゆえ
(√Sym(5) - 2)*(√Sym(5) - 1)^2 |> expand
\(\displaystyle -22 + 10 \sqrt{5}\)
赤の面積の最大値はこの平方根を取ったものである。
s = (√Sym(5) - 2)*(√Sym(5) - 1)^2 |> expand |> sqrt |> x -> a^2*x
\(\displaystyle a^{2} \sqrt{10 \sqrt{5} - 22}\)
s.evalf()
\(\displaystyle 0.600566212001556 a^{2}\)
描画関数プログラムのソースを見る
function draw(a, b, more=false)
pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho", dpi=500)
(x, y) = (a*b^2/(a^2 + b^2), a^2*b/(a^2 + b^2))
plot([0, a, a, 0, 0], [0, 0, a, a, 0], color=:black, lw=0.5, seriestype=:shape, fillcolor=:dodgerblue)
plot!([0, a - b, a - y, x, 0], [0, 0, x, y, 0], color=:black, lw=0.5, seriestype=:shape, fillcolor=:deeppink)
plot!([0, 0, x, y, 0], [a, b, y, a - x, a], color=:black, lw=0.5, seriestype=:shape, fillcolor=:deeppink)
plot!([a, b, y, a-x, a], [a, a, a - x, a - y, a], color=:black, lw=0.5, seriestype=:shape, fillcolor=:deeppink)
plot!([a, a, a - x, a - y, a], [0, a - b, a - y, x, 0], color=:black, lw=0.5, seriestype=:shape, fillcolor=:deeppink)
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, 0, "(0,0)", :black, :center, delta=-delta)
point(a, 0, "(a,0)", :black, :center, delta=-delta)
point(0, b, "(0,b)", :black, :right, :vcenter, deltax=-delta/2)
point(x, y, " (x,y)", :black, :left, :vcenter)
point(b, a, " (b,a)", :black, :center, :bottom, delta=delta)
point(a - y, x, " (a-y,x)", :black, :left, :vcenter)
plot!(xlims=(-8delta, a + 3delta), ylims=(-5delta, a + 2delta))
end
end;
draw(1, 0.48, true)
以下のアイコンをクリックして応援してください