裏 RjpWiki

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

算額(その2045)

2024年08月25日 | Julia

算額(その2045)

百八 群馬県邑楽郡板倉町板倉 雷電神社 慶応3年(1867)
群馬県和算研究会:群馬の算額,上武印刷株式会社,高崎市,1987年3月31日.

楕円の中に等円を 3 個容れる。等円の直径が 1 寸のとき,楕円の短径はいかほどか。

楕円の長半径,短半径,中心座標を a, b, (0, 0)
等円の半径,中心座標を r, (0, 0), (2r, 0)
とおき,以下の連立方程式を解く。
左右の等円は楕円の曲率円なので,r = b^2/a である。また,長半径は等円の半径の 3 倍である。

include("julia-source.txt");

using SymPy
@syms a::positive, b::positive, r::positive
eq1 = b^2/a - r
eq2 = 3r - a
res = solve([eq1, eq2], (a, b))[1]

   (3*r, sqrt(3)*r)

楕円の短径は等円の直径の √3 倍である。
等円の直径が 1 寸のとき,楕円の短径は 1.7320508075688772 寸である。

ちなみに,楕円の長径は等円の直径の 3 倍である。
等円の直径が 1 寸のとき,楕円の長径は 1.7320508075688772 寸である。

function draw(r, more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   (a, b) = (3*r, sqrt(3)*r)
   @printf("等円の直径が %g のとき,楕円の短径は %.8g である。\n", 2r, 2b)
   plot()
   ellipse(0, 0, a, b, color=:red)
   circle2(2r, 0, r, :blue)
   circle(0, 0, 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, b, " b", :red, :left, :bottom, delta=delta/2)
       point(2r, 0, "等円:r,(2r,0)", :blue, :center, delta=-delta/2)
       point(0, 0, "等円:r,(0,0)", :blue, :center, delta=-delta/2)
       point(a, 0, " a", :red, :left, :bottom, delta=delta/2)
   end
end;

draw(1/2, true)

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

算額(その2044)

2024年08月25日 | Julia

算額(その2044)

(9) 滋賀県マキノ町海津 天神社 明治8年(1875)
近畿数学史学会:近畿の算額「数学の絵馬を訪ねて」,平成4年5月16日 初版第一刷,大阪教育図書株式会社,大阪市.
キーワード:円3個,長方形,斜線2本

長方形の中に斜線を 2 本引き,大円 1 個,小円 2 個を容れる。長方形の長辺と短辺が 5 寸,4 寸,また,大円の直径が 2.2 寸のとき,小円の直径はいかほどか。

算額の図を見れば,長方形の長辺と短辺の比が 5:4 になっていないことが明白である。図面から測定すると,長方形の短辺を 4 寸とすれば,長辺は 5.788 寸,大円の直径は 2.73 寸である。上図はこの寸法で描いたものである。

与えられた条件の寸法で解を求め,実際に図を書いてみると下図のようになる。小円は斜線と交わるし,小円は大円より大きい。

長方形の長辺と短辺を 2a, b
斜線と長方形の長辺の交点座標を (c, 0); c < 0
大円の半径と中心座標を r1, (0, b - r1)
小円の半径と中心座標を r2, (a - r2, r2)
とおき,以下の連立方程式を解く。

include("julia-source.txt");

using SymPy
@syms a::positive, b::positive, c::negative, r1::positive, r2::positive
eq1 = dist2(c, 0, a, b, 0, b - r1, r1)
eq2 = dist2(c, 0, a, b, a - r2, r2, r2)
res = solve([eq1, eq2], (r2, c))[1]

   ((a*b - b*r1)/(2*a), (-a^2*b + 2*a^2*r1 + b*r1^2)/(2*a*r1))

長方形の長辺と短辺が 5, 4,大円の直径が 2.2 のとき,小円の直径は 2.24 である。

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

  a = 2.5;  b = 4;  r1 = 1.1;  r2 = 1.12;  c = -1.16545

function draw(a, b, r1, more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   (r2, c) = ((a*b - b*r1)/(2*a), (-a^2*b + 2*a^2*r1 + b*r1^2)/(2*a*r1))
   @printf("長方形の長辺と短辺が %g, %g,大円の直径が %g のとき,小円の直径は %g である。\n", 2a, b, 2r1, 2r2)
   @printf("a = %g;  b = %g;  r1 = %g;  r2 = %g;  c = %g\n", a, b, r1, r2, c)
   plot([a, a, -a, -a, a], [0, b, b, 0, 0], color=:green, lw=0.5)
   circle(0, b - r1, r1)
   circle2(a - r2, r2, r2, :blue)
   segment(c, 0, a, b)
   segment(-c, 0, -a, b)
   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, b - r1, "大円:r1,(0,b-r1)", :red, :center, delta=-delta/2)
       point(a - r2, r2, "小円:r2(a-r2,r2)", :blue, :center, delta=-delta/2)
       point(a, 0, "a", :green, :center, delta=-delta)
       point(c, 0, "c", :black, :center, delta=-delta)
       point(0, b, " b", :black, :left, :bottom, delta=delta/2)
       plot!(xlims=(-a - 5delta, a + 5delta), ylims=(-5delta, b + 5delta))
   end
end;

draw(5/2, 4, 2.2/2, true)

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

算額(その2043)

2024年08月25日 | Julia

算額(その2043)

(9) 滋賀県マキノ町海津 天神社 明治8年(1875)
近畿数学史学会:近畿の算額「数学の絵馬を訪ねて」,平成4年5月16日 初版第一刷,大阪教育図書株式会社,大阪市.
キーワード:円4個,正三角形

正三角形の頂点を中心とする天円,正三角形内に等円 3 個を容れる。等円の直径が 1 寸のとき,天円の直径,正三角形の一辺の長さはいかほどか。

「問」に「3 個の等円はそれぞれが,正三角形と 2 箇所で接する」と書かれているが,先に結論を書いておくが,この条件では図は描けない。

1. 「上の等円が正三角形の辺と 2 箇所で接する」とする場合

「答」では,「天円径三寸,三角面二寸八分〇六毛余」とあるので,「問」はこちらの場合を意図していたのであろう(正三角形の一辺の長さは不正確であるが)。

include("julia-source.txt");

using SymPy
@syms r1::positive, r2::positive, a::positive
#@syms r1, r2, a
eq1 = r2^2 + (√Sym(3)a - r2)^2 - (r1 + r2)^2
eq2 = dist2(a, 0, 0, √Sym(3)a, 0, √Sym(3)a - r1 + r2, r2)
res = solve([eq1, eq2], (r1, a))[1]

   (7*r2*(-6*sqrt(15)/7 - 6/7)/12 - r2/2 + 49*r2*(-6*sqrt(15)/7 - 6/7)^2/144, -7*sqrt(3)*r2*(-6*sqrt(15)/7 - 6/7)/18)

2. 「下の等円が正三角形の辺と 2 箇所で接する」とする場合

include("julia-source.txt");

using SymPy
@syms r1::positive, r2::positive, a::positive
#@syms r1, r2, a
eq1 = r2^2 + (√Sym(3)a - r2)^2 - (r1 + r2)^2
eq3 = dist2(a, 0, 0, √Sym(3)a, r2, r2, r2)
res = solve([eq1, eq3], (r1, a))[3]

   (sqrt(2)*sqrt(r2)*sqrt(r2 + sqrt(3)*r2 + r2*(sqrt(3) + 3)) - r2, 2*sqrt(3)*r2/3 + r2*(sqrt(3) + 3)/3)

3. なぜこのような齟齬が生じるのか

算額を解く「和算」では,図形全体としての整合性の確認がおろそかだったのではないか。この「問」では,天円の直径と正三角形の一辺の 2 パラメータを求めよとしているが,多くの算額ではただ 1 つのパラメータを求めよとするものが普通である。この算額でも,実際に図を描いてみると,「3 個の等円はそれぞれが,正三角形と 2 箇所で接する」という条件を満たすことができないことはすぐに分かることである。もう一つの原因は,精密な図を描くことが難しかったので,「ちょっと接していないようだが,誤差範囲だよね」ということもあったのだろう。
「〇〇の算額」という書籍が何冊か発行されているが,著者がすべての問題を解いて,「問」,「答」,「術」の妥当性を確かめたとは思えない(不適切な解がそのまま載っている)ことが稀にあるのが残念である。

function draw(r2, more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   (r1, a) = (7*r2*(-6*sqrt(15)/7 - 6/7)/12 - r2/2 + 49*r2*(-6*sqrt(15)/7 - 6/7)^2/144, -7*sqrt(3)*r2*(-6*sqrt(15)/7 - 6/7)/18)
   (r1, a) = (sqrt(2)*sqrt(r2)*sqrt(r2 + sqrt(3)*r2 + r2*(sqrt(3) + 3)) - r2, 2*sqrt(3)*r2/3 + r2*(sqrt(3) + 3)/3)
   string = @sprintf("上の等円が斜辺に接するように立式したとき\n等円の直径 = %g\n天円の直径 = %g\n正三角形の一辺の長さ = %g", 2r2, r1, 2a)
   @printf("等円の直径が %g のとき,天円の直径は %g,正三角形の一辺の長さは %g である。\n", 2r2, r1, 2a)
   @printf("r2 = %g;  r1 = %g;  a = %g\n", r2, r1, a)
   plot([a, 0, -a, a], [0, √3a, 0, 0], color=:green, lw=0.5)
   circle(0, √3a, r1)
   circle(0, √3a - r1 + r2, r2, :blue)
   circle2(r2, 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, √3a + 15delta, string, :black, :left, deltax=-22delta, mark=false)
       point(0, √3a, "天円:r1,(0,√3a)", :red, :center, :bottom, delta=delta)
       point(r2, r2, "等円:r2,(r2,r2)", :blue, :center, :bottom, delta=delta)
       point(0, √3a - r1 + r2, "等円:r2\n(0,√3a-r1+r2)", :blue, :center, :bottom, delta=delta)
   end
end;

draw(1/2, true)

 

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

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

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