裏 RjpWiki

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

算額(その980)

2024年05月20日 | Julia

算額(その980)

一七 大里郡岡部村岡 稲荷社 文化13年(1816)

埼玉県立図書館:埼玉県史料集 第二集『埼玉の算額』,昭和44年,誠美堂印刷所,埼玉県与野市.

正三角形の中に斜線 2 本,大円 1 個,小円 3 個を入れる。大円の直径が 500 寸のとき,小円の直径はいかほどか。

正三角形の一辺の長さを 2a
斜線と正三角形の底辺との交点座標を (b, 0)
大円の半径と中心座標を r1, (0, 2r1 + r1)
小円の半径と中心座標を r2, (0, r2), (x2, y2)
とおき,手動で連立方程式を解いていったが,最後の最後で,次数が高すぎて SymPy の手に負えなくなったので,その時点で r1 = 1 を代入し数値解を求めた。問の「大円の直径が 500 寸」に対応するには,単に得られた数値ベクトルを 250 倍すればよいだけではある。

include("julia-source.txt");

using SymPy
@syms a::positive, b::positive,
     r1::positive, r2::positive, x2::positive, y2::positive
x2 = √Sym(3)*(y2 - 2r2 - r1)
eq1 = x2^2 + (y2 - 2r2 - r1)^2 - (r1 - r2)^2
eq2 = 2r1 - (√Sym(3)*a - 2r2 - r1)
eq3 = r2*sqrt(3a^2 + b^2)- b*(√Sym(3)*a - r2)
eq4 = dist2(0, √Sym(3)*a, b, 0, x2, y2, r2);
# res = solve([eq1, eq2, eq3, eq4, eq5], (a, b, r2, x2, y2))

println(eq1, ",  # eq1")
println(eq2, ",  # eq2")
println(eq3, ",  # eq3")
println(eq4, ",  # eq4")

   -(r1 - r2)^2 + 4*(-r1 - 2*r2 + y2)^2,  # eq1
   -sqrt(3)*a + 3*r1 + 2*r2,  # eq2
   -b*(sqrt(3)*a - r2) + r2*sqrt(3*a^2 + b^2),  # eq3
   (3*a^2*b^2 + 6*sqrt(3)*a^2*b*r1 + 12*sqrt(3)*a^2*b*r2 - 6*sqrt(3)*a^2*b*y2 + 9*a^2*r1^2 + 36*a^2*r1*r2 - 18*a^2*r1*y2 + 33*a^2*r2^2 - 36*a^2*r2*y2 + 9*a^2*y2^2 - 2*sqrt(3)*a*b^2*y2 - 6*a*b*r1*y2 - 12*a*b*r2*y2 + 6*a*b*y2^2 - b^2*r2^2 + b^2*y2^2)/(3*a^2 + b^2),  # eq4

ans_y2 = solve(eq1, y2)[2]
ans_y2 |> println

   3*r1/2 + 3*r2/2

ans_a = solve(eq2, a)[1]
ans_a |> println

   sqrt(3)*(r1 + 2*r2/3)

eq3 = eq3(a => ans_a) |> simplify;

ans_b = solve(eq3, b)[1]
ans_b |> println

   r2*sqrt(9*r1 + 6*r2)/(3*sqrt(r1))

ans_b |> simplify
ans_b |> println

   r2*sqrt(9*r1 + 6*r2)/(3*sqrt(r1))

eq4 = eq4(y2 => ans_y2, a => ans_a, b => ans_b) |> simplify |> numerator |> simplify;
eq4 |> println

   -54*r1^(7/2)*r2*sqrt(3*r1 + 2*r2) + 42*r1^(3/2)*r2^3*sqrt(3*r1 + 2*r2) + 12*sqrt(r1)*r2^4*sqrt(3*r1 + 2*r2) + 81*r1^5 - 54*r1^4*r2 - 180*r1^3*r2^2 - 72*r1^2*r2^3 - 9*r1*r2^4 - 6*r2^5

eq4 = eq4(r1 => 1)
eq4 |> println

   -6*r2^5 + 12*r2^4*sqrt(2*r2 + 3) - 9*r2^4 + 42*r2^3*sqrt(2*r2 + 3) - 72*r2^3 - 180*r2^2 - 54*r2*sqrt(2*r2 + 3) - 54*r2 + 81

ans_r2 = solve(eq4, r2)[2]
ans_r2 |> println

   -1 - 4/(3*(4 + 4*sqrt(93)/9)^(1/3)) + (4 + 4*sqrt(93)/9)^(1/3)

r1 = 1
r2 = -1 - 4/(3*(4 + 4*sqrt(93)/9)^(1/3)) + (4 + 4*sqrt(93)/9)^(1/3)
b = r2*sqrt(9r1 + 6r2)/(3*sqrt(r1))
a = √3*(r1 + 2*r2/3)
y2 = 3r1/2 + 3r2/2
x2 = √3*(y2 - 2r2 - r1)
(r1, r2, a, b, x2, y2) |> println
250 .*(r1, r2, a, b, x2, y2) |> println

   (1, 0.36465560765603855, 2.153118834052318, 0.4065711730355355, 0.5502243839218582, 2.046983411484058)
   (250, 91.16390191400964, 538.2797085130795, 101.64279325888388, 137.55609598046456, 511.7458528710145)

大円の直径が 500 寸のとき,小円の直径は 182.32780382801928 寸である。

前にも 1 問イレギュラーなのがあったが,このシリーズでは解は整数値に極めて近い解になるのがシバリであるが,この問も解がきれいな数値にならない。

function draw(more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   r1 = 1
   r2 = -1 - 4/(3*(4 + 4*sqrt(93)/9)^(1/3)) + (4 + 4*sqrt(93)/9)^(1/3)
   b = r2*sqrt(9r1 + 6r2)/(3*sqrt(r1))
   a = √3*(r1 + 2*r2/3)
   y2 = 3r1/2 + 3r2/2
   x2 = √3*(y2 - 2r2 - r1)
   (r1, r2, a, b, x2, y2) = 250 .*(r1, r2, a, b, x2, y2)
   @printf("大円の直径 = %g;  小円の直径 = %g\n", 2r1, 2r2)
   @printf("a = %g;  b = %g;  r2 = %g;  x2 = %g;  y2 = %g\n", a, b, r2, x2, y2)
   plot([a, 0, -a, a], [0, √3a, 0, 0], color=:blue, lw=0.5)
   circle(0, 2r2 + r1, r1)
   circle(0, r2, r2, :green)
   circle2(x2, y2, r2, :green)
   segment(b, 0, 0, √3a)
   segment(-b, 0, 0, √3a)
   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, 2r2 + r1, "大円:r1,(0,2r2+r1)", :red, :center, delta=-delta)
       point(x2, y2, "小円:r2\n(x2,y2)", :black, :center, delta=-delta/2)
       point(0, r2, "小円:r2\n(0,r2)", :green, :center, delta=-delta/2)
       point(a, 0, " a", :blue, :left, :bottom, delta=delta/2)
       point(b, 0, " b", :blue, :left, :bottom, delta=delta/2)
       point(0, √3a, " √3a", :blue, :left, :bottom, delta=delta/2)
   end
end;

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

算額(その979)

2024年05月20日 | Julia

算額(その979)

一七 大里郡岡部村岡 稲荷社 文化13年(1816)

埼玉県立図書館:埼玉県史料集 第二集『埼玉の算額』,昭和44年,誠美堂印刷所,埼玉県与野市.

外円内に水平な弦を引き,その上に甲円,乙円,丙円が入っている。甲円の直径は外円の直径の半分である。甲円の直径が 2 寸のとき,丙円の直径はいかほどか。

外円の半径と中心座標を R, (0, 0)
甲円の半径と中心座標を r1, (0, R - r1)
乙円の半径と中心座標を r2, (x2, r2 - 2r3)
丙円の半径と中心座標を r3, (0, -r3)
とおき,以下の連立方程式を解く。

include("julia-source.txt");

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

   (r1/2, 3*r1/4, sqrt(6)*r1/2)

丙円の半径 r3 は甲円の半径 r1の 1/2 である。
甲円の直径が 2 寸のとき,丙円の直径は 1 寸である。

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

R = 2;  r1 = 1;  r2 = 0.75;  x2 = 1.22474;  r3 = 0.5

function draw(more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   r1 = 2/2
   (r3, r2, x2) = (r1/2, 3*r1/4, sqrt(6)*r1/2)
   R = 2r1
   @printf("甲円の直径が %g のとき,丙円の直径は %g である。\n", 2r1, 2r3)
   @printf("R = %g;  r1 = %g;  r2 = %g;  x2 = %g;  r3 = %g\n", R, r1, r2, x2, r3)
   plot()
   circle(0, 0, R)
   circle(0, R - r1, r1, :magenta)
   circle2(x2, r2 - 2r3, r2, :green)
   circle(0, -r3, r3, :blue)
   y = -2r3
   x = sqrt(R^2 - y^2)
   segment(-x, y, x, y, :black)
   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, :left, :bottom, delta=delta/2)
       point(0, R - r1, "甲円:r1,(0,R-r1)", :magenta, :center, delta=-delta/2)
       point(x2, r2 - 2r3, "乙円:r2,(x2,r2-2r3)", :green, :center, delta=-delta/2)
       point(0, -r3, "丙円:r3,(0,-r3)", :blue, :center, delta=-delta/2)
   end
end;

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

算額(その978)

2024年05月20日 | Julia

算額(その978)

一七 大里郡岡部村岡 稲荷社 文化13年(1816)

埼玉県立図書館:埼玉県史料集 第二集『埼玉の算額』,昭和44年,誠美堂印刷所,埼玉県与野市.

横倒しされた台形で,斜辺の一部を共用する正方形が入っている。本来の台形の高さ(股),上底(小頭)がそれぞれ 2 寸,1 寸のとき,下底(大頭)を求めよ。

注:下図は,小頭,股が 1.5 寸,2 寸の場合である。

正方形の一辺の長さを a
正方形の一辺と台形の二辺の一部できる 3 個の直角三角形は相似である。その短い方の辺の長さを b
大頭,小頭,股をそのまま変数名として使う。

include("julia-source.txt");

using SymPy
@syms a::positive, b::positive, θ::positive,
     大頭::positive, 小頭::positive, 股::positive
eq1 = (股 - b)/a - 小頭/a
eq2 = a/(大頭 - b) - 小頭/a
eq3 = (小頭^2 + b^2) - a^2
res = solve([eq1, eq2, eq3], (大頭, a, b))[1]

   (小頭 - 股 + 股^2/小頭, sqrt(2*小頭^2 - 2*小頭*股 + 股^2), -小頭 + 股)

大頭は「小頭 - 股 + 股^2/小頭」で計算できる。
小頭が 1 寸,股が 2 寸のとき,大頭は 3 寸である。

小頭 = 1
股 = 2
小頭 - 股 + 股^2/小頭

   3.0

function draw(more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   (股, 小頭) = (2, 1.5)
   (大頭, a, b) = (小頭 - 股 + 股^2/小頭, sqrt(2*小頭^2 - 2*小頭*股 + 股^2), -小頭 + 股)
   str = @sprintf("小頭 = %g;  股 = %g;  大頭 = %g\n正方形の一辺の長さ = %g;  b = %g", 小頭, 股, 大頭, a, b)
   θ = acos(小頭/a)
   plot([0, 小頭 + b, 小頭 + b, 0, 0], [0, 0, 小頭, 大頭, 0], color=:blue, lw=0.5)
   segment(0, b, 小頭, 0, :red)
   segment(小頭, 0, 小頭 + b, 小頭, :red)
   segment(0, b, a*cos(pi/2 - θ), b + a*sin(pi/2 - θ), :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(股, 小頭, "(股,小頭) ", :blue, :right)
       point(0, 大頭, " 大頭", :blue, :left, :bottom)
       point(0, b, " b", :red, :left, :bottom)
       point(股 - b, 0, " 股-b", :red, :left, :bottom, delta=delta/2)
       point(股, 0, " 股", :blue, :left, :bottom, delta=delta/2)
       point(股/2, 大頭/2, str, :black, :center, :vcenter, mark=false)
   end
end;

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

算額(その977)

2024年05月20日 | Julia

算額(その977)

一七 大里郡岡部村岡 稲荷社 文化13年(1816)

埼玉県立図書館:埼玉県史料集 第二集『埼玉の算額』,昭和44年,誠美堂印刷所,埼玉県与野市.

鈎が 3 寸,股が 4 寸の直角三角形の中に,図に示すように斜線を引く。内接円の直径を求めよ。

内接円の直径は股と平行な直線(y = 鈎/2)上にある。斜線と弦の交点は (股/2, 鈎/2) で,弦を 2 分する。内接円の半径を r とする,以下の方程式を解けばよい。

include("julia-source.txt");

@syms r::positive, 鈎::positive, 股::positive
eq1 = r/(股/2 - r) - 鈎/sqrt(鈎^2 + 股^2)
res = solve(eq1, r)[1]
res |> println

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

鈎が 3 寸,股が 4 寸のとき,内接円の半径は 0.75 = 3/4 寸(直径は 3/2 寸)である。

function draw(more=false)
    pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
    (鈎, 股) = (3, 6)
    r = 股*鈎/(2*(鈎 + sqrt(股^2 + 鈎^2)))
    str = @sprintf("内接円の直径 = %g;  鈎 = %g;  股 = %g\n", r, 鈎, 股)
    plot([0, 股, 0, 0], [0, 0, 鈎, 0], color=:blue, lw=0.5)
    circle(r, 鈎/2, r)
    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, 鈎/2, " (r,3/2)", :red, :left, :vcenter)
        point(股/2, 鈎/2, " (股/2,鈎/2)", :green, :left, :vcenter)
        dimension_line(0, 鈎, 股/2, 鈎/2, "等斜", :green, :left, deltax=4delta)
        dimension_line(0, 0, 股/2, 鈎/2, "等斜", :green, :left, deltax=4delta)
        point(股/2, 2delta, str, :black, :center, :vcenter, mark=false)
    end
end;

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

算額(その976)

2024年05月20日 | Julia

算額(その976)

一七 大里郡岡部村岡 稲荷社 文化13年(1816)

埼玉県立図書館:埼玉県史料集 第二集『埼玉の算額』,昭和44年,誠美堂印刷所,埼玉県与野市.

大円 2 個が外接し,その中心を対角頂点に持つ正方形と,正方形に内接し大円に外接する小円を入れる。大円の直径が 475 寸のとき,小円の直径はいかほどか。

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

include("julia-source.txt");

using SymPy
@syms r1::positive, r2::positive, x2::positive
eq1 = x2^2 + r1^2 - (r1 + r2)^2
eq2 = (r1 - x2)/√Sym(2) - r2
(r2, x2) = solve([eq1, eq2], (r2, x2))[1];
r2 |> simplify |> println
x2 |> simplify |> println

   r1*(-sqrt(2 + 2*sqrt(2)) + 1 + sqrt(2))
   r1*(-sqrt(2) - 1 + 2*sqrt(1 + sqrt(2)))

小円の半径は大円の半径の (1 + √2 - √(2 + 2√2)) 倍である。
大円の直径が 475 寸のとき,小円の直径は 475*(1 + √2 - √(2 + 2√2)) = 103.00153433280056 寸である。

function draw(more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   r1 = 475/2
   t = 1 + √2
   (r2, x2) = r1 .* (t - √2sqrt(t), 2sqrt(t) - t)
   @printf("大円の直径が %g のとき,小円の直径は %g である。\n", 2r1, 2r2)
   plot([r1, 0, -r1, 0, r1], [0, r1, 0, -r1], color=:blue, lw=0.5)
   circle22(0, r1, r1)
   circle2(x2, 0, r2, :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(0, r1, "大円:r1,(0,r1)", :red, :center, :bottom, delta=delta/2)
       point(x2, 0, "小円:r2,(x2,0)", :black, :center, delta=-delta/2)
       point(r1, 0, "r1", :blue, :left, :bottom, delta=delta/2)
   end
end;

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

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

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