算額(その778)
川田保知:『算法極数小補解義』 文化15年戊寅正月
山口正義:やまぶき,第26号
https://yamabukiwasan.sakura.ne.jp/ymbk26.pdf
直角三角形内に斜線(文斜と命名)を入れ,股の一部分を武斜と命名する。
文斜と武斜を 2 寸,7 寸に固定したとき,股は武斜 + x になる。面積が最大になるときの股はいかほどか。
直角三角形の面積は x の関数になる。面積を求める式を微分し,接線の傾きが 0 になるときの x を求める。
include("julia-source.txt");
using SymPy
@syms 鈎::positive, 股::positive, 文斜::positive, 武斜::positive, x::positive
S = sqrt(文斜^2 - x^2) * (武斜 + x)//2 # 鈎*股/2
S |> println
(x/2 + 武斜/2)*sqrt(-x^2 + 文斜^2)
直角三角形の面積 S は x の関数である。
たとえば,文斜,武斜がそれぞれ 2, 7 のとき,面積は x が 0.5 前後で最大になる。
S2 = S(文斜 => 2, 武斜 => 7)
using Plots
pyplot(size=(500, 200), grid=false, aspectratio=:none, label="", fontfamily="IPAMincho")
p1 = plot(S2, xlims=(0, 2), xlabel="x", ylabel="面積 S")
p2 = plot(S2, xlims=(0.4, 0.6), xlabel="x", ylabel="面積 S", title="左図の拡大図", titlefont=11)
plot!(p1, p2)
接線の傾きが 0 になるときの x は,(sqrt(8*文斜^2 + 武斜^2) - 武斜)/4 である。
山口はまだ術を解読できていないとしているが「術曰置併文斜▢八段武斜▢開平方」の部分は sqrt(8*文斜^2 + 武斜^2) に相当するであろう。二箇所の▢は「乗」と思われる。引き続く「加武斜三段皈」はわからない。特に「皈」が。
f = diff(S, x)
res2 = solve(f, x)[1]
res2 |> println
res2.evalf() |> println
-武斜/4 + sqrt(8*文斜^2 + 武斜^2)/4
-0.25*武斜 + 0.707106781186548*(文斜^2 + 0.125*武斜^2)^0.5
文斜,武斜がそれぞれ 2, 7 のとき,面積は x が 0.5 のとき最大になる。
また,そのときの股は,股 = 武斜 + 0.5 = 7.5 である。
x = res2(文斜 => 2, 武斜 => 7)
x |> println
1/2
文斜,武斜がそれぞれ 2, 7 のとき,x が 0.5 のとき,面積は最大値 7.26184377413891 になる。
文斜が 2,武斜が 7 のとき,股(= 武斜 + x)が 7.5 のとき,直角三角形の面積が最大になる(x = 0.5)。
S = sqrt(文斜^2 - x^2) * (武斜 + x)//2
S |> println
S(x => 0.5, 文斜 => 2, 武斜 => 7).evalf() |> println
sqrt(文斜^2 - 1/4)*(武斜/2 + 1/4)
7.26184377413891
function draw(more=false)
pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
(文斜, 武斜) = (2, 7)
x = 0.5
鈎 = sqrt(文斜^2 - x^2)
股 = 武斜 + x
@printf("文斜が %g,武斜が %g のとき,股(= 武斜 + x)が %g のとき,直角三角形の面積が最大になる(x = %g)。\n", 文斜, 武斜, 武斜 + x, x)
plot([0, 股, 0, 0], [0, 0, 鈎, 0], color=:red, lw=0.5)
segment(0, 鈎, x, 0, :blue)
segment(x, 0, 股, 0, :green, lw=1)
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, "x+武斜 = 股", :red, :right, delta=-3delta)
point(0, 鈎, " 鈎", :red, :left, :bottom, delta=delta)
point(x, 0, " x", :blue, :left, :bottom, delta=delta)
point(x, 鈎/2, "文斜", :blue, :left, mark=false)
point(股/2, 0, "武斜", :green, :left, :bottom, delta=2delta, mark=false)
plot!(ylims=(-0.5, 2.1))
end
end;