算額あれこれ

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

算額(その2026)

43 岩手県一関市滝沢字寺田下 熊野白山滝神社 明治13年(1880)

安富有恒:和算—岩手の現存算額のすべて,青磁社,東京都,1987.
http://www.wasan.jp/iwatenosangaku_yasutomi.pdf
キーワード:直角三角形,正方形,斜線
#Julia #SymPy #算額 #和算 #数学


全円の中に 2 本の斜線 \({\rm AC},\ {\rm AD}\) と 2 個の正方形を容れる。片方の斜線 \({\rm AC}\) は円周上にある 2 頂点を結ぶもの,もう一方の斜線 \({\rm AD}\) は片方の正方形の一辺 \({\rm AB}\) を延長したもので,もう片方の正方形の円周上の頂点 \({\rm D}\) を結ぶものである。全円の直径が与えられたとき,赤く色付けした弓形の面積はいかほどか。

ややこしそうに書いたが,このような図は 1 種類しか描けない。描かれる図においては,必ず (1) ∠ABC = 135°,(2) ∠AOC = 90° となる。この図形については「算額(その1994)」が 参考になる。

円の半径を \(r\) とすれば,赤く色付けした部分の面積は,円の面積の 1/4 から,直角二等辺三角形 ABC の面積を除いた面積である。
\(\displaystyle \displaystyle \frac{\pi r^2}{4} - \frac{r^2}{2} = \frac{r^2(\pi - 2)}{4}\)

using SymPy
@syms r
S = PI*r^2/4 - r^2/2 |> factor

    \(\displaystyle \frac{r^{2} \left(-2 + \pi\right)}{4}\)

円の直径が 1 のとき,赤く色付けした部分の面積は 0.0713495408493621 である。

S(r => 1/2).evalf()

    \(0.0713495408493621\)

術は,「置円責率内減五分余四乗全円巾」つまり「円周率の 1/4 から 0.5 を引いて,直径の二乗を掛ける」なので,同じ式である。

円積率 = PI/4
S = (円積率 - 1//2)/4*(2r)^2

    \(\displaystyle 4 r^{2} \left(- \frac{1}{8} + \frac{\pi}{16}\right)\)

S |> simplify

    \(\displaystyle \frac{r^{2} \left(-2 + \pi\right)}{4}\)

S(r => 1/2).evalf()

    \(0.0713495408493621\)


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

算額(その2026)

43 岩手県一関市滝沢字寺田下 熊野白山滝神社 明治13年(1880)

安富有恒:和算—岩手の現存算額のすべて,青磁社,東京都,1987.
http://www.wasan.jp/iwatenosangaku_yasutomi.pdf
キーワード:直角三角形,正方形,斜線
#Julia #SymPy #算額 #和算 #数学


直角三角形と長方形が交差している。斜線を引き,隙間に 3 個の正方形を容れる。長方形の長辺の長さが 64 寸,正方形の一辺の長さが 16 寸のとき,長方形の短辺の長さはいかほどか。(図形の説明は意訳した)

長方形の長辺,短辺の長さを \(a,\ b\),正方形の一辺の長さを \(s\) とおく。

\({\rm FG} = 2s + s^2/a\)
\({\rm GH} = {\rm FG} - b\)
\({\rm BC} = s\)
\({\rm BH} = a - s\)
\({\rm ⊿ABC}\) と \({\rm ⊿AGH}\) は相似なので,
\({\rm AB} = {\rm BH} \cdot ({\rm BC}/({\rm BC} + {\rm GH})\)
\({\rm ⊿ABC}\) と \({\rm ⊿CDE}\) は相似なので,
\({\rm BC}/{\rm AB} = {\rm DE}/{\rm CD}\)

以上をまとめた方程式 eq を解き,\(b\) を求める。

include("julia-source.txt");  # julia-source.txt ソース
using SymPy
@syms a, b, s
FG = 2s + s^2/a
GH = FG - b
BH = a - s
AB = BH*s/(s + GH)
eq = b/(s + AB) ⩵ ( (b - s)/s)

    \(\displaystyle \frac{b}{\frac{s \left(a - s\right)}{- b + 3 s + \frac{s^{2}}{a}} + s} = \frac{b - s}{s}\)

res = solve(eq, b)[1]

    \(\displaystyle \frac{s \left(a + s\right)^{2}}{a^{2}}\)

長方形の長辺の長さに正方形の一辺の長さを加え,二乗し,正方形の一辺の長さを掛け,長方形の長辺の二乗で割る。

術では「置直長加方面自之乗方面以直長巾除」と書いている。短いが用語を短くしているだけで,分かりづらいといえば分かりづらい。

長方形の長辺が 64 寸,正方形の一辺の長さが 16 寸のとき,長方形の短辺は 25 寸である。

res(a => 64, s => 16)

    \(25\)


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

算額(その2025)

25 岩手県平泉町字衣ノ関 中尊寺阿弥陀堂 弘化2年(1845)

安富有恒:和算—岩手の現存算額のすべて,青磁社,東京都,1987.
http://www.wasan.jp/iwatenosangaku_yasutomi.pdf
キーワード:円6個,楕円,斜線
#Julia #SymPy #算額 #和算 #数学

楕円の中に極円(曲率円)2 個と,斜線 4 本を設け,甲円 4 個と,乙円 2 個を容れる。乙円の直径が与えられたとき,甲円の直径はいかほどか。

楕円の長半径,短半径,中心座標を \(a,\ b,\ (0,\ 0)\)
極円の半径と中心座標を \(r_0,\ (x_0,\ 0)\)
甲円の半径と中心座標を \(r_1,\ (x_1,\ 0)\)
乙円の半径と中心座標を \(r_2,\ (0,\ b - r_2)\)
斜線と楕円の交点を \(x_{01},\ y_{01})\)
とおき,以下の連立方程式を解く。

include("julia-source.txt");  # julia-source.txt ソース
using SymPy
@syms a::positive, b::positive, r0::positive, r1, x0, r2, x01, y01
eq1 = a^2 - 4(a^2 - b^2)*(b^2 - r0^2)/b^2  # 算法助術公式84
eq2 = r0 - b^2/a;  # 曲率円の定義
solve([eq1, eq2], (b, r0))[1]  # 1 of 2

    (sqrt(2)*a/2, a/2)

まず eq1, eq2 を解いて \(b = \sqrt{2}a/2,\ r_0 =a/2\) であることがわかる。
∠ACD = θ として,方程式を追加する。

@syms θ
y0 = sqrt(r0^2 - (x0 - r0)^2)
eq3 = (r0 - x0)/r0 - r0/3r0
eq4 = r1 - (r0 - r0/3)
eq5 = dist2(a, 0, -x0, y0, 0, b - r2, r2)
eq6 = x01^2/a^2 + y01^2/b^2 - 1
eq7 = y01/(x01 + a) - tan(θ);

すべてをまとめて,連立方程式を解く。

res = solve([eq1, eq2, eq3, eq4, eq5, eq6, eq7], (b, r0, x0, r1, r2, x01, y01))[1]  # 1 of 4

    (sqrt(2)*a/2, a/2, a/3, a/3, a*(3 - 2*sqrt(2)), a*(1 - 2*tan(θ)^2)/(2*tan(θ)^2 + 1), 2*a*tan(θ)/(2*tan(θ)^2 + 1))

# r1: 甲円の半径
ans_r1 = res[4]
@show(ans_r1)

    ans_r1 = a/3

    \(\displaystyle \frac{a}{3}\)

ans_r1(a => 5).evalf()

    \(1.66666666666667\)

# r2: 乙円の半径
ans_r2 = res[5]
@show(ans_r2)

    ans_r2 = a*(3 - 2*sqrt(2))

    \(a \left(3 - 2 \sqrt{2}\right)\)

ans_r2(a => 5).evalf()

    \(0.85786437626905\)

# 甲円の半径と乙円の半径の比
@syms d
p = apart(ans_r1/ans_r2, d) |> factor

    \(\displaystyle \frac{2 \sqrt{2} + 3}{3}\)

p.evalf()

    \(1.94280904158206\)

甲円の直径は,乙円の直径の \(\frac{2\sqrt{2} + 3}{3} = 1.94280904158206\) 倍である。

術は,\(甲円径 = (\sqrt{2}/3 + 0.5)\cdot 乙円径\) となっているのだが,2 倍しないといけない。

sqrt(2)/3 + 1/2

    0.9714045207910318

(sqrt(2)/3 + 1/2)*2

    1.9428090415820636

描画関数プログラムのソースを見る

function draw(a, more=false)
    pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
    (b, r0, x0, r1, r2) = (sqrt(6)*a/2, 3*a/2, a, a, a*(-sqrt(6) + sqrt(12 - 6*sqrt(3)) + sqrt(2)), 11*a/13, 6*sqrt(2)*a/13)
    (b, r0, x0, r1, r2, x01, y01) = (sqrt(2)*a/2, a/2, a/3, a/3, a*(3 - 2*sqrt(2)), 3*a/5, 2*sqrt(2)*a/5)
    y0 = sqrt(r0^2 - (x0 - r0)^2)
    θ = asin(r0/3r0)
    x1 = r0 + 2r0/3*cos(pi/2 - θ)
    y1 = 2r0/3*sin(pi/2 - θ)
    (b, r0, x0, r1, r2, x01, y01) = (sqrt(2)*a/2, a/2, a/3, a/3, a*(3 - 2*sqrt(2)), 3*a/5, 2*sqrt(2)*a/5)
    @printf("長半径 = %.15g, 短半径 = %.15g\n甲円半径 = %.15g, 乙円半径 = %.15g\n", a, b, r1, r2)
    plot()
    ellipse(0, 0, a, b, color=:blue)
    circle2(a/2, 0, r0)
    circle4(x1, y1, r0/3, :darkorange)
    circle22(0, b - r2, r2, :green)
    plot!([-x01, a, -x01], [y01, 0, -y01], color=:black, lw=0.5)
    plot!([x01, -a, x01], [y01, 0, -y01], color=:black, 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(a, 0, "a", :blue, :left, :bottom, delta=-delta/2, deltax=delta/2)
        point(0, b, "b", :blue, :center, :bottom, delta=delta/2)
        point(x1, y1, "甲円:r1,(x1,y1)", :black, :center, delta=-delta)
        point(0, b - r2, "乙円:r2,(0,b-r2)", :black, :center, delta=-delta)
    end
end;
draw(5, true)

    長半径 = 5, 短半径 = 3.53553390593274
    甲円半径 = 1.66666666666667, 乙円半径 = 0.857864376269049


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

200年前の数学アート ― 楕円と六つの円が語る和算の知恵

― 江戸の数学が描いた、美しい「円と楕円」の世界 ―

江戸時代の神社やお寺には、算額(さんがく)と呼ばれる木製の絵馬が奉納されていました。そこに描かれているのは、単なる計算問題ではなく、幾何学の美しさそのもの
今回紹介するのは、岩手県・中尊寺阿弥陀堂(1845年)に伝わる算額の一題です。


問題の舞台:楕円と6つの円

図を見てください。

一見すると装飾的ですが、実は非常に洗練された数学的構成になっています。

  • 外枠は 楕円

  • 左右には楕円にぴったり接する 極円(曲率円) が2つ

  • 中には 斜線が4本

  • その隙間に

    • 甲円:4個

    • 乙円:2個

が、ぴたりと収まっています。

問い
乙円の直径が分かっているとき、
甲円の直径はいくらになるか?

条件はこれだけ。
にもかかわらず、答えは楕円の大きさに依存しない、驚くほど美しい比になります。


江戸の和算家が見抜いた構造

この問題の核心は、次の3点です。

  1. 楕円の曲率円
    楕円の左右端には、半径が
    \(
    r_0 = \displaystyle \frac{a}{2}
    \)
    となる特別な円(極円)が自然に現れます。

  2. 斜線の役割
    4本の斜線は、単なる仕切りではありません。
    円と円、円と楕円が同時に接する位置を厳密に決める“幾何学的ガイド”です。

  3. 比だけが残る
    実際に計算してみると、楕円の長半径 (a) は最終結果から消えます。


現代の道具で解いてみる

今回は Julia と SymPy を使い、連立方程式としてこの問題を解きました。
計算の詳細はコードに譲るとして、結論だけをまとめると──

  • 甲円の半径
    \(
    r_1 = \displaystyle \frac{a}{3}
    \)

  • 乙円の半径
    \(
    r_2 = a(3 - 2\sqrt{2})
    \)

したがって、直径の比

\(\displaystyle 
\frac{\text{甲円の直径}}{\text{乙円の直径}}
= \frac{2\sqrt{2} + 3}{3}
\approx 1.9428
\)


答え

🔴 甲円の直径は、乙円の直径の

\(
\boxed{\displaystyle \frac{2\sqrt{2} + 3}{3} ;;(\approx 1.94)}
\)

倍である。


なぜ美しいのか?

この結果の魅力は、

  • 楕円の大きさが変わっても

  • 円の絶対的なサイズが変わっても

比だけは不変であること。

江戸時代の和算家たちは、
解析幾何もコンピュータも持たず、
図形の対称性と接触条件だけで、ここまで見通していました。


おわりに

算額は「難問」ではなく、
数学を楽しむためのアートだったのかもしれません。

200年前の板絵と、
現代の Julia / SymPy が、
同じ答えにたどり着く──
それ自体が、ちょっとしたロマンですね。

#算額 #和算 #楕円 #幾何学 #Julia #SymPy #数学の美


 

算額(その2024)

19 岩手県江刺市玉里字玉崎(現奥州市) 玉崎駒形神社 弘化5年(1848)

安富有恒:和算—岩手の現存算額のすべて,青磁社,東京都,1987.
http://www.wasan.jp/iwatenosangaku_yasutomi.pdf
キーワード:円4個,二等辺三角形,菱形
#Julia #SymPy #算額 #和算 #数学

二等辺三角形の中に合同な菱形を 2 個容れ,隙間に甲円 2 個,乙円 2 個を容れる。甲円の直径が 7 寸のとき,乙円の直径はいかほどか。

菱形の一辺の長さを \(c\),甲円の半径を \(r_1\),乙円の半径を \(r_2\) とおき,以下のように計算を進める。

include("julia-source.txt");  # julia-source.txt ソース
using SymPy
@syms a::positive, b::positive, c::positive, x::positive,
      r1::positive, x1::positive, y1::positive, r2::positive, x2::positive

    (a, b, c, x, r1, x1, y1, r2, x2)

⊿CDE は ∠CDE = 90°,\({\rm CD} = {\rm DE} = c\) の直角二等辺三角形で,\({\rm EC} = \sqrt{2} {\rm DE}\) である。
\({\rm CD} + {\rm DE} - {\rm EC} = 2r_1\) が成り立つ。

eq1 = c + c - √Sym(2)*c - 2r1 |> simplify
eq1

    \(- \sqrt{2} c + 2 c - 2 r_{1}\)

甲円の半径 \(r_1\) が与えられたとき,菱形の一辺の長さ \(c\) を求める。

ans_c = solve(eq1, c)[1] |> simplify

    \(r_{1} \left(\sqrt{2} + 2\right)\)

甲円の直径が 7 寸のとき,菱形の一辺の長さは 11.9497474683058 寸である。

ans_c(r1 => 7/2).evalf() |> println

    3.41421356237309*r1

⊿ABC は ∠ACB=90°,∠BAC=22.5°の直角三角形で,
\({\rm AC} = c\)
\({\rm BC} = {\rm AC} \tan(22.5°) = {\rm AC} (\sqrt{2} - 1)\)
\({\rm AB} = \sqrt{{\rm AC}^2 + {\rm BC}^2}\)
で,\({\rm AC} + {\rm BC} - {\rm AB} = 2r_2\) が成り立つ。

eq2 = c + c*(sqrt(Sym(2)) - 1) - sqrt(c^2 + (c*(sqrt(Sym(2)) - 1))^2) - 2r2 |> simplify
eq2

    \(- c \sqrt{4 - 2 \sqrt{2}} + \sqrt{2} c - 2 r_{2}\)

菱形の一辺の長さ \(c\) が与えられると,乙円の半径 \(r_2\) は以下の式で求められる。

ans_r2 = solve(eq2, r2)[1]

    \(\displaystyle \frac{\sqrt{2} c \left(1 - \sqrt{2 - \sqrt{2}}\right)}{2}\)

ここで,前段階で求めた \(c = 11.9497474683058\) を代入することにより,直径は 3.96518148145364 寸である。

ans_r2(c => 11.9497474683058).evalf() * 2

    \(3.96518148145364\)

術は \(1/(\sqrt{2 - \sqrt{2}} + 1)\cdot 7\) で,等価な式である。

(1/(sqrt(2 - sqrt(Sym(2))) + 1)*7).evalf()

    \(3.96518148145365\)

以下は,図を描くために必要なパラメータを数値解で求める場合である。
菱形の対角線を \(2a, 2b, a > b\)
二等辺三角形の底辺の長さを \(2x\)
甲円の半径と中心座標を \(r_1,\ (x_1,\ y_1)\)
乙円の半径と中心座標を \(r_2,\ (x_2,\ r_2)\)
とおき,以下の連立方程式の数値解を求める。

c = sqrt(a^2 + b^2)
eq1 = (2a + 2b)/x - a/b  # (2a + b)/a
eq2 = dist2(0, 2b, a, b, x1, y1, r1)
eq3 = dist2(0, 2b, b, a + 2b, x1, y1, r1)
eq4 = dist2(0, 2a + 2b, x, 0, x1, y1, r1)
eq5 = dist2(0, 0, a, b, x2, r2, r2)
eq6 = dist2(0, 2a + 2b, x, 0, x2, r2, r2)
eq7 = (2a + b)/a - a/b;

function H(u)
    (a, b, x, x1, y1, r2, x2) = u
    return [
        -a/b + (2*a + 2*b)/x,  # eq1
        4*a^2*b^2 - 4*a^2*b*y1 - a^2*r1^2 + a^2*y1^2 - 4*a*b^2*x1 + 2*a*b*x1*y1 - b^2*r1^2 + b^2*x1^2,  # eq2
        -a^2*r1^2 + a^2*x1^2 + 4*a*b^2*x1 - 2*a*b*x1*y1 + 4*b^4 - 4*b^3*y1 - b^2*r1^2 + b^2*y1^2,  # eq3
        -4*a^2*r1^2 + 4*a^2*x^2 - 8*a^2*x*x1 + 4*a^2*x1^2 - 8*a*b*r1^2 + 8*a*b*x^2 - 16*a*b*x*x1 + 8*a*b*x1^2 - 4*a*x^2*y1 + 4*a*x*x1*y1 - 4*b^2*r1^2 + 4*b^2*x^2 - 8*b^2*x*x1 + 4*b^2*x1^2 - 4*b*x^2*y1 + 4*b*x*x1*y1 - r1^2*x^2 + x^2*y1^2,  # eq4
        b*(-2*a*r2*x2 - b*r2^2 + b*x2^2),  # eq5
        -4*a^2*r2^2 + 4*a^2*x^2 - 8*a^2*x*x2 + 4*a^2*x2^2 - 8*a*b*r2^2 + 8*a*b*x^2 - 16*a*b*x*x2 + 8*a*b*x2^2 - 4*a*r2*x^2 + 4*a*r2*x*x2 - 4*b^2*r2^2 + 4*b^2*x^2 - 8*b^2*x*x2 + 4*b^2*x2^2 - 4*b*r2*x^2 + 4*b*r2*x*x2,  # eq6
        -a/b + (2*a + b)/a,  # eq7
    ]
end;
r1 = 7/2
iniv = BigFloat[11.1, 4.58, 13, 4.6, 11, 1.98, 9.92]
res = nls(H, ini=iniv)

    ([11.040127104646325, 4.572970377067318, 12.934313455158014, 4.572970377067318, 11.040127104646325, 1.9825907407268253, 9.967156727579008], true)

甲円の半径が 7/2 寸のとき,乙円の半径は 1.9825907407268253(直径は 3.9651814814536506)と,正確に求められている。

res[1][6]*2

    3.9651814814536506

描画関数プログラムのソースを見る

function draw(r1, more=false)
    pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
    (a, b, x, x1, y1, r2, x2) = r1 .* [3.15432202989895, 1.3065629648763766, 3.695518130045147, 1.3065629648763766, 3.15432202989895, 0.5664544973505216, 2.8477590650225735]
    println( (a, b, x, x1, y1, r2, x2))
    println(2r2)
    println( *1
    @printf("2r1 = %g, 2r2 = %g, r2/r1 = %.15g\n", 2r1, 2r2, r2/r1)
    plot([x, 0, -x, x], [0, 2a + 2b, 0, 0], color=:green, lw=0.5)
    plot!([b, 0, -b], [a + 2b, 2b, a + 2b], color=:green, lw=0.5)
    plot!([a, 0, -a, 0, a], [b, 2b, b, 0, b], color=:green, lw=0.5)
    circle2(x1, y1, r1)
    circle2(x2, r2, r2, :blue)
    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, 2a + 2b, " (0,2a+2b)", :green, :left, :vcenter)
        point(b, a + 2b, " (b,a+2b)", :green, :left, :vcenter)
        point(0, 2b, "2b", :green, :center, delta=-delta)
        point(a, b, " (a,b)", :green, :left, :vcenter)
        point(x1, y1, "甲円:r1,(x1,y1)", :red, :center, delta=-delta)
        point(x2, r2, "乙円:r2,(x2,r2)", :blue, :center, delta=-delta)
        point(x, 0, "x")
    end
end;
draw(7/2, true)

    (11.040127104646325, 4.572970377067318, 12.934313455158014, 4.572970377067318, 11.040127104646325, 1.9825907407268255, 9.967156727579008)
    3.965181481453651
    (2.414213562373095, 2.4142135623730954, 2.4142135623730954)
    2r1 = 7, 2r2 = 3.96518, r2/r1 = 0.566454497350522


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

*1:2a + b)/a, a/b, (2b + 2a)/x

算額(その2023)

長野県長野市元善町 善光寺 天保3年(1832)

中村信弥「改訂増補 長野県の算額」県内の算額(P.134)
http://www.wasan.jp/zoho/zoho.html
キーワード:数列
#Julia #SymPy #算額 #和算 #数学


3 種類の数列がある(名前はどうでもよい)。

include("julia-source.txt");  # julia-source.txt ソース
using SymPy
@syms k, n;

1. 再乗衰垜

println(Int[k*(k + 1)*(k + 2)//6 for k = 1:10])

    [1, 4, 10, 20, 35, 56, 84, 120, 165, 220]

\(\displaystyle k\) 番目の項は \(\frac{k(k + 1)(k + 2)}{6}\)
\(\displaystyle n\) 項までの和は \(s_1 = \frac{n(n + 1)(n + 2)(n + 3)}{24}\)

s1 = summation(k*(k + 1)*(k + 2)/6, (k, 1, n)) |> factor
@show(s1)

    s1 = n*(n + 1)*(n + 2)*(n + 3)/24

    \(\displaystyle \frac{n \left(n + 1\right) \left(n + 2\right) \left(n + 3\right)}{24}\)

2. 三角衰垜

println(Int[k*(k + 1)//2 for k = 1:10])

    [1, 3, 6, 10, 15, 21, 28, 36, 45, 55]

\(\displaystyle k\) 番目の項は \(\frac{k(k + 1)}{2}\)
\(\displaystyle n\) 項までの和は \(s_2 = \frac{n(n + 1)(n + 2)}{6}\)

s2 = summation(k*(k + 1)/2, (k, 1, n)) |> factor
@show(s2)

    s2 = n*(n + 1)*(n + 2)/6

    \(\displaystyle \frac{n \left(n + 1\right) \left(n + 2\right)}{6}\)

3. 方垜

println(Int[k^2 for k = 1:10])

    [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

\(k\) 番目の項は \(k^2\)
\(\displaystyle n\) 項までの和は \(s_3 = \frac{n(n + 1)(2n + 1)}{6}\)

s3 = summation(k^2, (k, 1, n)) |> factor
@show(s3)

    s3 = n*(n + 1)*(2*n + 1)/6

    \(\displaystyle \frac{n \left(n + 1\right) \left(2 n + 1\right)}{6}\)

pyplot(size=(500, 300), grid=false, aspectratio=:none, label="", fontfamily="IPAMincho")
plot(s1, xlims=(0, 10), label="s1")
plot!(s2, xlims=(0, 10), label="s2")
plot!(s3, xlims=(0, 10), label="s3")

それぞれ \(n\) 項までの和について,\( (s_2 + s_3)^3 + 120s_1 = 737400\) となるという。\(n\) はいかほどか。

eq = (s2 + s3)^3 + 120s1 - 737400

    \(\displaystyle 5 n \left(n + 1\right) \left(n + 2\right) \left(n + 3\right) + \left(\frac{n \left(n + 1\right) \left(n + 2\right)}{6} + \frac{n \left(n + 1\right) \left(2 n + 1\right)}{6}\right)^{3} - 737400\)

因子分解すると \(n = 5\) が答えであることがわかる。

eq |> factor

    \(\displaystyle \frac{\left(n - 5\right) \left(n^{8} + 11 n^{7} + 70 n^{6} + 370 n^{5} + 1865 n^{4} + 9371 n^{3} + 47096 n^{2} + 235920 n + 1179840\right)}{8}\)

あっけなさ過ぎて物足りないので,もう少し規模を大きくして問題を解く。

eq = (s2 + s3)^3 + 1234567s1 - 1104160530

    \(\displaystyle \frac{1234567 n \left(n + 1\right) \left(n + 2\right) \left(n + 3\right)}{24} + \left(\frac{n \left(n + 1\right) \left(n + 2\right)}{6} + \frac{n \left(n + 1\right) \left(2 n + 1\right)}{6}\right)^{3} - 1104160530\)

同じく,因子分解して \(n = 10\) である。

eq |> factor

    \(\displaystyle \frac{\left(n - 10\right) \left(3 n^{8} + 48 n^{7} + 525 n^{6} + 5310 n^{5} + 53145 n^{4} + 1766035 n^{3} + 25067755 n^{2} + 264257787 n + 2649985272\right)}{24}\)


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

算額(その2022)

長野県長野市 久保寺観音堂 享和3年(1803)

中村信弥「改訂増補 長野県の算額」県内の算額(P.69)
キーワード:円2個,台形,対角線
#Julia #SymPy #算額 #和算 #数学


半梯(台形を横倒しにしたもの)の中に対角線を設け,日円と月円を容れる。日円の直径が 10.5 寸,月円の直径が 4.8 寸,台形の濶(高さ)が 23.8 寸のとき,狭(上底)と廣(下底)はいかほどか。

日円と月円の直径を \(r_1,\ r_2\)
狭,廣,濶を \(b,\ a,\ h\)
とおく。

⊿ABC と ⊿ADE は相似で,相似比を \(q = r_1/r_2\) とすると,

eq1: \(a = b q\) である。

\(\mathtt{BC}\) を底辺とする⊿ABC の高さは \(\mathtt{CF}\)
\(p = r_2/(r_1 + r_2)\) とおくと,
\(\mathtt{CF} = \mathtt{CD} \cdot p\)
なので,⊿ABC の面積は \(S_1 = \mathtt{BC}\cdot \mathtt{CF}/2 = b (h p)/2\) である。

また,
\(\mathtt{AB} = \mathtt{BD} \cdot p\)
\(\mathtt{BD} = \sqrt{\mathtt{CD}^2 + \mathtt{BC}^2} = \sqrt{h^2 + b^2}\)
\(\mathtt{AC} = \mathtt{CE} \cdot p\)
\(\mathtt{CE} = \sqrt{\mathtt{CD}^2 + \mathtt{DE}^2} = \sqrt{h^2 + a^2}\)
なので,⊿ABC の面積は以下のようにも表すことができる。
\(S_2 = (\mathtt{AB} + \mathtt{BC} + \mathtt{CA})r_2/2 = (p\sqrt{h^2 + b^2} + b + p\sqrt{h^2 + a^2}) r_2/2\)

eq2: \(S_1 = S_2\) である。

eq1, eq2 の連立方程式を解き,\(a,\ b\) を求める。

include("julia-source.txt");  # julia-source.txt ソース
using SymPy
@syms r1, r2, h, a, b, p, q
p = r2/(r1 + r2)
q = r1/r2
eq1 = a - b*q
eq2 = b*(h*p)/2 - (p*sqrt(h^2 + b^2) + b + p*sqrt(h^2 + a^2))*r2/2;

res = solve([eq1, eq2], (b, a))[1]  # 1 of 2

    (-2*r2*sqrt(-h/( (h - 2*r1)*(h - 2*r2)*(-h + 2*r1 + 2*r2)))*(-h + r1 + r2), -2*r1*sqrt(-h/( (h - 2*r1)*(h - 2*r2)*(-h + 2*r1 + 2*r2)))*(-h + r1 + r2))

# b: 狭(上底)
ans_b = res[1]
@show(ans_b)

    ans_b = -2*r2*sqrt(-h/( (h - 2*r1)*(h - 2*r2)*(-h + 2*r1 + 2*r2)))*(-h + r1 + r2)

    \(\displaystyle - 2 r_{2} \sqrt{- \frac{h}{\left(h - 2 r_{1}\right) \left(h - 2 r_{2}\right) \left(- h + 2 r_{1} + 2 r_{2}\right)}} \left(- h + r_{1} + r_{2}\right)\)

ans_b(r1 => 10.5/2, r2 => 4.8/2, h => 23.8)

    \(8.16\) ... 狭

# a: 廣(下底)
ans_a = res[2]
@show(ans_a)

    ans_a = -2*r1*sqrt(-h/( (h - 2*r1)*(h - 2*r2)*(-h + 2*r1 + 2*r2)))*(-h + r1 + r2)

    \(\displaystyle - 2 r_{1} \sqrt{- \frac{h}{\left(h - 2 r_{1}\right) \left(h - 2 r_{2}\right) \left(- h + 2 r_{1} + 2 r_{2}\right)}} \left(- h + r_{1} + r_{2}\right)\)

ans_a(r1 => 10.5/2, r2 => 4.8/2, h => 23.8)

    \(17.85\) ... 廣

図を描くためには,日円,月円の中心座標が必要であるが,本質ではないので,描画プログラム中で計算する。

描画関数プログラムのソースを見る

function draw(r1, r2, h, more=false)
    pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
    b = -2*r2*sqrt(-h/( (h - 2*r1)*(h - 2*r2)*(-h + 2*r1 + 2*r2)))*(-h + r1 + r2)
    a = b*(r1/r2)
    println( (a, b))
    @syms y1, y2
    eq1 = dist2(0, 0, h, a, h - r1, y1, r1)
    eq2 = dist2(0, 0, h, a, r2, y2, r2)
    (y1, y2) = float.(solve([eq1, eq2], (y1, y2))[2])  # 2 of 4
    plot([0, h, h, 0, 0], [0, 0, a, b, 0], color=:green, lw=0.5)
    segment(0, 0, h, a, :magenta)
    segment(0, b, h, 0, :magenta)
    circle(h - r1, y1, r1)
    circle(r2, y2, r2, :blue)
    println( (y1, y2))
    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(h, a, " (h,a)", :green, :left, :vcenter)
        point(h, 0, " h", :green, :left, :vcenter)
        point(0, b, "b ", :green, :right, :vcenter)
        point(h - r1, y1, "日円:r1,(h-r1,y1)", :red, :center, delta=-delta)
        point(r2, y2, "乙円:r2\n(r2,y2)", :blue, :center, delta=-delta)
        xlims!(-5delta, h + 10delta)
    end
end;
draw(10.5/2, 4.8/2, 23.8, true)

    (17.85, 8.16)
    (7.35, 4.8)


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

算額(その2021)

長野県坂城町北日名 天幕社 慶応元年(1865)

中村信弥「改訂増補 長野県の算額」県内の算額(P.210)
http://www.wasan.jp/zoho/zoho.html
キーワード:円6個,菱形
#Julia #SymPy #算額 #和算 #数学

菱形の中に,交わる等円 2 個を容れ,隙間に甲円,乙円,丙円,丁円を容れる。甲円の直径が 9 寸,乙円の直径が 1 寸,丙円の直径が 4 寸,丁円の直径が 2.56 寸のとき,等円の直径はいかほどか。

最初に言っておく。与えられた条件では図は描けない。今まで,だれもこんな基礎的なことに気づかなかったのか?

算額の「答」では,等円の直径は 10.25 寸だという。しかし,中村が提示している図は,等円の直径が 10.25 寸としたとき,甲円の直径が約 2.423 寸,乙円の直径が約 1.677 寸,丙円の直径が約 2.609寸,丁円の直径が約 1.547寸ほどのものである。

甲円の直径が 9 寸というのはほぼ等円に近い大きさである。また,甲円の大きさに対して乙円の直径が 1 寸とは,この3つの円を菱形の辺に接するようにして描くことはできない。コンパスと定規を使える小学生にもわかることだ。
中村は難しい数式を駆使し,解を得る式を導いた。確かにその式に甲乙丙丁円の直径を当てはめると等円の直径は 10.25 になる。しかし,そもそもそんな図は描けないのだから,得られた式が術と一致しても,何の意味もないことである。

以下では,甲円,乙円,丙円,丁円のまともな直径が与えられたとき,等円の直径がいかほどになるかを数値的に求める。
なお,等円の位置関係については言及がないが,2 個の等円は互いの中心を通ると仮定されているようだ。

菱形の対角線の長さを \(2a,\ 2b,\ a > b\)
等円の半径と中心座標を \(r0,\ (r0/2,\ 0)\)
甲円の半径と中心座標を \(r_1,\ (x_1,\ y_1)\)
乙円の半径と中心座標を \(r_2,\ (x_2,\ y_2)\)
丙円の半径と中心座標を \(r_3,\ (x_3,\ y_3)\)
丁円の半径と中心座標を \(r_4,\ (x_4,\ y_4)\)
とおき,以下の連立方程式の数値解を求める。

include("julia-source.txt");  # julia-source.txt ソース
using SymPy
@syms a, b, r0, x0, r1, x1, y1, r2, x2, y2, r3, x3, y3, r4, x4, y4
x0 = r0/2
eq1 = (x1 - x0)^2 + y1^2 - (r0 + r1)^2
eq2 = (x2 - x0)^2 + y2^2 - (r0 + r2)^2
eq3 = (x1 - x2)^2 + (y1 - y2)^2 - (r1 + r2)^2
eq4 = r0/(a - x0) - b/sqrt(a^2 + b^2)
eq5 = dist2(a, 0, 0, -b, x1, y1, r1)
eq6 = dist2(a, 0, 0, b, x2, y2, r2)
eq7 = (x3 + x0)^2 + y3^2 - (r0 + r3)^2
eq8 = (x4 + x0)^2 + y4^2 - (r0 + r4)^2
eq9 = (x3 - x4)^2 + (y3 - y4)^2 - (r3 + r4)^2
eq10 = dist2(-a, 0, 0, -b, x3, y3, r3)
eq11 = dist2(-a, 0, 0, b, x4, y4, r4);

println(eq1, ", # eq1")
println(eq2, ", # eq2")
println(eq3, ", # eq3")
println(eq4, ", # eq4")
println(eq5, ", # eq5")
println(eq6, ", # eq6")
println(eq7, ", # eq7")
println(eq8, ", # eq8")
println(eq9, ", # eq9")
println(eq10, ", # eq10")
println(eq11, ", # eq11")

y1^2 + (-r0/2 + x1)^2 - (r0 + r1)^2, # eq1
y2^2 + (-r0/2 + x2)^2 - (r0 + r2)^2, # eq2
-(r1 + r2)^2 + (x1 - x2)^2 + (y1 - y2)^2, # eq3
-b/sqrt(a^2 + b^2) + r0/(a - r0/2), # eq4
a^2*b^2 + 2*a^2*b*y1 - a^2*r1^2 + a^2*y1^2 - 2*a*b^2*x1 - 2*a*b*x1*y1 - b^2*r1^2 + b^2*x1^2, # eq5
a^2*b^2 - 2*a^2*b*y2 - a^2*r2^2 + a^2*y2^2 - 2*a*b^2*x2 + 2*a*b*x2*y2 - b^2*r2^2 + b^2*x2^2, # eq6
y3^2 + (r0/2 + x3)^2 - (r0 + r3)^2, # eq7
y4^2 + (r0/2 + x4)^2 - (r0 + r4)^2, # eq8
-(r3 + r4)^2 + (x3 - x4)^2 + (y3 - y4)^2, # eq9
a^2*b^2 + 2*a^2*b*y3 - a^2*r3^2 + a^2*y3^2 + 2*a*b^2*x3 + 2*a*b*x3*y3 - b^2*r3^2 + b^2*x3^2, # eq10
a^2*b^2 - 2*a^2*b*y4 - a^2*r4^2 + a^2*y4^2 + 2*a*b^2*x4 - 2*a*b*x4*y4 - b^2*r4^2 + b^2*x4^2, # eq11

function driver(r1, r2, r3, r4)
    function H(u)
        (a, b, r0, x1, y1, x2, y2, x3, y3, x4, y4) = u
        return [
            y1^2 + (-r0/2 + x1)^2 - (r0 + r1)^2, # eq1
            y2^2 + (-r0/2 + x2)^2 - (r0 + r2)^2, # eq2
            -(r1 + r2)^2 + (x1 - x2)^2 + (y1 - y2)^2, # eq3
            -b/sqrt(a^2 + b^2) + r0/(a - r0/2), # eq4
            a^2*b^2 + 2*a^2*b*y1 - a^2*r1^2 + a^2*y1^2 - 2*a*b^2*x1 - 2*a*b*x1*y1 - b^2*r1^2 + b^2*x1^2, # eq5
            a^2*b^2 - 2*a^2*b*y2 - a^2*r2^2 + a^2*y2^2 - 2*a*b^2*x2 + 2*a*b*x2*y2 -                 b^2*r2^2 + b^2*x2^2, # eq6
            y3^2 + (r0/2 + x3)^2 - (r0 + r3)^2, # eq7
            y4^2 + (r0/2 + x4)^2 - (r0 + r4)^2, # eq8
            -(r3 + r4)^2 + (x3 - x4)^2 + (y3 - y4)^2, # eq9
            a^2*b^2 + 2*a^2*b*y3 - a^2*r3^2 + a^2*y3^2 + 2*a*b^2*x3 + 2*a*b*x3*y3 -             b^2*r3^2 + b^2*x3^2, # eq10
            a^2*b^2 - 2*a^2*b*y4 - a^2*r4^2 + a^2*y4^2 + 2*a*b^2*x4 - 2*a*b*x4*y4 -             b^2*r4^2 + b^2*x4^2, # eq11
        ]
    end;
    iniv = BigFloat[12.441, 7.921, 5.312, 9.226, -0.559, 8.667, 1.398, -9.319, -0.373, -8.574, 1.584]
    res = nls(H, ini=iniv)
    return res[1]
end;

術自体は正しいようだ。

using SymPy
@syms d1, d2, d3, d4, t1, t2, t3, t4
t1 = √d1
t2 = √d2
t3 = √d3
t4 = √d4
x = ( ( (t1 + t2)*(t3 + t4) - (t1*t2 + t3*t4))^2 - (d1 + d2)*(d3 + d4)) /
( (t1 + t2) - (t3 + t4))^2

    \(\displaystyle \frac{- \left(d_{1} + d_{2}\right) \left(d_{3} + d_{4}\right) + \left(- \sqrt{d_{1}} \sqrt{d_{2}} - \sqrt{d_{3}} \sqrt{d_{4}} + \left(\sqrt{d_{1}} + \sqrt{d_{2}}\right) \left(\sqrt{d_{3}} + \sqrt{d_{4}}\right)\right)^{2}}{\left(\sqrt{d_{1}} + \sqrt{d_{2}} - \sqrt{d_{3}} - \sqrt{d_{4}}\right)^{2}}\)

x(d1 => 9, d2 => 1, d3 => 4, d4 => 2.56)

     \(10.25\)

x(d1 => 2*1.2115030924780115, d2 => 2*0.8387329101770848, d3 => 2*1.3046956380532433, d4 => 2*0.7734981282744228)

     \(10.2500000001865\)

描画関数プログラムのソースを見る

function draw(r1, r2, r3, r4, more=false)
    pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
    (a, b, r0, x1, y1, x2, y2, x3, y3, x4, y4) = driver(r1, r2, r3, r4)
    x0 = r0/2
    str = @sprintf("甲円の直径 = %.15g\n乙円の直径 = %.15g\n丙円の直径 = %.15g\n丁円の直径 = %.15g\n等円の直径 = %.15g\n", 2r1, 2r2, 2r3, 2r4, 2r0)
    plot([a, 0, -a, 0, a], [0, b, 0, -b, 0], color=:green)
    circle2(x0, 0, r0, :purple)
    circle(x1, y1, r1)
    circle(x2, y2, r2, :blue)
    circle(x3, y3, r3, :magenta)
    circle(x4, y4, r4, :darkorange)
    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, str, :black, :center, delta=-delta, mark=false)
    end
end;
draw(1.2115030924780115, 0.8387329101770848, 1.3046956380532433, 0.7734981282744228, true)



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

算額(その2020)

長野県長野市 久保寺観音堂 享和3年(1803)

中村信弥「改訂増補 長野県の算額」県内の算額(P.71)
http://www.wasan.jp/zoho/zoho.html
キーワード:方程式
#Julia #SymPy #算額 #和算 #数学


甲円,乙円,丙円がある。甲円と乙円の直径の和と丙円の面積の積が \(A\),甲円と乙円の直径の和の平方と丙円の直径の積が \(B\) のとき,丙円の直径を \(A,\ B\) で表せ。
甲円,乙円,丙円の直径を \(d_1,\ d_2,\ d_3\) とおき,以下の連立方程式を解く。

include("julia-source.txt");  # julia-source.txt ソース
using SymPy
@syms d1, d2, d3, A, B, t
eq1 = (d1 + d2)*PI*(d3/2)^2 ⩵ A
eq2 = (d1 + d2)^2*d3 ⩵ B;

変数が 3 個だが,条件式が 2 つしかない。
しかし,eq1, eq2 に共通して \( (d_1 + d_2)\) があるので,これは新たな変数として \(t = d_1 + d_2\) を用いれば,変数の個数と条件の個数が同じになるので,連立方程式を解くことができる。

eq1 = t*PI*(d3/2)^2 ⩵ A
eq2 = t^2*d3 ⩵ B
res = solve( (eq1, eq2), (d3, t))[3];  # 3 of 3

# d3: 丙円の直径
res[1]

    \(\displaystyle \frac{2 \sqrt[3]{2} A \sqrt[3]{\frac{B^{2}}{A}}}{\pi^{\frac{2}{3}} B}\)

術は,\(\sqrt[3]{\frac{16A^2}{\pi^2 B}}\) なので,同値な式である。

x = (16*A^2/(PI^2*B))^(1//3)
@show(x)

    x = 2*2^(1/3)*(A^2/B)^(1/3)/pi^(2/3)

    \(\displaystyle \frac{2 \sqrt[3]{2} \sqrt[3]{\frac{A^{2}}{B}}}{\pi^{\frac{2}{3}}}\)

(res[1] - x)(A => 10, B => 3)

    \(0\)


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

算額(その2019)

長野県佐久市八幡 八幡神社 安永9年(1780)

中村信弥「改訂増補 長野県の算額」県内の算額(P.34)
http://www.wasan.jp/zoho/zoho.html
キーワード:外円,正方形,矢
#Julia #SymPy #算額 #和算 #数学


円の中に正方形と 4 本の矢を容れる。矢の長さの二乗と外積(円の面積から正方形の面積を除いたもの)の和が 9.8,円の直径の平方根と円周の和が 14.8 のとき,矢の長さはいかほどか。ただし,円周率としては 3.2 を用いよ。

矢の長さを \(x\),円の半径を \(r\),正方形の一辺の長さを \(s\) とおき,以下の連立方程式を解く。

include("julia-source.txt");  # julia-source.txt ソース
using SymPy
@syms x, r, s, 円周率, A, B
s = 2r - 2x
eq1 = x^2 + 円周率*r^2 - s^2 - A
eq2 = sqrt(2r) + 円周率*2r - B;

まず,eq2 を解き \(r\) を求める。

# r: 円の半径
ans_r = solve(eq2, r)[1]  # 1 of 2
@show(ans_r)

    ans_r = (2*B*円周率 - sqrt(4*B*円周率 + 1) + 1)/(4*円周率^2)

    \(\displaystyle \frac{2 B 円周率 - \sqrt{4 B 円周率 + 1} + 1}{4 円周率^{2}}\)

eq1 の \(r\) に \(ans_r\) を代入し,得られる方程式を解いて \(x\) を求める。

eq1_2 = eq1(r => ans_r)

    \(\displaystyle - A + x^{2} - \left(- 2 x + \frac{2 B 円周率 - \sqrt{4 B 円周率 + 1} + 1}{2 円周率^{2}}\right)^{2} + \frac{\left(2 B 円周率 - \sqrt{4 B 円周率 + 1} + 1\right)^{2}}{16 円周率^{3}}\)

# x: 矢の長さ
ans_x = solve(eq1_2, x)[1]
@show(ans_x)

    ans_x = (2*B*円周率/3 - sqrt(4*B*円周率 + 1)/3 - sqrt(-48*A*円周率^4 + 12*B^2*円周率^3 + 16*B^2*円周率^2 - 12*B*円周率^2*sqrt(4*B*円周率 + 1) + 24*B*円周率^2 - 16*B*円周率*sqrt(4*B*円周率 + 1) + 32*B*円周率 - 6*円周率*sqrt(4*B*円周率 + 1) + 6*円周率 - 8*sqrt(4*B*円周率 + 1) + 8)/12 + 1/3)/円周率^2

    \(\displaystyle \frac{\frac{2 B 円周率}{3} - \frac{\sqrt{4 B 円周率 + 1}}{3} - \frac{\sqrt{- 48 A 円周率^{4} + 12 B^{2} 円周率^{3} + 16 B^{2} 円周率^{2} - 12 B 円周率^{2} \sqrt{4 B 円周率 + 1} + 24 B 円周率^{2} - 16 B 円周率 \sqrt{4 B 円周率 + 1} + 32 B 円周率 - 6 円周率 \sqrt{4 B 円周率 + 1} + 6 円周率 - 8 \sqrt{4 B 円周率 + 1} + 8}}{12} + \frac{1}{3}}{円周率^{2}}\)

A = 9.8, B = 14.8, 円周率 = 3.2 のとき,矢の長さは 1 である。

ans_x(A => 98//10, B => 148//10, 円周率 => 32//10)

    \(1\)

ちなみに,円周率として \(\pi = 3.141592653589793\) を用いたとき,A = 103, B = 50 のとき,矢の長さは 3.00000542000365 になる。ただし,円の直径はきれいな数ではない。

ans_x(A => 103, B => 50, 円周率 => 3.141592653589793)

    \(3.00000542000365\)

ans_r(A => 103, B => 50, 円周率 => 3.141592653589793)

    \(7.3476360257415\)


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

算額(その2018)

岩手県一関市 一関八幡神社 天保9年(1838)

今有如図 03014
https://w.atwiki.jp/sangaku/pages/198.html
キーワード:円4個,外円,円弧
#Julia #SymPy #算額 #和算 #数学


外円の中に円弧を 2 個と,等円を 3 個容れる。2 個の円弧は外円と同じ半径で,外円の円周の 1 点を通る。等円の直径が 1 寸のとき,外円の直径はいかほどか。

外円の半径と中心座標を \(R,\ (0,\ 0)\)
等円の半径と中心座標を \(r,\ (0,\ R - r),\ (x_1,\ y_1),\ (x_2,\ y_2)\)
円弧の半径と中心座標を \(R,\ (0,\ -2r),\ (x_3,\ y_3)\)
とおき,以下の連立方程式を解く。

include("julia-source.txt");  # julia-source.txt ソース
using SymPy
@syms R, r, x1, y1, x2, y2, x3, y3, x0, y0
eq1 = x1^2 + y1^2 - (R - r)^2
eq2 = (x3 - x1)^2 + (y3 - y1)^2 - (R - r)^2
eq3 = (x3 - x2)^2 + (y3 - y2)^2 - (R + r)^2
eq4 = x2^2 + (y2 + 2r)^2 - (R - r)^2
eq5 = (x0 - x3)^2 + (y0 - y3)^2 - R^2
eq6 = x0^2 + (y0 + 2r)^2 - R^2
eq7 = x0^2 + y0^2 - R^2
eq8 = x1/y1 - x3/y3
eq9 = x2/(y2 + 2r) - x3/(y3 + 2r);
# solve([eq1, eq2, eq3, eq4, eq5, eq6, eq7, eq8, eq9],
#    (r, x1, y1, x2, y2, x3, y3, x0, y0))

function driver(r)
    function H(u)
    (R, x1, y1, x2, y2, x3, y3, x0, y0) = u
        return [
            x1^2 + y1^2 - (R - r)^2,  # eq1
            (x3 - x1)^2 + (y3 - y1)^2 - (R - r)^2,  # eq2
            (x3 - x2)^2 + (y3 - y2)^2 - (R + r)^2,  # eq3
            x2^2 + (y2 + 2r)^2 - (R - r)^2,  # eq4
            (x0 - x3)^2 + (y0 - y3)^2 - R^2,  # eq5
            x0^2 + (y0 + 2r)^2 - R^2,  # eq6
            x0^2 + y0^2 - R^2,  # eq7
            x1/y1 - x3/y3,  # eq8
            x2/(y2 + 2r) - x3/(y3 + 2r),  # eq9
        ]
    end;
    iniv = (r/0.5).*BigFloat[1.44, 0.34, -0.88, -0.61, -0.29, 0.65, -1.75, 1.35, -0.50]
    res = nls(H, ini=iniv)
    res[2] && return res[1]
end;
driver(1)[1]

    2.875129794162779

外円の直径は,等円の直径の 2.875129794162779 倍である。

下側の円弧と外円の交点座標 \( (x_4,\ y_4)\) は以下のようになる。

using SymPy
@syms R, r, x1, y1, x2, y2, x3, y3, x0, y0
@syms x4, y4
eq01 = (x4 - x3)^2 + (y4 - y3)^2 - R^2
eq02 = x4^2 + y4^2 - R^2
res2 = solve([eq01, eq02], (x4, y4))[1]  # 1 of 2

    ( (x3^2 + y3^2 - 2*y3*(-x3*sqrt(-(x3^2 + y3^2)*(-4*R^2 + x3^2 + y3^2))/(2*(x3^2 + y3^2)) + y3/2))/(2*x3), -x3*sqrt(-(x3^2 + y3^2)*(-4*R^2 + x3^2 + y3^2))/(2*(x3^2 + y3^2)) + y3/2)

描画関数プログラムのソースを見る

function draw(r, more=false)
    pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
    (R, x1, y1, x2, y2, x3, y3, x0, y0) = driver(r)
    println( (R, x1, y1, x2, y2, x3, y3, x0, y0))
    plot()
    circle(0, 0, R)
    θ = atand(y0 + 2r, x0)
    circle(0, -2r, R, :magenta, beginangle=θ, endangle=180 - θ)
    (x4, y4) = ( (x3^2 + y3^2 - 2*y3*(-x3*sqrt(-(x3^2 + y3^2)*(-4*R^2 + x3^2 + y3^2))/(2*(x3^2 + y3^2)) + y3/2))/(2*x3), -x3*sqrt(-(x3^2 + y3^2)*(-4*R^2 + x3^2 + y3^2))/(2*(x3^2 + y3^2)) + y3/2)
    θ2 = atand(y0 - y3, x0 - x3)
    θ3 = atand(y3 - y4, x3 - x4)
    println(θ3)
    circle(x3, y3, R, :darkorange, beginangle=θ2, endangle=180 + θ3)
    circle(0, R - r, r, :blue)
    circle(x1, y1, r, :blue)
    circle(x2, y2, r, :blue)
    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, R, "R", :blue, :center, :bottom, delta=delta/2)
        point(0, R - r, "等円:r,(0,R-r)", :blue, :center, :bottom, delta=delta/2)
        point(x1, y1, "等円:r,(x1,y1)", :blue, :center, :bottom, delta=delta/2)
        point(x2, y2, "等円:r,(x2,y2)", :blue, :center, :bottom, delta=delta/2)
        point(x3, y3, " 円弧:R,(x3,y3)", :darkorange, :left, :vcenter)
        point(0, -2r, " 円弧:R,(0,-2r)", :magenta, :left, :vcenter)
        point(x0, y0, "(x0,y0)", :red, :left, delta=-delta/2)
        point(x4, y4, "(x4,y4)", :red, :right, delta=-delta/2)
    end
end;
draw(1, true)

    (2.875129794162779, 0.652189615220069, -1.7580558724784727, -1.22294017894271, -0.5785468478755559, 1.304379230440138, -3.5161117449569455, 2.695620769559862, -1.0)
    -20.353446815337414


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

算額(その2017)

静岡県磐田市鎌田 医王寺(鎌田山金剛院醫王寺) 安永8年(1779)

https://www.iouji.net/
https://www.iouji.net/visit/treasure/t02/
キーワード:円3個,直角三角形,正方形
#Julia #SymPy #算額 #和算 #数学


直角三角形の中に正方形と大円,中円,小円を容れる。大中小 3 円の直径の和が 94 寸,斜辺と正方形の一辺の差が 125 寸のとき,正方形の一辺の長さはいかほどか。

大円,中円,小円の半径を \(r_1,\ r_2, r_3\)
正方形の一辺の長さを \(s\)
直角三角形の 3 辺の長さを \(c,\ d,\ g\)
大中小 3 円の直径の和を \(K_1\)
斜辺と正方形の一辺の差を \(K_2\)
そのほか図のように記号を定め,以下の連立方程式を解く。

include("julia-source.txt");  # julia-source.txt ソース
using SymPy
@syms a::positive, b::positive, c::positive, d::positive,
      e::positive, f::positive, g::positive, s::positive,
      r1::positive, r2::positive, r3::positive
K1 = 94
K2 = 125
eq1 = 2(r1 + r2 + r3) - K1
eq2 = g - s - K2
eq3 = s + f - (c - a) - 2r1
eq4 = s + e - (d - b) - 2r2
eq5 = a + b - s - 2r3
eq6 = (c - a)/s - r1/r3
eq7 = (d - b)/(c - a) - r2/r1
eq8 = (s + e + f) - g
eq9 = c^2 + d^2 - (s + e + f)^2
eq10 = a^2 + b^2 - s^2
eq11 = (s*f + s*e + a*b)/2 + s^2 - c*d/2;

\(K_1 = 94,\ K_2 = 125\) と実値を与えれば,連立方程式を解くことができ,すべてのパラメータは整数値になる。
このときの図が上に示したものである。

res = solve([eq1, eq2, eq3, eq4, eq5, eq6, eq7, eq8, eq9, eq10, eq11],
    (a, b, c, d, e, f, g, s, r1, r2, r3))[4]  # 4 of 4

    (48, 36, 148, 111, 45, 80, 185, 60, 20, 15, 12)

\(K_1,\ K_2\) に任意の値を与えた場合,方程式は解けないこともある(有限の時間内に解が得られない)。

初期値が適切であれば数値解を求めることができる(多くの場合,関数中で定義した初期値で十分のようである)。

\(K_1 = 94,\ K_2 = 125\) の場合の数値解は,解析解と同じものが得られる。

\(正方形の一辺の長さ = 60\)
\(直径の和 = 94,\ 正方形の一辺と弦の差 = 125\)
\(a = 48,\ b = 36,\ c = 148,\ d = 111,\ e = 45\)
\(f = 80,\ g = 185,\ s = 60\)
\(r_1 = 20,\ r_2 = 15,\ r_3 = 12\)

function driver(K1, K2)
    function H(u)
        (a, b, c, d, e, f, g, s, r1, r2, r3) = u
        return [
            2(r1 + r2 + r3) - K1, # eq1
            g - s - K2, # eq2
            s + f - (c - a) - 2r1, # eq3
            s + e - (d - b) - 2r2, # eq4
            a + b - s - 2r3, # eq5
            (c - a)/s - r1/r3, # eq6
            (d - b)/(c - a) - r2/r1, # eq7
            (s + e + f) - g, # eq8
            c^2 + d^2 - (s + e + f)^2, # eq9
            a^2 + b^2 - s^2, # eq10
            (s*f + s*e + a*b)/2 + s^2 - c*d/2, # eq11
        ]
    end;
    iniv = 37 *BigFloat[1.29836, 0.97287, 4, 3, 1.2178, 2.16163, 5,
        1.62057, 0.53916, 0.4032, 0.32628]
    res = nls(H, ini=iniv)[1]
end;

術は,以下の \(x\) についての 5 次式を解けばよいとしている。

\( ( ( (2x^2 + 2K_1*K_2 - 8K_2^2)*x +6K_1*K_2^2 - 8K_2^3)*x + 6K_1*K_2^3 - 2K_2^4)*x + 2K_1*K_2^4 - (x+ K_2)^2*K_1^2*K_2 = 0\)

@syms K1, K2, x
f = ( ( (2x^2 + 2K1*K2 - 8K2^2)*x +6K1*K2^2 - 8K2^3)*x + 6K1*K2^3 - 2K2^4)*x + 2K1*K2^4 - (x+ K2)^2*K1^2*K2

    \(- K_{1}^{2} K_{2} \left(K_{2} + x\right)^{2} + 2 K_{1} K_{2}^{4} + x \left(6 K_{1} K_{2}^{3} - 2 K_{2}^{4} + x \left(6 K_{1} K_{2}^{2} - 8 K_{2}^{3} + x \left(2 K_{1} K_{2} - 8 K_{2}^{2} + 2 x^{2}\right)\right)\right)\)

\(f\) は \( (K_2 + x)\) という因子を持つので,実際には \(x\) の 3 次式を解けばよい。

f |> factor

    \(\left(K_{2} + x\right)^{2} \left(- K_{1}^{2} K_{2} + 2 K_{1} K_{2}^{2} + 2 K_{1} K_{2} x - 2 K_{2}^{2} x - 4 K_{2} x^{2} + 2 x^{3}\right)\)

g = -K1^2*K2 + 2*K1*K2^2 + 2*K1*K2*x - 2*K2^2*x - 4*K2*x^2 + 2*x^3

    \(- K_{1}^{2} K_{2} + 2 K_{1} K_{2}^{2} + 2 K_{1} K_{2} x - 2 K_{2}^{2} x - 4 K_{2} x^{2} + 2 x^{3}\)

\(K_1 = 94,\ K_2 = 125\) の場合には確かに,正方形の一辺の長さは 60 という正解を与える。

solve(g(K1 => 94, K2 => 125))[1]

    \(60\)

また,たとえば \(K_1 = 80,\ K_2 = 160\) の場合にも,正方形の一辺の長さは 55.0399356501993 という正解を与える。

res = solve(g(K1 => 80, K2 => 150))[1].evalf()

    \(55.0399356501993 - 7.0 \cdot 10^{-21} i\)

上の数値解を求めるプログラムでの結果と一致する。

正方形の一辺の長さ = 55.0399356501993
直径の和 = 80, 正方形の一辺と弦の差 = 150
a = 50.4343, b = 22.0402, c = 187.883, d = 82.1063, e = 24.0529
f = 125.947, g = 205.04, s = 55.0399
r1 = 21.7693, r2 = 9.51337, r3 = 8.71732

描画関数プログラムのソースを見る

function draw(K1, K2, more=false)
    pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
    (a, b, c, d, e, f, g, s, r1, r2, r3) = driver(K1, K2)
    @printf("正方形の一辺の長さ = %.15g\n", s)
    @printf("直径の和 = %.15g, 正方形の一辺と弦の差 = %g\n", 2(r1 + r2 + r3), g - s)
    @printf("a = %g, b = %g, c = %g, d = %g, e = %g\nf = %g, g = %g, s = %g\nr1 = %g, r2 = %g, r3 = %g\n",
        a, b, c, d, e, f, g, s, r1, r2, r3)
    plot([0, c, 0, 0], [0, 0, d, 0], color=:green, lw=0.5)
    plot!([b, 0, a, a + b], [b + a, b, 0, a], color=:green, lw=0.5)
    circle(r3, r3, r3)
    x1 = c - r1/tan(atan(d, c)/2)
    circle(x1, r1, r1, :blue)
    y2 = d - r2/tan(atan(c, d)/2)
    circle(r2, y2, r2, :magenta)
    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(x1, r1, "大円:r1,(x1,r1)", :blue, :center, delta=-delta)
        point(r2, y2, "中円:r2\n(r2,y2)", :magenta, :center, delta=-delta)
        point(r3, r3, "小円:r3\n(r3,r3)", :red, :center, delta=-delta)
        point(a, 0, "a", :green, :center, delta=-delta)
        point(c, 0, "c", :green, :center, delta=-delta)
        point(0, b, "b ", :green, :right, :vcenter)
        point(0, d, "d ", :green, :right, :vcenter)
        dimension_line(0, d, b, a + b, "e", :tomato, delta=2delta, deltax=2delta, length=s/15)
        dimension_line(b, a + b, a + b, a, "s", :darkorange, delta=2delta, deltax=2delta, length=s/15)
        dimension_line(a + b, a, c, 0, "f", :purple, delta=2delta, deltax=2delta, length=s/15)
        plot!(xlims=(-5delta, c + delta), ylims=(-5delta, d + delta))
    end
end;
draw(94, 125, true)

    正方形の一辺の長さ = 60
    直径の和 = 94, 正方形の一辺と弦の差 = 125
    a = 48, b = 36, c = 148, d = 111, e = 45
    f = 80, g = 185, s = 60
    r1 = 20, r2 = 15, r3 = 12


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

算額(その2016)

静岡県磐田市鎌田 医王寺(鎌田山金剛院醫王寺) 安永8年(1779)

https://www.iouji.net/
https://www.iouji.net/visit/treasure/t02/
キーワード:正方形,長方形
#Julia #SymPy #算額 #和算 #数学


正方形の中に長方形を容れる。長方形の長辺が 39 寸,短辺が 12 寸のとき,正方形の一辺の長さはいかほどか。

長方形の長辺,短辺を \(K_1,\ K_2\)
正方形の一辺の長さを \(a\)
正方形の辺上にある長方形の頂点座標を \( (a,\ b),\ (c,\ a),\ (0,\ d)\)
とおき,以下の連立方程式を解く。(かなりの計算時間が必要)

include("julia-source.txt");  # julia-source.txt ソース
using SymPy
@syms a::positive, b::positive, c::positive, d::positive,
      K1::positive, K2::positive
eq1 = d/a - (a - b)/(a - c)
eq2 = d/a - c/(a - d)
eq3 = (a - b)^2 + (a - c)^2 - K1^2
eq4 = (a - d)^2 + c^2 - K2^2;
@time res = solve([eq1, eq2, eq3, eq4], (a, b, c, d))[4];  # 4 of 6

    242.827521 seconds (3.05 M allocations: 299.919 MiB, 0.04% gc time, 0.16% compilation time)

# a: 正方形の一辺の長さ
ans_a = res[1] |> factor
@show(ans_a)

    ans_a = sqrt(2)*sqrt( (K1^4 - 3*K1^2*K2^2 + K1^2*sqrt(K1 + 3*K2)*sqrt(K1^3 - 3*K1^2*K2 + 3*K1*K2^2 - K2^3) + 4*K1*K2^3 - 2*K2^4)/(2*K1^2 - 2*K1*K2 + K2^2))*(K1^2 - 2*K1*K2 + K2^2 + sqrt(K1^4 - 6*K1^2*K2^2 + 8*K1*K2^3 - 3*K2^4))/(4*(K1 - K2)^2)

    \(\displaystyle \frac{\sqrt{2} \sqrt{\frac{K_{1}^{4} - 3 K_{1}^{2} K_{2}^{2} + K_{1}^{2} \sqrt{K_{1} + 3 K_{2}} \sqrt{K_{1}^{3} - 3 K_{1}^{2} K_{2} + 3 K_{1} K_{2}^{2} - K_{2}^{3}} + 4 K_{1} K_{2}^{3} - 2 K_{2}^{4}}{2 K_{1}^{2} - 2 K_{1} K_{2} + K_{2}^{2}}} \left(K_{1}^{2} - 2 K_{1} K_{2} + K_{2}^{2} + \sqrt{K_{1}^{4} - 6 K_{1}^{2} K_{2}^{2} + 8 K_{1} K_{2}^{3} - 3 K_{2}^{4}}\right)}{4 \left(K_{1} - K_{2}\right)^{2}}\)

長方形の長辺が 39 寸,短辺が 12 寸のとき,正方形の一辺の長さは 38.4 寸である。

ans_a(K1 => 39, K2 => 12).evalf()

    \(38.4\)

# b
ans_b = res[2]
@show(ans_b)

    ans_b = sqrt(2)*K2*(K1^2 - 2*K1*K2 + K2^2 + sqrt(K1^4 - 6*K1^2*K2^2 + 8*K1*K2^3 - 3*K2^4))/(2*sqrt( (K1^2*(K1^2 - 3*K2^2 + sqrt(K1 + 3*K2)*sqrt(K1^3 - 3*K1^2*K2 + 3*K1*K2^2 - K2^3)) + 2*K2^3*(2*K1 - K2))/(2*K1^2 - 2*K1*K2 + K2^2))*(K1 - K2))

    \(\displaystyle \frac{\sqrt{2} K_{2} \left(K_{1}^{2} - 2 K_{1} K_{2} + K_{2}^{2} + \sqrt{K_{1}^{4} - 6 K_{1}^{2} K_{2}^{2} + 8 K_{1} K_{2}^{3} - 3 K_{2}^{4}}\right)}{2 \sqrt{\frac{K_{1}^{2} \left(K_{1}^{2} - 3 K_{2}^{2} + \sqrt{K_{1} + 3 K_{2}} \sqrt{K_{1}^{3} - 3 K_{1}^{2} K_{2} + 3 K_{1} K_{2}^{2} - K_{2}^{3}}\right) + 2 K_{2}^{3} \left(2 K_{1} - K_{2}\right)}{2 K_{1}^{2} - 2 K_{1} K_{2} + K_{2}^{2}}} \left(K_{1} - K_{2}\right)}\)

ans_b(K1 => 39, K2 => 12).evalf()

    \(15.0\)

# c
ans_c = res[3] |> factor
@show(ans_c)

    ans_c = sqrt(2)*K2*(K1 - K2)*(K1^2 + K2^2 + sqrt(K1^4 - 6*K1^2*K2^2 + 8*K1*K2^3 - 3*K2^4))/(2*sqrt( (K1^4 - 3*K1^2*K2^2 + K1^2*sqrt(K1 + 3*K2)*sqrt(K1^3 - 3*K1^2*K2 + 3*K1*K2^2 - K2^3) + 4*K1*K2^3 - 2*K2^4)/(2*K1^2 - 2*K1*K2 + K2^2))*(2*K1^2 - 2*K1*K2 + K2^2))

    \(\displaystyle \frac{\sqrt{2} K_{2} \left(K_{1} - K_{2}\right) \left(K_{1}^{2} + K_{2}^{2} + \sqrt{K_{1}^{4} - 6 K_{1}^{2} K_{2}^{2} + 8 K_{1} K_{2}^{3} - 3 K_{2}^{4}}\right)}{2 \sqrt{\frac{K_{1}^{4} - 3 K_{1}^{2} K_{2}^{2} + K_{1}^{2} \sqrt{K_{1} + 3 K_{2}} \sqrt{K_{1}^{3} - 3 K_{1}^{2} K_{2} + 3 K_{1} K_{2}^{2} - K_{2}^{3}} + 4 K_{1} K_{2}^{3} - 2 K_{2}^{4}}{2 K_{1}^{2} - 2 K_{1} K_{2} + K_{2}^{2}}} \left(2 K_{1}^{2} - 2 K_{1} K_{2} + K_{2}^{2}\right)}\)

ans_c(K1 => 39, K2 => 12).evalf()

    \(7.2\)

# d
ans_d = res[4] |> factor
@show(ans_d)

    ans_d = sqrt(2)*sqrt( (K1^4 - 3*K1^2*K2^2 + K1^2*sqrt(K1 + 3*K2)*sqrt(K1^3 - 3*K1^2*K2 + 3*K1*K2^2 - K2^3) + 4*K1*K2^3 - 2*K2^4)/(2*K1^2 - 2*K1*K2 + K2^2))/2

    \(\displaystyle \frac{\sqrt{2} \sqrt{\frac{K_{1}^{4} - 3 K_{1}^{2} K_{2}^{2} + K_{1}^{2} \sqrt{K_{1} + 3 K_{2}} \sqrt{K_{1}^{3} - 3 K_{1}^{2} K_{2} + 3 K_{1} K_{2}^{2} - K_{2}^{3}} + 4 K_{1} K_{2}^{3} - 2 K_{2}^{4}}{2 K_{1}^{2} - 2 K_{1} K_{2} + K_{2}^{2}}}}{2}\)

ans_d(K1 => 39, K2 => 12).evalf()

    \(28.8\)

一時変数を使用すれば,描画ソースファイル中に示すように,全体としての式は短く書ける。

術は以下のようになっている。

天 = sqrt( (K1 + K2*3)*(K1 - K2))
地 = K1^2 + K2^2 - (K1 - K2)*天
人 = (天 + K1)*(K1 + K2)
正方形の一辺 =  sqrt( ( ( (K1 - K2)*K2 + 人)*K2^2)/地)

    \(\displaystyle K_{2} \sqrt{\frac{K_{2} \left(K_{1} - K_{2}\right) + \left(K_{1} + K_{2}\right) \left(K_{1} + \sqrt{K_{1} - K_{2}} \sqrt{K_{1} + 3 K_{2}}\right)}{K_{1}^{2} + K_{2}^{2} - \left(K_{1} - K_{2}\right)^{\frac{3}{2}} \sqrt{K_{1} + 3 K_{2}}}}\)

正方形の一辺(K1 => 39, K2 => 12).evalf()

    \(38.4\)

この術は,(当然であるが)どのような \(K_1,\ K_2\) に対しても成り立つ。

ans_a(K1 => 25, K2 => 20).evalf() |> display

\(30.5614849662662\)

正方形の一辺(K1 => 25, K2 => 20).evalf() |> display

\(30.5614849662662\)

なお,実値を与えれば方程式は簡単に解ける。

using SymPy
@syms a::positive, b::positive, c::positive, d::positive,
      K1::positive, K2::positive
K1 = 39
K2 = 12
eq1 = d/a - (a - b)/(a - c)
eq2 = d/a - c/(a - d)
eq3 = (a - b)^2 + (a - c)^2 - K1^2
eq4 = (a - d)^2 + c^2 - K2^2;
res = solve([eq1, eq2, eq3, eq4], (a, b, c, d))[1]

    (192/5, 15, 36/5, 144/5)

(192/5, 15, 36/5, 144/5) = (38.4, 15, 7.2, 28.8) である。

描画関数プログラムのソースを見る

function draw(K1, K2, more=false)
    pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
    (a, b, c, d) = (192/5, 15, 36/5, 144/5)
    p = sqrt(K1 + 3K2)
    s = sqrt( (K1 - K2)^3)
    u = K1 - K2
    v = K1^4 - 3K1^2*K2^2 + K1^2*p*s + 4*K1*K2^3 - 2K2^4
    w = (2K1^2 - 2K1*K2 + K2^2)
    x = sqrt(v/w)
    y = K1^2 - 2K1*K2 + K2^2 + s*p   
    a = √2x*y/(4u^2)
    b = √2K2*y/(2sqrt( (K1^2*(K1^2 - 3K2^2 + s*p) + 2K2^3*(2K1 - K2))/w)*u)
    c = √2K2*u*(K1^2 + K2^2 + s*p)/(2x*w)
    d = √2x/2
    @printf("a = %.15g, b = %.15g, c = %.15g, d = %.15g\n", a, b, c, d)
    plot([0, a, a, 0, 0], [0, 0, a, a, 0], color=:green, lw=0.5)
    plot!([0, a - c, a, c, 0], [d, d - (a - b), b, a, d], color=:red, lw=0.5)
    segment(a - c, d - (a - b), a, 0, :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)
        point(a, a, "(a,a)", :green, :right, :bottom, delta=delta/2)
        point(a, b, " (a,b)", :green, :left, :vcenter)
        point(0, d, "d ", :green, :right, :vcenter)
        point(c, a, "(c,a)", :green, :center, :bottom, delta=delta/2)
        point(a, 0, " a", :green, :left, :bottom, delta=delta/2)
        point(a - c, d - (a - b), "(a-c, d-a+b) ", :green, :right, :vcenter)
        xlims!(-3delta, a + 7delta)
    end
end;
draw(39, 12, true)

    a = 38.4, b = 15, c = 7.2, d = 28.8

draw(25, 20, true)

    a = 30.5614849662662, b = 21.4700065132682, c = 7.27318276239837, d = 11.9308432031719


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

算額(その2015)

兵庫県姫路市広田区北野町 英賀天満宮 奉納年不明(明治6年より前)

愛媛和算研究会:司馬遼太郎の祖父惣八の算額
https://ehimewasan.com/archives/1651
https://ehimewasan.com/wp-content/uploads/2024/11/a56924317999746a755154fca5db036d.pdf
キーワード:円6個,正方形
#Julia #SymPy #算額 #和算 #数学


正方形の中に甲円 2 個,乙円 4 個を容れる。乙円の直径が 1 寸のとき,甲円の直径はいかほどか。

正方形の一辺の長さを \(a\)
甲円の半径と中心座標を \(r_1,\ (r_1,\ r_1)\)
乙円の半径と中心座標を \(r_2,\ (x_2,\ y_2)\)
とおき,以下の連立方程式を解く。

なお,
\(x_2 = a - (\sqrt{2} + 2)r_2\)
\(y_2 = (\sqrt{2} + 2)r_2\)
である。

include("julia-source.txt");  # julia-source.txt ソース
using SymPy
@syms a, r1, r2
x2 = (1 + 2√Sym(2))r2
y2 = a - x2
eq1 = √Sym(2)a - (6 + 2√Sym(2))*r2
eq2 = (x2 - r1)^2 + (y2 - r1)^2 - (r1 + r2)^2
res = solve([eq1, eq2], (r1, a))[1]  # 1 of 2

    (-2*r2*sqrt(4 + 3*sqrt(2)) + 3*r2*(1 + sqrt(2)), r2*(2 + 3*sqrt(2)))

# r1
ans_r1 = res[1] |> factor

    \(r_{2} \left(- 2 \sqrt{4 + 3 \sqrt{2}} + 3 + 3 \sqrt{2}\right)\)

術は一時変数を使っているので簡単な式に見えるが,最終的には同じ数式になる。
「術曰置二個開平方加一個三之各(名)極加一個開平方倍之以減極餘乗乙径得甲径合問

# 術
@syms 乙円径, 極
極 = 3(√Sym(2) + 1)
甲円径 = (極 - sqrt(極 + 1)*2)*乙円径
甲円径 |>  factor

    \(乙円径 \left(- 2 \sqrt{4 + 3 \sqrt{2}} + 3 + 3 \sqrt{2}\right)\)

乙円の直径が 1 寸のとき,甲円の直径は 1.50064079609898 寸である。

ans_r1(r2 => 1/2).evalf() * 2

    \(1.50064079609898\)

# a: 正方形の一辺の長さ
ans_a = res[2]

    \(r_{2} \left(2 + 3 \sqrt{2}\right)\)

乙円の直径が 1 のとき,正方形の一辺の長さは 3.12132034355964 である。

ans_a(r2 => 1/2).evalf()

    \(3.12132034355964\)

描画関数プログラムのソースを見る

function draw(r2, more=false)
    pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
    r1 = r2*(3 + 3√2 - 2sqrt(4 + 3√2))
    a = r2*(2 + 3√2)
    x2 = r2*(1 + 2√2)
    y2 = a - x2
    println( (2r1, a))
    plot([0, a, a, 0, 0], [0, 0, a, a, 0], color=:red, lw=0.5)
    circle(r1, r1, r1)
    circle(a - r1, a - r1, r1)
    for i = 0:3
        circle(r2 + i*√2*r2, a - (1 + i*√2)r2, r2, :blue)
    end
    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(a, a, "(a,a)", :green, :right, :bottom, delta=delta/2)
        point(r1, r1, "甲円:r1,(r1,r1)", :red, :center, delta=-delta)
        point(x2, y2, "乙円:r2,(x2,y2)", :blue, :center, delta=-delta)
    end
end;
draw(1/2, true)

    (1.5006407960989856, 3.121320343559643)

   


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

算額(その2014)

岡山市北区 惣爪八幡宮 文久元年(1861)

幕末の16歳少女が大学数学専攻以上の難問を解く : 庶民も担った “知の探究” を今に伝える算額
阿部 治樹 2023.10.24
https://www.nippon.com/ja/japan-topics/c12802/
キーワード:平方根,三角形の内接円,立方根
#Julia #SymPy #算額 #和算 #数学


1.面積が 85000 の正方形の 1 辺を求めよ

using SymPy
sqrt(Sym(85000))

    \(50 \sqrt{34}\)

sqrt(Sym(85000)).evalf()

    \(291.547594742265\)

2. 三辺が 10, 17, 21 の三角形の内接円の直径を求めよ

三辺の長さを \(a,\ b,\ c\),内接円の直径を \(d\) とおく。
三角形の面積を 2 通りの計算により求める。

@syms a, b, c, d, S1, S2
s = (a + b + c)/2
S1 = sqrt(s*(s - a)*(s - b)*(s - c))
S2 = (a + b + c)*(d/2)/2
eq = S1 ⩵ S2
ans_d = solve(eq, d)[1] |> factor
@show(ans_d)

    ans_d = sqrt(-(a - b - c)*(a - b + c)*(a + b - c)*(a + b + c))/(a + b + c)

    \(\displaystyle \frac{\sqrt{- \left(a - b - c\right) \left(a - b + c\right) \left(a + b - c\right) \left(a + b + c\right)}}{a + b + c}\)

三辺が 10, 17, 21 のとき,内接円の直径は 7 である。

ans_d(a => 10, b => 17, c => 21)

    \(7\)

3. 体積が 1881676371789154860897069 の立方体の 1 辺を求めよ。

cbrt(Sym(1881676371789154860897069))

    \(123456789\)


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