裏 RjpWiki

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

うどん茶屋 てんてこ舞 TEN TEKO MAI

2024年11月20日 | さぬきうどん

琴平町 うどん茶屋 てんてこ舞
金毘羅さんの参道(石段の手前)にある
外観の写真を撮り忘れた

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

算額(その1412)

2024年11月20日 | Julia

算額(その1412)

八二 熊谷市三ケ尻 竜泉寺 明治11年(1878)
埼玉県立図書館:埼玉県史料集 第二集『埼玉の算額』,昭和44年,誠美堂印刷所,埼玉県与野市.
キーワード:3次元,球3個,円錐
#Julia, #SymPy, #算額, #和算

楕円錐(底面が楕円)の中に上,中,下の 3 個の珠を容れる。上,中,下の珠の直径の和は 120 寸,各直径の差は 10 寸のとき,下珠の直径はいかほどか。

注:本問は 3 個の珠の直径の差が等差数列であることを前提にしている。算額(その1409)では四角錐に内接する球の直径は等比数列であるとした。球を内包する立体は,四角錘でなくて円錐でもよいわけである。もし円錐に等差数列に従う球を入れるとどうなるか。たとえば,図に示すような小球と中球が内接するような円錐では大球はグスグスである(赤い玉と円錐の側面に隙間がある)。しかし,円錐を垂直に立てれば,大球は上にある中球・小球の重さで横方向に押しのけられ,円錐の側面に一点で内接するのである。ということで,円錐と等差数列をなす 3 球ということに矛盾は生じないので,安心して問題を解く。なお,わざわざ楕円錐としたのは長径方向に投影したときに,投影された 3 珠の重心が一直線になるということくらいか?(円錐だとどちら方向に投影するか特定できないから)

蛇足:3つの珠の直径が 30, 40, 50 のとき,初項が 30,公比が 4/3 なので,3番めの珠の直径は 30*(4/3)^2 = 53.33333333333333 になるので,3 番目の珠の直径が 50 なら,グスグスなのである。

中学生レベル(?)の問題であるが,SymPy を使って解くと以下のようになる。
下珠,中珠,上珠の直径を 「上径」,「中径」,「下径」 とおく。直径の和を「径和」,直径の差を「各差」として以下の連立方程式を解く。

using SymPy
@syms 下径, 中径, 上径, 径和, 各差
eq1 = 下径 + 中径 + 上径 - 径和
eq2 = 下径 - 中径 - 各差
eq3 = 中径 - 上径 - 各差
res = solve([eq1, eq2, eq3], (下径, 中径, 上径))
(res[下径], res[中径], res[上径]) |> println

    (各差 + 径和/3, 径和/3, -各差 + 径和/3)

術は「上中下の 3 個の珠の直径の和に直径の差の 3 倍を加え 3 で割ることで下珠の直径を得る」ということで,小学生に説明するなら,このほうがよいかもしれない。でも,式の変形は小学校では扱わないか?

下径 + 中径 + 上径 = 径和
下径 + (下径 - 各差) + (下径 - 2×各差) = 径和
3×下径 - 3×各差 = 径和
3×下径 = 径和 + 3×各差
下径 = (径和 + 3×各差)÷3

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

算額(その1411)

2024年11月20日 | Julia

算額(その1411)

九十二 群馬県富岡市一ノ宮 貫前神社 安政5年(1858)
九十七 群馬県高崎市石原町 清水寺 安政5年(1858)
群馬県和算研究会:群馬の算額,上武印刷株式会社,高崎市,1987年3月31日.
キーワード:円12個,外円,正三角形3個
#Julia, #SymPy, #算額, #和算

外円の中に甲円 1 個,乙円 2 個を容れる。甲円,乙円の中には正三角形を容れ,さらに甲円の中には丙円と等円,乙円の中には 3 個ずつの等円を容れる。外円の直径が 9 寸のとき,等円の直径はいかほどか。

注:本問と関連する算額を「算額(その1410)」に掲示した。違いは甲円の中にある丙円の位置と大きさである。

外円の中の甲円と乙円の位置と大きさについて
外円の半径と中心座標を R, (0, )
甲円の半径と中心座標を r1, (0, R - r1)
乙円の半径と中心座標を r2, (r2, y2)
等円の半径を r
とおき,以下の方程式を解く。

(1) 甲円の中の正三角形と丙円 r3,等円 r について以下の連立方程式を解く。

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

@syms r1, r3, r

eq1 = r/(2r1 - 2r3 - r) - 1//2
eq2 = r3/(2r1 - r3) - 1//2
res = solve([eq1, eq2], (r3, r))
res[r3] |> println
res[r] |> println

    2*r1/3
    2*r1/9

等円の半径は r = 2r1/9 である。

(2) 乙円の中の正三角形と等円の大きさについては,「算額(その918)」に示したように,乙円の中にある等円の半径は乙円の半径の 1/4 である。 r = r2/4

よって,2r1/9 = r2/4 である。外円の中に甲円と乙円が入っているので,以下の連立方程式を解いて甲円と乙円の半径と中心座標を求める。

@syms R, r1, r2, y2
eq1 = 2r1/9 - r2/4
eq2 = r2^2 + y2^2 - (R - r2)^2
eq3 = r2^2 + (R - r1 - y2)^2 - (r1 + r2)^2
res = solve([eq1, eq2, eq3], (r1, r2, y2))[3]  # 3 of 3

    (R/2, 4*R/9, -R/3)

甲円の半径 r1 は外円の半径 R の 1/2 倍,乙円の半径 r2 は外円の半径 R の 4/9 倍である。
甲円の中にある等円の半径は外円の半径 R の (1/2)*(2/9) = 1/9 倍,乙円の中にある等円の半径は外円の半径 R の (1/4)*(4/9) = 1/9 倍で等しくなる。

「問」のように外円の直径が 9 寸のとき,等円の直径は 9*(1/9) = 1 寸となり,「答」,「術」と一致する。

R = 4.5;  r1 = 2.25;  r2 = 2;  y2 = -1.5
甲円の直径 = 4.5,丙円の直径 = 3.0,甲円の中にある等円の直径 = 1.0
乙円の直径 = 4.0,乙円の中にある等円の直径 = 1.0

考察

「九十二 貫前神社」の算額は安政5年戊午3月,「九十七 清水寺」の算額は安政戊午11月に奉納されている。
「百五十一 産泰神社」の算額は年代不明とされている。
多数決ではないが,貫前神社,清水寺のほうが正しいのであろう。
産泰神社のものは,うっかりと図を写し間違えたと思われる。
産泰神社の方が正しいとしても,甲円の中の等円は正三角形の 3 つの隅に 3 個ある方が自然なので,一隅にしかないのはやはり不自然である。貫前神社・清水寺のような場合は甲円の中に等円は 1 個しかないのはもっともである。

function draw_sub(sw, x, y, r, color, color2, color3, color4)
    circle(x, y, r, color)
    (x1, y1) = r .* (cosd(30), -sind(30))
    plot!(x .+ [x1, 0, -x1, x1], y .+ [y1, r, y1, y1], color=color2, lw=0.5)
    if sw == 1
        r1 = 2r/3
        r2 = 2r/9
        circle(x, y - r + r1, r1, color4)
        circle(x, y - r + 2r1 + r2, r2, color3)
        println("甲円の直径 = $(2r),丙円の直径 = $(2r1),甲円の中にある等円の直径 = $(2r2)")
    else
        for deg in (30, 150, 270)
            circle(x + 3r/4*cosd(deg), y + 3r/4*sind(deg), r/4, color3)
        end
        sw == 2 && println("乙円の直径 = $(2r),乙円の中にある等円の直径 = $(2r/4)")
    end
end

function draw(more)
    pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
    R = 9/2  # 1/2
    (r1, r2, y2) = (R/2, 4*R/9, -R/3)
    @printf("R = %g;  r1 = %g;  r2 = %g;  y2 = %g\n", R, r1, r2, y2)
    plot()
    circle(0, 0, R)
    # circle(0, R - r1, r1, :orange)
    draw_sub(1, 0, R - r1, r1, :green, :chartreuse3, :darkorange, :tomato)
    # circle2(r2, y2, r2, :blue)
    draw_sub(2, r2, y2, r2, :blue, :darkblue, :darkorange, :none)
    draw_sub(3, -r2, y2, r2, :blue, :darkblue, :darkorange, :none)
    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", :red, :center, :bottom, delta=delta)
        point(0, R - r1, "甲円:R/2,(0,R-r1)", :green, :center, delta=-delta/2)
        point(0, R/3, "丙円:R/3,(0,R/3)", :tomato, :center, delta=-delta/2)
        point(0, 7R/9, "等円:R/9,(0,7R/9)", :tomato, :center, delta=-delta/2)
        point(r2, y2, "乙円:4R/9,(r2,y2)", :blue, :center, delta=-delta/2)
        point(r2, -2R/3, "等円:R/9,(r2,y2)", :darkorange, :center, delta=-delta/2)
    end
end;

draw(true)

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

算額(その1410)

2024年11月20日 | ブログラミング

算額(その1410)

百五十一 群馬県前橋市下大屋町 産泰神社 年代不明
群馬県和算研究会:群馬の算額,上武印刷株式会社,高崎市,1987年3月31日.

桜沢門人 武州幡羅郡三箇尾村 権田源之助正賢
山口正義:やまぶき2 第37号,2016年6月20日.
https://yamabukiwasan.sakura.ne.jp/ymbk37.pdf

キーワード:円12個,外円,正三角形3個
#Julia, #SymPy, #算額, #和算

外円の中に甲円 1 個,乙円 2 個を容れる。甲円,乙円の中には正三角形を容れ,さらに甲円の中には丙円と等円,乙円の中には 3 個ずつの等円を容れる。外円の直径が 9 寸のとき,等円の直径はいかほどか。

注:本問と関連する算額を「算額(その1411)」に掲示する。違いは甲円の中にある丙円の位置と大きさである。

外円の中の甲円と乙円の位置と大きさについて
外円の半径と中心座標を R, (0, )
甲円の半径と中心座標を r1, (0, R - r1)
乙円の半径と中心座標を r2, (r2, y2)
等円の半径を r
とおき,以下の方程式を解く。

(1) 甲円の中の正三角形と丙円,等円の大きさについては,「算額(その593)」に示したように,甲円の中にある等円の直径は甲円の直径の 1/6 である。r = r1/6

(2) 乙円の中の正三角形と等円の大きさについては,「算額(その918)」に示したように,乙円の中にある等円の直径は乙円の直径の 1/4である。 r = r2/4

よって,r2 = 2r1/3 である。外円の中に甲円と乙円が入っているので,以下の連立方程式を解いて甲円と乙円の半径と中心座標を求める。

include("julia-source.txt");
# julia-source.txt ソース https://blog.goo.ne.jp/r-de-r/e/ad3a427b84bb416c4f5b73089ae813cf
@syms R, r, r1, r2, y2
eq1 = 3r2 - 2r1
eq2 = r2^2 + y2^2 - (R - r2)^2
eq3 = r2^2 + (R - r1 - y2)^2 - (r1 + r2)^2
res = solve([eq1, eq2, eq3], (r1, r2, y2))[2]  # 2 of 3

    (R*(-4 + sqrt(21)), 2*R*(-4 + sqrt(21))/3, R*(-2 + sqrt(21)/3))

甲円の半径 r1 は外円の半径 R の (√21 - 4) 倍,乙円の半径 r2 は外円の半径 R の (√21 - 4)*2/3 倍である。
甲円の中にある等円の半径は外円の半径 R の (√21 - 4)/6 倍,乙円の中にある等円の半径は外円の半径 R の (√21 - 4)*2/3/4 = (√21 - 4)/6 倍でで等しくなる。

問のように外円の直径が 9 寸のとき,等円の直径は 9*(√21 - 4)/6 = 0.8738635424337597 寸となる。

R = 4.5;  r1 = 2.62159;  r2 = 1.74773;  y2 = -2.12614
甲円の直径 = 5.2431812546025585,丙円の直径 = 1.3107953136506396,甲円の中にある等円の直径 = 0.8738635424337597
乙円の直径 = 3.495454169735039,乙円の中にある等円の直径 = 0.8738635424337597

おかしいですね。
答,術は「外円径を 9 で割れば,等円の直径が得られる。」すなわち,「外円径が 9寸ならば,等円径は 1 寸」のはず。

実は同じような算額が他に 2 件あるのは承知していた(その 2 件の算額の内容は同じ)。(時系列とは逆に)たまたまこちらを先に解いた。
似ている算額について,次の記事「算額(その1411)」を書く。

ここまで書いてきて,だいぶ前に読んだ記事にあった図(山口)を思い出した。再確認した所,「図の写し間違いだろう」という指摘も同じであった。

function draw_sub(sw, x, y, r, color, color2, color3)
    circle(x, y, r, color)
    (x1, y1) = r .* (cosd(30), -sind(30))
    plot!(x .+ [x1, 0, -x1, x1], y .+ [y1, r, y1, y1], color=color2, lw=0.5)
    if sw == 1
        circle(x, y, r/2, color2)
        circle(x, y + (r/2 + r/6), r/6, color3)
        println("甲円の直径 = $(2r),丙円の直径 = $(r/2),甲円の中にある等円の直径 = $(2r/6)")
    else
        for deg in (30, 150, 270)
            circle(x + 3r/4*cosd(deg), y + 3r/4*sind(deg), r/4, color3)
        end
        sw == 2 && println("乙円の直径 = $(2r),乙円の中にある等円の直径 = $(2r/4)")
    end
end

function draw(R, more)
    pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
    (r1, r2, y2) = (R*(-4 + sqrt(21)), 2*R*(-4 + sqrt(21))/3, R*(-2 + sqrt(21)/3))
    @printf("R = %g;  r1 = %g;  r2 = %g;  y2 = %g\n", R, r1, r2, y2)
    plot()
    circle(0, 0, R)
    # circle(0, R - r1, r1, :orange)
    draw_sub(1, 0, R - r1, r1, :green, :chartreuse3, :darkorange)
    # circle2(r2, y2, r2, :blue)
    draw_sub(2, r2, y2, r2, :blue, :darkblue, :darkorange)
    draw_sub(3, -r2, y2, r2, :blue, :darkblue, :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, R, "R", :red, :center, :bottom, delta=delta)
        point(0, R - r1, "甲円:r1,(0,R-r1)", :green, :center,:bottom, delta=delta/2)
        point(0, R - r1, "丙円:r1/2,(0,R-r1)", :tomato, :center, delta=-delta/2, mark=false)
        point(0, R - r1/3, "等円:r1/6,(0,R-r1/3)", :tomato, :center, delta=-delta/2)
        point(r2, y2, "乙円:r2,(r2,y2)", :blue, :center, delta=-delta/2)
        point(r2, y2 - 3r2/4, "等円:r2/4\n(r2,y2-3r2/4)", :darkorange, :left, delta=-8delta/2, deltax=4delta)
        point(2.1, 0, "r1 = R*(√21 - 4)\nr2 = 2r1/3", :black, :left, :vcenter, deltax=-0.5delta, mark=false)

    end
end;

draw(9/2, true)

 

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

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

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