裏 RjpWiki

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

算額(その751)

2024年03月04日 | Julia

算額(その751)

三五 大宮市中釘 秋葉神社 天保11年(1840)
埼玉県立図書館:埼玉県史料集 第二集『埼玉の算額』,昭和44年,誠美堂印刷所,埼玉県与野市.

埼玉県さいたま市西区中釘 秋葉神社 天保11年(1840)
山口正義:やまぶき,第20号

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

キーワード:円5個,不等辺三角形

三角形の中に甲円 3 個,乙円と丙円を 1 個ずついれる。甲円の直径が 20 寸のとき,乙円の直径はいかほどか。

三角形の頂点を (0, 0, (x, y), (x2, 0)
甲円の半径と中心座標を r1, (x1, r1), (x1 + 2r1, r1), (x1 + 4r1, r1)
乙円の半径と中心座標を r2, (x1 + 3r1, y2)
丙円の半径と中心座標を r3, (x1 + r1, y3)
と置き,以下の連立方程式を解く。

include("julia-source.txt");

using SymPy
@syms d, r1::positive, x1::negative,
     r2::positive, y2::negative,
     r3::positive, y3::positive,
     x::positive, y::positive, x2::positive
eq1 = r1^2 + (y3 - r1)^2 - (r1 + r3)^2
eq2 = 4r1^2 + (y2 - y3)^2 - (r2 + r3)^2
eq3 = r1^2 + (y2 - r1)^2 - (r1 + r2)^2
eq4 = dist(0, 0, x, y, x1, r1) - r1^2
eq5 = dist(0, 0, x, y, x1 + r1, y3) - r3^2
eq6 = dist(0, 0, x, y, x1 + 3r1, y2) - r2^2
eq7 = dist(x, y, x2, 0, x1 + 3r1, y2) - r2^2
eq8 = dist(x, y, x2, 0, x1 + 4r1, r1) - r1^2;

using NLsolve

function nls(func, params...; ini = [0.0])
   if typeof(ini) <: Number
       r = nlsolve((vout, vin) -> vout[1] = func(vin[1], params..., [ini]), ftol=big"1e-40")
       v = r.zero[1]
   else
       r = nlsolve((vout, vin)->vout .= func(vin, params...), ini, ftol=big"1e-40")
       v = r.zero
   end
   return Float64.(v), r.f_converged
end;

function H(u)
   (x1, r2, y2, r3, y3, x, y, x2) = u
   return [
       r1^2 + (-r1 + y3)^2 - (r1 + r3)^2,  # eq1
       4*r1^2 - (r2 + r3)^2 + (y2 - y3)^2,  # eq2
       r1^2 + (-r1 + y2)^2 - (r1 + r2)^2,  # eq3
       -r1^2 + (r1 - y*(r1*y + x*x1)/(x^2 + y^2))^2 + (-x*(r1*y + x*x1)/(x^2 + y^2) + x1)^2,  # eq4
       -r3^2 + (-y*(x*(r1 + x1) + y*y3)/(x^2 + y^2) + y3)^2 + (r1 - x*(x*(r1 + x1) + y*y3)/(x^2 + y^2) + x1)^2,  # eq5
       -r2^2 + (-y*(x*(3*r1 + x1) + y*y2)/(x^2 + y^2) + y2)^2 + (3*r1 - x*(x*(3*r1 + x1) + y*y2)/(x^2 + y^2) + x1)^2,  # eq6
       -r2^2 + (-y + y*(-y*(-y + y2) + (-x + x2)*(3*r1 - x + x1))/(y^2 + (-x + x2)^2) + y2)^2 + (3*r1 - x + x1 - (-x + x2)*(-y*(-y + y2) + (-x + x2)*(3*r1 - x + x1))/(y^2 + (-x + x2)^2))^2,  # eq7
       -r1^2 + (r1 - y + y*(-y*(r1 - y) + (-x + x2)*(4*r1 - x + x1))/(y^2 + (-x + x2)^2))^2 + (4*r1 - x + x1 - (-x + x2)*(-y*(r1 - y) + (-x + x2)*(4*r1 - x + x1))/(y^2 + (-x + x2)^2))^2,  # eq8
   ]
end;

r1 = 10
iniv = BigFloat[24, 15, 33, 6.4, 24, 62.5, 62.5, 78]
res = nls(H, ini=iniv)

   ([24.534049509916077, 14.768336246810202, 32.659887034913744, 7.084973778708188, 23.852665051142555, 63.12069962325806, 61.70734973660005, 77.04124269850617], true)

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

その他のパラメータは以下のとおりである。

甲円の直径 = 20;  乙円の直径 = 29.5367;  丙円の直径 = 14.1699
x1 = 24.534;  r2 = 14.7683;  y2 = 32.6599;  r3 = 7.08497;  y3 = 23.8527;  x = 63.1207;  y = 61.7073;  x2 = 77.0412

function draw(more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   r1 = 10
   (x1, r2, y2, r3, y3, x, y, x2) = res[1]
   @printf("甲円の直径 = %g;  乙円の直径 = %g;  丙円の直径 = %g\n", 2r1, 2r2, 2r3)
   @printf("x1 = %g;  r2 = %g;  y2 = %g;  r3 = %g;  y3 = %g;  x = %g;  y = %g;  x2 = %g\n", x1, r2, y2, r3, y3, x, y, x2)
   plot([0, x2, x, 0], [0, 0, y, 0], color=:black, lw=0.5)
   circle(x1, r1, r1, :green)
   circle(x1 + 2r1, r1, r1, :green)
   circle(x1 + 4r1, r1, r1, :green)
   circle(x1 + r1, y3, r3, :blue)
   circle(x1 + 3r1, 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(x, y, "(x, y)", :black, :right, :bottom, delta=delta)
       point(x1, r1, " 甲円:r1\n (x1,r1)", :green, :center, delta=-delta)
       point(x1+2r1, r1, " 甲円:r1\n (x1+2r1,r1)", :green, :center, delta=-delta)
       point(x1+4r1, r1, " 甲円:r1\n (x1+4r1,r1)", :green, :center, delta=-delta)
       point(x1 + 3r1, y2, " 乙円:r2,(x1+3r1,y2)", :magenta, :center, delta=-delta)
       point(x1 + r1, y3, " 丙円:r3,(x1+r1,y3)", :blue, :left, :vcenter)
       point(x2, 0, " x2", :black, :left, :bottom, delta=delta)
   end
end;

 

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

算額(その750)

2024年03月04日 | Julia

算額(その750)

三五 大宮市中釘 秋葉神社 天保11年(1840)
埼玉県立図書館:埼玉県史料集 第二集『埼玉の算額』,昭和44年,誠美堂印刷所,埼玉県与野市.

埼玉県さいたま市西区中釘 秋葉神社 天保11年(1840)
山口正義:やまぶき,第20号

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

外円の中に長さが 4 寸 8 分の水平な弦を引きその上下に大円と小円を置く。小円の直径が 1 寸 8 分のとき,大円の直径はいかほどか。

外円の半径と中心座標を R, (0, 0)
大円の半径と中心座標を r1, (x1, y + r1)
小円の半径と中心座標を r2, (x2, y + r2), (0, r2 - R)
弦と y 軸の交点座標を (0, y); y < 0
とおき,以下の連立方程式を解く。

include("julia-source.txt");

using SymPy
@syms R::positive, y::negative,
     r1::positive, x1::negative,
     r2::positive, x2::positive
@syms R, y, r1, r2, x1, x2
r2 = 18//20
y = -sqrt(R^2 -(48//20)^2)
eq1 = x1^2 + (y + r1)^2 - (R - r1)^2
eq2 = x2^2 + (y + r2)^2 - (R - r2)^2
eq3 = (x2 - x1)^2 + (r2 - r1)^2 - (r2 + r1)^2
eq4 = 2r2 - R - y
res = solve([eq1, eq2, eq3, eq4], (R, r1, x1, x2))

   4-element Vector{NTuple{4, Sym{PyCall.PyObject}}}:
    (5/2, (5 - sqrt(7))^2/40, -3/2 - 3*sqrt(7)/10, -3*sqrt(7)/5)
    (5/2, (5 - sqrt(7))^2/40, 3*sqrt(7)/10 + 3/2, 3*sqrt(7)/5)
    (5/2, (sqrt(7) + 5)^2/40, -3/2 + 3*sqrt(7)/10, 3*sqrt(7)/5)
    (5/2, (sqrt(7) + 5)^2/40, 3/2 - 3*sqrt(7)/10, -3*sqrt(7)/5)

4 組の解が得られるが,3 番目のものが適解である。

大円の直径は (√7 + 5)^2/20 = (5√7 + 16)/10 = 2.9228756555322954 である。

「術」には 「二寸四ト令二毛有奇」とある。

その他のパラメータは以下のとおりである。

R = 2.5;  y = -0.7;  r1 = 1.46144;  x1 = -0.706275;  x2 = 1.58745

function draw(more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   r2 = 18//20
   (R, r1, x1, x2) = (5/2, (sqrt(7) + 5)^2/40, -3/2 + 3*sqrt(7)/10, 3*sqrt(7)/5)
   y = -sqrt(R^2 -(48/20)^2)
   @printf("大円の直径 = %g;  R = %g;  y = %g;  r1 = %g;  x1 = %g;  x2 = %g\n", 2r1, R, y, r1, x1, x2)
   plot()
   circle(0, 0, R, :green)
   circle(x1, y + r1, r1)
   circle(x2, y + r2, r2, :blue)
   segment(-4.8/2, y, 4.8/2, y)
   circle(0, r2 - R, 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, y, " y", :black, :left, :bottom, delta=delta)
       point(0, r2 - R, " 小円:r2,(0,r2-R)", :blue, :center, delta=-delta)
       point(x2, y + r2, " 小円:r2,(x2,y+r2)", :blue, :center, delta=-delta)
       point(x1, y + r1, " 大円:r1,(x1,y+r1)", :red, :center, delta=-delta)
       point(R, 0, " R", :green, :left, :bottom, delta=delta/2)
   end
end;

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

算額(その749)

2024年03月04日 | Julia

算額(その749)

埼玉県滑川町 頌徳碑(内田往延先生碑) 昭和8年
山口正義:やまぶき2,第41号

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

長方形の中に大,中の半円と小円 1 個が内接している。小円の直径が与えられたとき,長方形の長辺の長さはいかほどか。

大円の半径と中心座標を r2, (a - r2, 0)
中円の半径と中心座標を r1, (0, r1)
小円の半径と中心座標を r3,  (x3, r2 - r3)
とおき,連立方程式を解く。

include("julia-source.txt");

using SymPy
@syms r1::positive, r2::positive, a::positive,
     r3::positive, x3::positive
r1 = 2r2
eq1 = r2^2 + (a - r1)^2 - (r1 + r2)^2
eq2 = x3^2 + (r2 - r3)^2 - (r2 + r3)^2
eq3 = (a - r1 - x3)^2 + (r1 - r3)^2 - (r1 + r3)^2
res = solve([eq1, eq2, eq3], (a, r2, x3))

   2-element Vector{Tuple{Sym{PyCall.PyObject}, Sym{PyCall.PyObject}, Sym{PyCall.PyObject}}}:
    (7*r3 + 5*sqrt(2)*r3, r3*(2*sqrt(2) + 3)/2, r3*(sqrt(2) + 2))
    (-5*sqrt(2)*r3 + 7*r3, r3*(3 - 2*sqrt(2))/2, r3*(2 - sqrt(2)))

術文では「2 を置いて平方に開き,天と名付け 16 を乗じ 24 を加え,これを平方に開き,天を 3 倍したものと 3 を加え,これに小径の半を乗じる」としている。(sqrt(16√2 + 24) + 3√2 + 3)r3 であるが,二重根号を解消して簡単に r3*(7 + 5√2) となり,連立方程式による解と一致する。

(sqrt(16√Sym(2) + 24) + 3√Sym(2) + 3)*r3 |> sympy.sqrtdenest |> simplify |> println

   r3*(7 + 5*sqrt(2))

小円の直径が 2 のとき,長方形の長辺の長さは 14.0711 である。

   長方形の長辺 = 14.0711;  小円の直径 = 2;  r3 = 1;  x3 = 3.41421

function draw(more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   r3 = 1
   (a, r2, x3) = r3 .* (7 + 5√2, (2√2 + 3)/2, √2 + 2)
   r1 = 2r2
   @printf("長方形の長辺 = %g;  小円の直径 = %g;  r3 = %g;  x3 = %g\n", a, 2r3, r3, x3)
   plot([0, a, a, 0, 0], [0, 0, r1, r1, 0], color=:black, lw=0.5)
   circle(0, r2, r2, beginangle=270, endangle=450)
   circle(a - r1, 0, r1, :blue, beginangle=0, endangle=180)
   circle(x3, r1 - r3, r3, :green)
   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", :black, :left, :bottom, delta=delta)
       point(a - r1, 0, "大円:r1,(a-r1,0)", :blue, :center, :bottom, delta=delta)
       point(0, r2, " 中円:r2\n (0,r2)", :red, :left, :vcenter)
       point(x3, r1 - r3, " 小円:r3,(x3,r1-r3)", :black, :left, :vcenter)
   end
end;

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

算額(その748)

2024年03月04日 | Julia

算額(その748)

埼玉県北本市本宿 天神社 明治24年(1891)
山口正義:やまぶき2,第41号

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

扇面に,大円 1 個,中円,小円がそれぞれ 2 個入っている。骨長(要から扇の端までの長さ)が 3 寸 6 分 5 厘,中円の直径が 1 寸 4 分のとき,小円の直径はいかほどか。

骨長を R
大円の半径と中心座標を r1, (0, R - r1)
中円の半径と中心座標を r2, (x2, y2)
小円の半径と中心座標を r3, (x3, y3)
とおき,以下の連立方程式を解く。

include("julia-source.txt");

using SymPy
@syms R::positive, r1::positive, r2::positive, x2::positive,
     y2::positive, r3::positive, x3, y3
r1 = r2 + r3
eq1 = r3*(R - r2) - r2*(R - 2r2 - r3)
eq2 = x2^2 + (R - r1 - y2)^2 - (r1 + r2)^2
eq3 = x2^2 + y2^2 - (R - r2)^2
eq4 = (R - 2r2 - r3)*x2 - x3*(R- r2)
eq5 = y3*x2 - y2*x3

$x_{2} y_{3} - x_{3} y_{2}$

res = solve([eq1, eq2, eq3, eq4, eq5], (r3, x2, y2, x3, y3))

   2-element Vector{NTuple{5, Sym{PyCall.PyObject}}}:
    (-r2*(-R + 2*r2)/R, 2*sqrt(2)*sqrt(R)*r2*(-R + r2)*sqrt(R^3 - 6*R^2*r2 + 12*R*r2^2 - 8*r2^3)/(R^3 - 4*R^2*r2 + 6*R*r2^2 - 4*r2^3), (-R + r2)*(-R^2 + 2*R*r2 + 2*r2^2)/(R^2 - 2*R*r2 + 2*r2^2), 2*sqrt(2)*r2*sqrt(-(-R + 2*r2)^3)*(-R + r2)/(sqrt(R)*(R^2 - 2*R*r2 + 2*r2^2)), -(-R + r2)*(-R + 2*r2)*(-R^2 + 2*R*r2 + 2*r2^2)/(R*(R^2 - 2*R*r2 + 2*r2^2)))
    (-r2*(-R + 2*r2)/R, 2*sqrt(2)*sqrt(R)*r2*(R - r2)*sqrt(R^3 - 6*R^2*r2 + 12*R*r2^2 - 8*r2^3)/(R^3 - 4*R^2*r2 + 6*R*r2^2 - 4*r2^3), (-R + r2)*(-R^2 + 2*R*r2 + 2*r2^2)/(R^2 - 2*R*r2 + 2*r2^2), -2*sqrt(2)*r2*sqrt(-(-R + 2*r2)^3)*(-R + r2)/(sqrt(R)*(R^2 - 2*R*r2 + 2*r2^2)), -(-R + r2)*(-R + 2*r2)*(-R^2 + 2*R*r2 + 2*r2^2)/(R*(R^2 - 2*R*r2 + 2*r2^2)))

小円の半径は r2*(R - 2r2)/R である。
骨長が 3.65 寸,中円の直径が 1.4 寸のとき,小円の直径は 0.863013698630137 寸 = 8 分 6 厘有奇である。

(R, r2) = (3.65, 1.40/2)
2r2*(R - 2r2)/R

   0.863013698630137

その他のパラメータは以下のとおりである。

   小円の直径 = 0.863014;  R = 3.65;  r3 = 0.431507
   x2 = 1.82083;  y2 = 2.32101;  x3 = 1.12243;  y3 = 1.43076

function draw(more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   (R, r2) = (3.65, 1.40/2)
   (r3, x2, y2, x3, y3) = (-r2*(-R + 2*r2)/R, 2*sqrt(2)*sqrt(R)*r2*(R - r2)*sqrt(R^3 - 6*R^2*r2 + 12*R*r2^2 - 8*r2^3)/(R^3 - 4*R^2*r2 + 6*R*r2^2 - 4*r2^3), (-R + r2)*(-R^2 + 2*R*r2 + 2*r2^2)/(R^2 - 2*R*r2 + 2*r2^2), -2*sqrt(2)*r2*sqrt(-(-R + 2*r2)^3)*(-R + r2)/(sqrt(R)*(R^2 - 2*R*r2 + 2*r2^2)), -(-R + r2)*(-R + 2*r2)*(-R^2 + 2*R*r2 + 2*r2^2)/(R*(R^2 - 2*R*r2 + 2*r2^2)))
   r1 = r2 + r3
   @printf("小円の直径 = %g;  R = %g;  r3 = %g\n", 2r3, R, r3)
   @printf("x2 = %g;  y2 = %g;  x3 = %g;  y3 = %g\n", x2, y2, x3, y3)
   α = acosd(((R - r1)^2 + (R - r2)^2 - (r1 + r2)^2)/(2(R - r1)*(R - r2)))
   β = asind(r2/(R - r2))
   ba = α + β
   plot()
   circle(0, 0, R, :green, beginangle=90 - ba, endangle=90 + ba)
   circle(0, 0, R - 2r1, :green, beginangle=90 - ba, endangle=90 + ba)
   segment(0, 0, R*sind(ba), R*cosd(ba), :green)
   segment(0, 0, -R*sind(ba), R*cosd(ba), :green)
   circle(0, R - r1, r1)
   circle2(x2, y2, r2, :blue)
   circle2(x3, y3, r3, :orange)
   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 - r1, "大円:r1,(0,R-r1)", :red, :center, :bottom, delta=delta)
       point(x2, y2, "中円:r2\n(x2,y2)", :blue, :center, :bottom, delta=delta)
       point(x3, y3, "小円:r3,(x3,y3)", :black, :right, :bottom, delta=delta)
       point(0, R, "R", :green, :center, :bottom, delta=delta)
   end
end;

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

算額(その747)

2024年03月04日 | Julia

算額(その747)

埼玉県北本市本宿 天神社 明治24年(1891)
山口正義:やまぶき2,第41号

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

正六角形の中に対角線を 6 本引いて正三角形を 2 個作り,内部にできる小さな正六角形に内接する大円と,2本の対角線と正六角形の一辺に接する小円を 6 個いれる。大円の直径が 2 寸のとき,小円の直径はいかほどか。

正六角形の一辺の長さを R とする。
大円の直径は正六角形の一辺の長さと等しい。
直角三角形 ABC を考えると,小円の直径 2r2 と辺の長さ AB, AC, BC は, AB + AC - BC = 2r2 の関係がある。AC = R, AB = R/√3, BC = 2R/√3 より,r2 = R*(3 - √3)/6

R = 2 寸のとき,r2 = 0.42264973081037427 である。小円の直径は 0.8452994616207485 = 8 分 4 厘有奇である。

include("julia-source.txt");

using SymPy
@syms R::positive, r2::positive
eq = R/sqrt(Sym(3)) + R - 2R/sqrt(Sym(3)) - 2r2
solve(eq, r2)

   1-element Vector{Sym{PyCall.PyObject}}:
    R*(3 - sqrt(3))/6

function draw(more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   R = 2
   n = 6
   x = Vector{Float64}(undef, n + 2)
   y = Vector{Float64}(undef, n + 2)
   for i = 1:n + 2
       x[i] = R*cosd(60(i - 1) + 30)
       y[i] = R*sind(60(i - 1) + 30)
   end
   r2 = R*(3 - sqrt(3))/6
   @printf("小円の直径 = %g;  R = %g;  r2 = %g\n", 2r2, R, r2)
   plot()
   circle(0, 0, R/2, :green)
   rotate(x[1]-r2, y[1]-r2, r2, angle=60)
   for i = 1:n
       segment(x[i], y[i], x[i+1], y[i+1], :blue)
       segment(x[i], y[i], x[i+2], y[i+2], :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(R*cosd(30), R*sind(30), "A", :blue, :left, :bottom, delta=delta/2)
       point(R*cosd(30), -R*sind(30), "C", :blue, :left, :top, delta=-delta/2)
       point(R/2√3, R/2, "B", :blue, :left, :bottom, delta=delta/2)
   end
end;

 

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

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

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