裏 RjpWiki

Julia ときどき R, Python によるコンピュータプログラム,コンピュータ・サイエンス,統計学

算額(その1545)

2025年01月16日 | Julia

算額(その1545)

埼玉県川口市三ツ和 氷川神社 享和4年(1804)
山口正義:やまぶき 第 39 号

https://yamabukiwasan.sakura.ne.jp/ymbk39.pdf

キーワード:円5個,直角三角形
#Julia, #SymPy, #算額, #和算

直角三角形の中に,甲,乙,丙,丁,戊の 5 円を容れる。直角三角形の股(底辺)と勾配が与えられたとき,各辺の長さと各円の直径を求めよ。

図形としては算額(その206)と同じである。何を与えて何を求めるかが違うだけである。

注:勾配といえば Δy/Δx であるが,当時はその 1/10 の値を使っていたのだろうか,また,勾配の有効桁が 4 桁しかないので,本来は整数値を意図していたはずのものに端数が出てしまう。そこで,鈎は問題文の「高倍(勾配)四寸弐分八厘五毛」を使わずに,3 とする。

鈎,股,弦をそのまま,「鈎」,「股」,「弦」
甲円の半径と中心座標を r1, (股 - r1, r1)
乙円の半径と中心座標を r2, (x2, r2)
丙円の半径と中心座標を r3, (x3, r3)
丁円の半径と中心座標を r4, (x4, r4)
戊円の半径と中心座標を r5, (x5, r5)
とおき,順次解く。

長いので,先に答えを書いておく。
鈎 = 3;  股 = 7;  弦 = 7.61577
直径: 甲円 = 2.38423;  乙円 = 1.58596;  丙円 = 1.05496;  丁円 = 0.701746;  戊円 = 0.466793

include("julia-source.txt");
# # julia-source.txt ソース https://blog.goo.ne.jp/r-de-r/e/ad3a427b84bb416c4f5b73089ae813cf

@syms 鈎, 股, 弦, r1, r2, x2, r3, x3, r4, x4, r5, x5
弦 = sqrt(鈎^2 + 股^2);

# r1:甲円の半径
eq1 = (鈎 + 股 - 弦) - 2r1
ans_r1 = solve(eq1, r1)[1]
ans_r1 |> println

    股/2 + 鈎/2 - sqrt(股^2 + 鈎^2)/2

ans_r1(鈎 => 3, 股 => 7).evalf() |> println

    1.19211344706805

@syms x1, x2
r1 = ans_r1  # 1.19211344706805
x1 = 股 - r1
eq2 = (x1 - x2) - 2sqrt(r1*r2)
eq3 = r1/x1 - r2/x2;
res = solve([eq2, eq3], r2, x2)[1];

# r2:乙円の半径
ans_r2 = res[1]
ans_r2 |> println

    (股 + 鈎 - sqrt(股^2 + 鈎^2))*(3*股^2 + 股*鈎 - 股*sqrt(股^2 + 鈎^2) + 3*鈎^2 - 3*鈎*sqrt(股^2 + 鈎^2) - 2*sqrt(2*股^4 + 4*股^3*鈎 - 2*股^3*sqrt(股^2 + 鈎^2) + 6*股^2*鈎^2 - 4*股^2*鈎*sqrt(股^2 + 鈎^2) + 4*股*鈎^3 - 4*股*鈎^2*sqrt(股^2 + 鈎^2) + 4*鈎^4 - 4*鈎^3*sqrt(股^2 + 鈎^2)))/(股 - 鈎 + sqrt(股^2 + 鈎^2))^2

ans_r2(鈎 => 3, 股 => 7).evalf() |> println

    0.792979085478491

# x2:乙円の中心の x 座標
ans_x2 = res[2]
ans_x2 |> println

    (3*股^2 + 股*鈎 - 股*sqrt(股^2 + 鈎^2) + 3*鈎^2 - 3*鈎*sqrt(股^2 + 鈎^2) - 2*sqrt(2*股^4 + 4*股^3*鈎 - 2*股^3*sqrt(股^2 + 鈎^2) + 6*股^2*鈎^2 - 4*股^2*鈎*sqrt(股^2 + 鈎^2) + 4*股*鈎^3 - 4*股*鈎^2*sqrt(股^2 + 鈎^2) + 4*鈎^4 - 4*鈎^3*sqrt(股^2 + 鈎^2)))/(股 - 鈎 + sqrt(股^2 + 鈎^2))

ans_x2(鈎 => 3, 股 => 7).evalf() |> println

    3.86333413034970

累円の半径は,公比 p = r2/r1 = 0.665187602261171 の 等比数列をなす。

# p:公比
p = res[1]/ans_r1
p |> println

    (股 + 鈎 - sqrt(股^2 + 鈎^2))*(3*股^2 + 股*鈎 - 股*sqrt(股^2 + 鈎^2) + 3*鈎^2 - 3*鈎*sqrt(股^2 + 鈎^2) - 2*sqrt(2*股^4 + 4*股^3*鈎 - 2*股^3*sqrt(股^2 + 鈎^2) + 6*股^2*鈎^2 - 4*股^2*鈎*sqrt(股^2 + 鈎^2) + 4*股*鈎^3 - 4*股*鈎^2*sqrt(股^2 + 鈎^2) + 4*鈎^4 - 4*鈎^3*sqrt(股^2 + 鈎^2)))/((股/2 + 鈎/2 - sqrt(股^2 + 鈎^2)/2)*(股 - 鈎 + sqrt(股^2 + 鈎^2))^2)

p(鈎 => 3, 股 => 7).evalf() |> println

    0.665187602261170

# r3:丙円の半径
r3 = ans_r2*p
r3 |> println

    (股 + 鈎 - sqrt(股^2 + 鈎^2))^2*(3*股^2 + 股*鈎 - 股*sqrt(股^2 + 鈎^2) + 3*鈎^2 - 3*鈎*sqrt(股^2 + 鈎^2) - 2*sqrt(2*股^4 + 4*股^3*鈎 - 2*股^3*sqrt(股^2 + 鈎^2) + 6*股^2*鈎^2 - 4*股^2*鈎*sqrt(股^2 + 鈎^2) + 4*股*鈎^3 - 4*股*鈎^2*sqrt(股^2 + 鈎^2) + 4*鈎^4 - 4*鈎^3*sqrt(股^2 + 鈎^2)))^2/((股/2 + 鈎/2 - sqrt(股^2 + 鈎^2)/2)*(股 - 鈎 + sqrt(股^2 + 鈎^2))^4)

r3(鈎 => 3, 股 => 7).evalf() |> println

    0.527479856512693

# r4:丁円の半径
r4 = ans_r2*p^2
r4 |> println

    (股 + 鈎 - sqrt(股^2 + 鈎^2))^3*(3*股^2 + 股*鈎 - 股*sqrt(股^2 + 鈎^2) + 3*鈎^2 - 3*鈎*sqrt(股^2 + 鈎^2) - 2*sqrt(2*股^4 + 4*股^3*鈎 - 2*股^3*sqrt(股^2 + 鈎^2) + 6*股^2*鈎^2 - 4*股^2*鈎*sqrt(股^2 + 鈎^2) + 4*股*鈎^3 - 4*股*鈎^2*sqrt(股^2 + 鈎^2) + 4*鈎^4 - 4*鈎^3*sqrt(股^2 + 鈎^2)))^3/((股/2 + 鈎/2 - sqrt(股^2 + 鈎^2)/2)^2*(股 - 鈎 + sqrt(股^2 + 鈎^2))^6)

r4(鈎 => 3, 股 => 7).evalf() |> println

    0.350873060994744

# r5:戊円の半径
r5 = ans_r2*p^3
r5 |> println

    (股 + 鈎 - sqrt(股^2 + 鈎^2))^4*(3*股^2 + 股*鈎 - 股*sqrt(股^2 + 鈎^2) + 3*鈎^2 - 3*鈎*sqrt(股^2 + 鈎^2) - 2*sqrt(2*股^4 + 4*股^3*鈎 - 2*股^3*sqrt(股^2 + 鈎^2) + 6*股^2*鈎^2 - 4*股^2*鈎*sqrt(股^2 + 鈎^2) + 4*股*鈎^3 - 4*股*鈎^2*sqrt(股^2 + 鈎^2) + 4*鈎^4 - 4*鈎^3*sqrt(股^2 + 鈎^2)))^4/((股/2 + 鈎/2 - sqrt(股^2 + 鈎^2)/2)^3*(股 - 鈎 + sqrt(股^2 + 鈎^2))^8)

r5(鈎 => 3, 股 => 7).evalf() |> println

    0.233396410141131

互いに接する円の半径が既知ならば,中心間の水平距離は d12 = 2sqrt(r1*r2) であるが,算額の場合は,距離も等比級数に従う。

# d23:乙円と丙円の中心の水平距離
d23 = 2sqrt(ans_r2*r3)
d23 |> println

    2*sqrt((股 + 鈎 - sqrt(股^2 + 鈎^2))^3*(3*股^2 + 股*鈎 - 股*sqrt(股^2 + 鈎^2) + 3*鈎^2 - 3*鈎*sqrt(股^2 + 鈎^2) - 2*sqrt(2*股^4 + 4*股^3*鈎 - 2*股^3*sqrt(股^2 + 鈎^2) + 6*股^2*鈎^2 - 4*股^2*鈎*sqrt(股^2 + 鈎^2) + 4*股*鈎^3 - 4*股*鈎^2*sqrt(股^2 + 鈎^2) + 4*鈎^4 - 4*鈎^3*sqrt(股^2 + 鈎^2)))^3/((股/2 + 鈎/2 - sqrt(股^2 + 鈎^2)/2)*(股 - 鈎 + sqrt(股^2 + 鈎^2))^6))

d23(鈎 => 3, 股 => 7).evalf() |> println

    1.29349216344864

# d34:丙円と丁円の中心の水平距離
d34 = 2sqrt(r3*r4)
d34 |> println

    2*sqrt((股 + 鈎 - sqrt(股^2 + 鈎^2))^5*(3*股^2 + 股*鈎 - 股*sqrt(股^2 + 鈎^2) + 3*鈎^2 - 3*鈎*sqrt(股^2 + 鈎^2) - 2*sqrt(2*股^4 + 4*股^3*鈎 - 2*股^3*sqrt(股^2 + 鈎^2) + 6*股^2*鈎^2 - 4*股^2*鈎*sqrt(股^2 + 鈎^2) + 4*股*鈎^3 - 4*股*鈎^2*sqrt(股^2 + 鈎^2) + 4*鈎^4 - 4*鈎^3*sqrt(股^2 + 鈎^2)))^5/((股/2 + 鈎/2 - sqrt(股^2 + 鈎^2)/2)^3*(股 - 鈎 + sqrt(股^2 + 鈎^2))^10))

d34(鈎 => 3, 股 => 7).evalf() |> println

    0.860414950748014

# d45:丁円と戊円の中心の水平距離
d45 = 2sqrt(r4*r5)
d45 |> println

    2*sqrt((股 + 鈎 - sqrt(股^2 + 鈎^2))^7*(3*股^2 + 股*鈎 - 股*sqrt(股^2 + 鈎^2) + 3*鈎^2 - 3*鈎*sqrt(股^2 + 鈎^2) - 2*sqrt(2*股^4 + 4*股^3*鈎 - 2*股^3*sqrt(股^2 + 鈎^2) + 6*股^2*鈎^2 - 4*股^2*鈎*sqrt(股^2 + 鈎^2) + 4*股*鈎^3 - 4*股*鈎^2*sqrt(股^2 + 鈎^2) + 4*鈎^4 - 4*鈎^3*sqrt(股^2 + 鈎^2)))^7/((股/2 + 鈎/2 - sqrt(股^2 + 鈎^2)/2)^5*(股 - 鈎 + sqrt(股^2 + 鈎^2))^14))

d45(鈎 => 3, 股 => 7).evalf() |> println

    0.572337358037734

# x3:丙円の中心の x 座標
x2 = res[2]
x3 = x2 - d23
x3 |> println

    -2*sqrt((股 + 鈎 - sqrt(股^2 + 鈎^2))^3*(3*股^2 + 股*鈎 - 股*sqrt(股^2 + 鈎^2) + 3*鈎^2 - 3*鈎*sqrt(股^2 + 鈎^2) - 2*sqrt(2*股^4 + 4*股^3*鈎 - 2*股^3*sqrt(股^2 + 鈎^2) + 6*股^2*鈎^2 - 4*股^2*鈎*sqrt(股^2 + 鈎^2) + 4*股*鈎^3 - 4*股*鈎^2*sqrt(股^2 + 鈎^2) + 4*鈎^4 - 4*鈎^3*sqrt(股^2 + 鈎^2)))^3/((股/2 + 鈎/2 - sqrt(股^2 + 鈎^2)/2)*(股 - 鈎 + sqrt(股^2 + 鈎^2))^6)) + (3*股^2 + 股*鈎 - 股*sqrt(股^2 + 鈎^2) + 3*鈎^2 - 3*鈎*sqrt(股^2 + 鈎^2) - 2*sqrt(2*股^4 + 4*股^3*鈎 - 2*股^3*sqrt(股^2 + 鈎^2) + 6*股^2*鈎^2 - 4*股^2*鈎*sqrt(股^2 + 鈎^2) + 4*股*鈎^3 - 4*股*鈎^2*sqrt(股^2 + 鈎^2) + 4*鈎^4 - 4*鈎^3*sqrt(股^2 + 鈎^2)))/(股 - 鈎 + sqrt(股^2 + 鈎^2))

x3(鈎 => 3, 股 => 7).evalf() |> println

    2.56984196690106

# x4:丁円の中心の x 座標
x4 = x3 - d34
x4 |> println

    -2*sqrt((股 + 鈎 - sqrt(股^2 + 鈎^2))^5*(3*股^2 + 股*鈎 - 股*sqrt(股^2 + 鈎^2) + 3*鈎^2 - 3*鈎*sqrt(股^2 + 鈎^2) - 2*sqrt(2*股^4 + 4*股^3*鈎 - 2*股^3*sqrt(股^2 + 鈎^2) + 6*股^2*鈎^2 - 4*股^2*鈎*sqrt(股^2 + 鈎^2) + 4*股*鈎^3 - 4*股*鈎^2*sqrt(股^2 + 鈎^2) + 4*鈎^4 - 4*鈎^3*sqrt(股^2 + 鈎^2)))^5/((股/2 + 鈎/2 - sqrt(股^2 + 鈎^2)/2)^3*(股 - 鈎 + sqrt(股^2 + 鈎^2))^10)) - 2*sqrt((股 + 鈎 - sqrt(股^2 + 鈎^2))^3*(3*股^2 + 股*鈎 - 股*sqrt(股^2 + 鈎^2) + 3*鈎^2 - 3*鈎*sqrt(股^2 + 鈎^2) - 2*sqrt(2*股^4 + 4*股^3*鈎 - 2*股^3*sqrt(股^2 + 鈎^2) + 6*股^2*鈎^2 - 4*股^2*鈎*sqrt(股^2 + 鈎^2) + 4*股*鈎^3 - 4*股*鈎^2*sqrt(股^2 + 鈎^2) + 4*鈎^4 - 4*鈎^3*sqrt(股^2 + 鈎^2)))^3/((股/2 + 鈎/2 - sqrt(股^2 + 鈎^2)/2)*(股 - 鈎 + sqrt(股^2 + 鈎^2))^6)) + (3*股^2 + 股*鈎 - 股*sqrt(股^2 + 鈎^2) + 3*鈎^2 - 3*鈎*sqrt(股^2 + 鈎^2) - 2*sqrt(2*股^4 + 4*股^3*鈎 - 2*股^3*sqrt(股^2 + 鈎^2) + 6*股^2*鈎^2 - 4*股^2*鈎*sqrt(股^2 + 鈎^2) + 4*股*鈎^3 - 4*股*鈎^2*sqrt(股^2 + 鈎^2) + 4*鈎^4 - 4*鈎^3*sqrt(股^2 + 鈎^2)))/(股 - 鈎 + sqrt(股^2 + 鈎^2))

x4(鈎 => 3, 股 => 7).evalf() |> println

    1.70942701615304

# x5:戊円の中心の x 座標
x5 = x4 - d45
x5 |> println

    -2*sqrt((股 + 鈎 - sqrt(股^2 + 鈎^2))^7*(3*股^2 + 股*鈎 - 股*sqrt(股^2 + 鈎^2) + 3*鈎^2 - 3*鈎*sqrt(股^2 + 鈎^2) - 2*sqrt(2*股^4 + 4*股^3*鈎 - 2*股^3*sqrt(股^2 + 鈎^2) + 6*股^2*鈎^2 - 4*股^2*鈎*sqrt(股^2 + 鈎^2) + 4*股*鈎^3 - 4*股*鈎^2*sqrt(股^2 + 鈎^2) + 4*鈎^4 - 4*鈎^3*sqrt(股^2 + 鈎^2)))^7/((股/2 + 鈎/2 - sqrt(股^2 + 鈎^2)/2)^5*(股 - 鈎 + sqrt(股^2 + 鈎^2))^14)) - 2*sqrt((股 + 鈎 - sqrt(股^2 + 鈎^2))^5*(3*股^2 + 股*鈎 - 股*sqrt(股^2 + 鈎^2) + 3*鈎^2 - 3*鈎*sqrt(股^2 + 鈎^2) - 2*sqrt(2*股^4 + 4*股^3*鈎 - 2*股^3*sqrt(股^2 + 鈎^2) + 6*股^2*鈎^2 - 4*股^2*鈎*sqrt(股^2 + 鈎^2) + 4*股*鈎^3 - 4*股*鈎^2*sqrt(股^2 + 鈎^2) + 4*鈎^4 - 4*鈎^3*sqrt(股^2 + 鈎^2)))^5/((股/2 + 鈎/2 - sqrt(股^2 + 鈎^2)/2)^3*(股 - 鈎 + sqrt(股^2 + 鈎^2))^10)) - 2*sqrt((股 + 鈎 - sqrt(股^2 + 鈎^2))^3*(3*股^2 + 股*鈎 - 股*sqrt(股^2 + 鈎^2) + 3*鈎^2 - 3*鈎*sqrt(股^2 + 鈎^2) - 2*sqrt(2*股^4 + 4*股^3*鈎 - 2*股^3*sqrt(股^2 + 鈎^2) + 6*股^2*鈎^2 - 4*股^2*鈎*sqrt(股^2 + 鈎^2) + 4*股*鈎^3 - 4*股*鈎^2*sqrt(股^2 + 鈎^2) + 4*鈎^4 - 4*鈎^3*sqrt(股^2 + 鈎^2)))^3/((股/2 + 鈎/2 - sqrt(股^2 + 鈎^2)/2)*(股 - 鈎 + sqrt(股^2 + 鈎^2))^6)) + (3*股^2 + 股*鈎 - 股*sqrt(股^2 + 鈎^2) + 3*鈎^2 - 3*鈎*sqrt(股^2 + 鈎^2) - 2*sqrt(2*股^4 + 4*股^3*鈎 - 2*股^3*sqrt(股^2 + 鈎^2) + 6*股^2*鈎^2 - 4*股^2*鈎*sqrt(股^2 + 鈎^2) + 4*股*鈎^3 - 4*股*鈎^2*sqrt(股^2 + 鈎^2) + 4*鈎^4 - 4*鈎^3*sqrt(股^2 + 鈎^2)))/(股 - 鈎 + sqrt(股^2 + 鈎^2))

x5(鈎 => 3, 股 => 7).evalf() |> println

    1.13708965811531

function draw(more=false)
    pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
    (鈎, 股) = (3, 7)
    弦 = sqrt(鈎^2 + 股^2)
    r1 = 1.19211344706805
    (r2, x2) = (0.792979085478493, 3.86333413034969)
    (r3, r4, r5) = (0.527479856512695, 0.350873060994746, 0.233396410141133)
    (x3, x4, x5) = (2.56984196690104, 1.70942701615302, 1.13708965811529)
    @printf("鈎 = %g;  股 = %g;  弦 = %g\n", 鈎, 股, 弦)
    @printf("直径: 甲円 = %g;  乙円 = %g;  丙円 = %g;  丁円 = %g;  戊円 = %g\n", 2r1, 2r2, 2r3, 2r4, 2r5)
    plot([0, 股, 股, 0], [0, 0, 鈎, 0], color=:red, lw=0.5)
    circle(股 - r1, r1, r1, 1)
    circle(x2, r2, r2, 2)
    circle(x3, r3, r3, 3)
    circle(x4, r4, r4, 4)
    circle(x5, r5, r5, 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)
    end
end;

draw(true)

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

算額(その1544)

2025年01月16日 | Julia

算額(その1544)

埼玉県川口市三ツ和 氷川神社 享和4年(1804)
山口正義:やまぶき 第 39 号
https://yamabukiwasan.sakura.ne.jp/ymbk39.pdf

キーワード:円3個,連立方程式
#Julia, #SymPy, #算額, #和算

大中小の 3 個の円がある。直径の差は大円と中円で 2 寸,大円と小円で 4 寸(等差数列),3 個の円の面積の和は 6557 である。各円の直径を求めよ。

注:算額の「問」では,6557 の単位は「分坪」つまり「平方分」なので半径を分で表さなければならないので注意。半径を寸で表すなら「65.57 平方寸」とする。
また,円周率は 3.16 を使っている。

大円の半径を r1 とおき,以下の方程式を解く。

@syms r1
円周率 = 3.16
r2 = r1 - 1
r3 = r1 - 2
eq1 = 円周率.*(r1^2 + r2^2 + r3^2) - 65.57;

# r1: 大円の半径
ans_r1 = solve(eq1, r1)[2] |> println  # 2 of 2

    3.50000000000000

直径はそれぞれ,7 寸, 5 寸, 3 寸である。

 

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PVアクセスランキング にほんブログ村

PVアクセスランキング にほんブログ村