裏 RjpWiki

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

算額(その1599)

2025年02月08日 | ブログラミング

算額(その1599)

宮城県角田市小田字斗蔵 斗蔵寺 明治42年(1909)
https://tajin.shiriagari.com/framepage5000.htm
    (リンク先の左のインデックスから選択)
キーワード:直角三角形,面積,最大値
#Julia, #SymPy, #算額, #和算, #数学

直角三角形の中に,図のように正方形を容れる。正方形の一辺の長さが 12 寸のとき,黒積が最大になるのはどのようなときか。またその最大値はいかほどか。

正方形の一辺の長さを a,黒積の直角三角形の頂点を (0, 0), (x, 0), (0, y)
鈎,股,弦をそのまま変数名とする。

証明はそんなに難しいものでもないが,直感でわかり,またそれが正しいことも簡単に示すことができる。

黒積が最大になるのは黒積が直角二等辺三角形のときである。斜辺が 12 寸のとき等辺は 12/√2 なので,黒積は (12/√2)^/2 = 36平方寸 である。

鈎 = 25.4558;  股 = 25.4558;  弦 = 36;  正方形の一辺の長さ = 12;  黒積 = 36

答えは 「4 歩」,術は「弦の冪(二乗)を 36 で割る」となっている。

図に描いてみると,元の直角三角形は黒積と相似(相似比は 3)なので,弦は 12*3 = 36 である。

確かに 36^2 / 36 = 36 となるが,「36」が「4 歩」というのはちょっとおかしい。一般的には「1 歩 = 36 平方尺 = 3600 平方寸」なので,単位に無頓着に「1 歩 = 36 平方寸」としてしまったのか?それにしても「4 歩 = 36」は理解しがたい。

以下は,無理やり SymPy で解く筋道である。

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

using SymPy
@syms 股, 鈎, 弦, 黒積, a, x, y
弦 = sqrt(鈎^2 + 股^2)
a = 12
eq1 = x^2 + y^2 - a^2
eq2 = y/x - 鈎/股
eq3 = 黒積 - x*y/2
res = solve([eq1, eq2, eq3], (黒積, x, y))[2]

    (72*股*鈎/(股^2 + 鈎^2), 12*股*sqrt(1/(股^2 + 鈎^2)), 12*鈎*sqrt(1/(股^2 + 鈎^2)))

黒積 = 72*股*鈎/(股^2 + 鈎^2)= 72*股*鈎/弦^2 である。

diff(res[1], 鈎) |> simplify |> println

    72*股*(股^2 - 鈎^2)/(股^2 + 鈎^2)^2

ans_鈎 = solve(diff(res[1], 鈎), 鈎)[2]  # 2 of 2
ans_鈎 |> println

    股

鈎 = 股 のとき(つまり,二等辺直角三角形のとき)に,黒積は最大になる。
黒積の直角三角形は外側の直角三角形と相似なので,黒積が最大のとき,x = y である。
x^2 + y^2 = 12 なので x = 6√2 である。
つまり,x = y = 6√2 の二等辺三角形のとき黒積が最大値 = (6√2)^2/2 = 36平方寸 である。

function draw(a, more=false)
    pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
    x = y = 12/√2
    鈎 = 股 = 3x
    弦 = sqrt(鈎^2 + 股^2)
    黒積 = x*y/2
    @printf("鈎 = %g;  股 = %g;  弦 = %g;  正方形の一辺の長さ = %g;  黒積 = %g\n", 鈎, 股, 弦, a, 黒積)
    plot([0, 股, 0, 0], [0, 0, 鈎, 0], color=:green, lw=0.5)
    segment(x, 0, 0, y, :black)
    segment(0, y, y, y + x, :black)
    segment(x, 0, x + y, x, :black)
    plot!([0, x, 0, 0], [0, 0, y, 0], seriestype=:shape, color=:gray80, fillcolor=:gray80, lw=0.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)
        point(0, 鈎, " 鈎", :red, :left, :bottom, delta=delta/2)
        point(股, 0, "股", :red, :left, :bottom, delta=delta/2, deltax=0.7delta)
        point(0, y, " y", :red, :left, :vcenter)
        point(x, 0, "x", :red, :center, :bottom, delta=delta)
    end
end;

draw(12, true)

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

算額(その1599)

2025年02月08日 | Julia

算額(その1599)

宮城県角田市小田字斗蔵 斗蔵寺 明治42年(1909)
https://tajin.shiriagari.com/framepage5000.htm
    (リンク先の左のインデックスから選択)
キーワード:直角三角形,面積,最大値
#Julia, #SymPy, #算額, #和算, #数学

直角三角形の中に,図のように正方形を容れる。正方形の一辺の長さが 12 寸のとき,黒積が最大になるのはどのようなときか。またその最大値はいかほどか。

正方形の一辺の長さを a,黒積の直角三角形の頂点を (0, 0), (x, 0), (0, y)
鈎,股,弦をそのまま変数名とする。

証明はそんなに難しいものでもないが,直感でわかり,またそれが正しいことも簡単に示すことができる。

黒積が最大になるのは黒積が直角二等辺三角形のときである。斜辺が 12 寸のとき等辺は 12/√2 なので,黒積は (12/√2)^/2 = 36平方寸 である。

鈎 = 25.4558;  股 = 25.4558;  弦 = 36;  正方形の一辺の長さ = 12;  黒積 = 36

答えは 「4 歩」,術は「弦の冪(二乗)を 36 で割る」となっている。

図に描いてみると,元の直角三角形は黒積と相似(相似比は 3)なので,弦は 12*3 = 36 である。

確かに 36^2 / 36 = 36 となるが,「36」が「4 歩」というのはちょっとおかしい。一般的には「1 歩 = 36 平方尺 = 3600 平方寸」なので,単位に無頓着に「1 歩 = 36 平方寸」としてしまったのか?それにしても「4 歩 = 36」は理解しがたい。

以下は,無理やり SymPy で解く筋道である。

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

using SymPy
@syms 股, 鈎, 弦, 黒積, a, x, y
弦 = sqrt(鈎^2 + 股^2)
a = 12
eq1 = x^2 + y^2 - a^2
eq2 = y/x - 鈎/股
eq3 = 黒積 - x*y/2
res = solve([eq1, eq2, eq3], (黒積, x, y))[2]

    (72*股*鈎/(股^2 + 鈎^2), 12*股*sqrt(1/(股^2 + 鈎^2)), 12*鈎*sqrt(1/(股^2 + 鈎^2)))

黒積 = 72*股*鈎/(股^2 + 鈎^2)= 72*股*鈎/弦^2 である。

diff(res[1], 鈎) |> simplify |> println

    72*股*(股^2 - 鈎^2)/(股^2 + 鈎^2)^2

ans_鈎 = solve(diff(res[1], 鈎), 鈎)[2]  # 2 of 2
ans_鈎 |> println

    股

鈎 = 股 のとき(つまり,二等辺直角三角形のとき)に,黒積は最大になる。
黒積の直角三角形は外側の直角三角形と相似なので,黒積が最大のとき,x = y である。
x^2 + y^2 = 12 なので x = 6√2 である。
つまり,x = y = 6√2 の二等辺三角形のとき黒積が最大値 = (6√2)^2/2 = 36平方寸 である。

function draw(a, more=false)
    pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
    x = y = 12/√2
    鈎 = 股 = 3x
    弦 = sqrt(鈎^2 + 股^2)
    黒積 = x*y/2
    @printf("鈎 = %g;  股 = %g;  弦 = %g;  正方形の一辺の長さ = %g;  黒積 = %g\n", 鈎, 股, 弦, a, 黒積)
    plot([0, 股, 0, 0], [0, 0, 鈎, 0], color=:green, lw=0.5)
    segment(x, 0, 0, y, :black)
    segment(0, y, y, y + x, :black)
    segment(x, 0, x + y, x, :black)
    plot!([0, x, 0, 0], [0, 0, y, 0], seriestype=:shape, color=:gray80, fillcolor=:gray80, lw=0.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)
        point(0, 鈎, " 鈎", :red, :left, :bottom, delta=delta/2)
        point(股, 0, "股", :red, :left, :bottom, delta=delta/2, deltax=0.7delta)
        point(0, y, " y", :red, :left, :vcenter)
        point(x, 0, "x", :red, :center, :bottom, delta=delta)
    end
end;

draw(12, true)

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

算額(その1598)

2025年02月07日 | Julia

算額(その1598)

宮城県角田市小田字斗蔵 斗蔵寺 明治42年(1909)
https://tajin.shiriagari.com/framepage5000.htm
    (リンク先の左のインデックスから選択)
キーワード:直角三角形,正方形,最大値
#Julia, #SymPy, #算額, #和算, #数学

直角三角形の中に中鉤を引き,中鉤と弦と股上に頂点を持つ正方形を容れる。股が 15 寸のとき,正方形の一辺が最長になるときその長さはいかほどか。

鈎,股をそのまま変数名とする。
中鈎上の正方形の頂点座標を (x, y)
弦上の中鈎の脚の座標を (x0, y0)
とおき,以下の連立方程式を解き,x, y, x0, y0 を求める。
それぞれは鈎,股の関数になる。

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

using SymPy
@syms 股, 鈎, x, y, x0, y0
eq1 = y/(股 - x - y) - 鈎/股
eq2 = x/y - 鈎/股
eq3 = (x0^2 + (鈎 - y0)^2)/(x0^2 + y0^2) - 鈎^2/股^2
eq4 = (x0- x)^2 + (y0 - y)^2 + (x + y - x0)^2 + (y0 - y)^2 - y^2
res = solve([eq1, eq2, eq3, eq4], (x, y, x0, y0))[1]

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

正方形の一辺の長さ y は,股^2*鈎/(股^2 + 股*鈎 + 鈎^2) である。

# y
res[2] |> println

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

たとえば,股 = 15 のとき,鈎と正方形の一辺の長さの関係は下図のようになる。

pyplot(size=(300, 200), grid=false, aspectratio=:none, label="", fontfamily="IPAMincho")
plot(res[2](股 => 15), xlims=(0,100), xlabel="鈎", ylabel="正方形の一辺の長さ")

鈎が 10 〜 20 の間に正方形の一辺の長さが最大になるようである。

diff(res[2], 鈎) |> simplify |> println

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

solve(diff(res[2], 鈎), 鈎)[2] |> println

    股

鈎 = 股 のときに,正方形は最大になる。股が 15 寸のとき,正方形の一辺の長さは最長の 5 寸になる。 

res[2](鈎 => 股, 股 => 15) |> println

    225*股/(股^2 + 15*股 + 225)

function draw(股, more=false)
    pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
    鈎 = 股
    (x, y, x0, y0) = (股*鈎^2/(股^2 + 股*鈎 + 鈎^2), 股^2*鈎/(股^2 + 股*鈎 + 鈎^2), 股*鈎^2/(股^2 + 鈎^2), 股^2*鈎/(股^2 + 鈎^2))
    plot([0, 股, 0, 0], [0, 0, 鈎, 0], color=:green, lw=0.5)
    plot!([x, x + y, x + y, x, x], [0, 0, x, y], color=:blue, lw=0.5)
    segment(0, 0, x0, y0, :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, 鈎, " 鈎", :red, :left, :bottom, delta=delta/2)
        point(股, 0, "股", :red, :left, :bottom, delta=delta/2, deltax=0.7delta)
        point(x0, y0, "(x0,y0)", :green, :left, :bottom, delta=delta/2)
        point(x, y, "(x,y)", :blue, :right, :bottom, delta=delta/2)
        point(x + y, y, "(x+y,y)", :blue, :left, :bottom, delta=delta/2)
    end
end;

draw(15, true)

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

算額(その1597)

2025年02月07日 | Julia

算額(その1597)

宮城県角田市小田字斗蔵 斗蔵寺 明治42年(1909)
https://tajin.shiriagari.com/framepage5000.htm
(リンク先の左のインデックスから選択)

深川英俊,トニー・ロスマン:聖なる数学:算額,p. 116,森北出版株式会社,2010年4月22日.

キーワード:面積,最大値
#Julia, #SymPy, #算額, #和算, #数学

直角三角形において,鈎を一辺として,股の一部を共有する正方形を描く。弦と正方形の一辺の交点を一つの頂点とする直角三角形の面積(黒積と呼ぼう)を考える。股が 12 寸のとき,黒積が最大となるときの鈎はいかほどか。

鈎,股,黒積をそのまま変数名とする。
正方形の一辺と弦の交点座標を (鈎, y) とする。

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

using SymPy
@syms 股, 鈎, y, 黒積
eq1 = (股 - 鈎)*y/2 - 黒積
eq2 = y/(股 - 鈎) - 鈎/股
res = solve([eq1, eq2], (黒積, y));
res[黒積] |> println  # 黒積は鈎と股の関数

    (股^2*鈎 - 2*股*鈎^2 + 鈎^3)/(2*股)

股が 12 のときの,鈎と黒積の関係は下図のようになる。

pyplot(size=(300, 200), grid=false, aspectratio=:none, label="", fontfamily="IPAMincho")
plot(res[黒積](股 => 12), xlims=(0, 12), xlabel="鈎", ylabel="黒積")

g = diff(res[黒積], 鈎);  # 導関数
g |> println

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

ans_g = solve(g, 鈎)[1];  # 1 of 2  # 導関数 = 0 (黒積が最大)になる 鈎 を求める
ans_g |> println

    股/3

鈎が股の 1/3 になるとき,黒積は最大となる。

股 = 12, 鈎 = 股/3 = 4 のとき,黒積は最大値 32/3 となる。

res[黒積](鈎 => 股/3, 股 => 12) |> println  # 黒積の最大値
res[黒積](鈎 => 股/3, 股 => 12).evalf() |> println

    股^3/648 - 股^2/9 + 2*股
    0.00154320987654321*股^3 - 0.111111111111111*股^2 + 2.0*股

function draw(股, more=false)
    pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
    鈎 = 股/3
    plot([0, 股, 0, 0], [0, 0, 鈎, 0], color=:green, lw=0.5)
    plot!([0, 鈎, 鈎, 0,  0], [0, 0, 鈎, 鈎, 0], color=:blue, lw=0.5)
    segment(0, 鈎, 股, 0, :black)
    y = (股*鈎 - 鈎^2)/股
    plot!([鈎, 股, 鈎, 鈎], [0, 0, y, 0], seriestype=:shape, color=:gray80, fillcolor=:gray80, lw=0.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)
        point(鈎, 鈎, " (鈎,鈎)", :red, :left, :vcenter)
        point(鈎, y, " (鈎,y)", :red, :left, :bottom, delta=delta/2)
        point(股, 0, "鈎", :red, :left, :bottom, delta=delta/2, deltax=0.7delta)
    end
end;

draw(12, true)

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

MacOS: RDatasets を使えるようにする

2025年02月07日 | Julia

mac OS の Julia -- Version 1.11.3 あたり で RDatasets が使えないという問題の回避法。

~/.julia/packages/TimeZones/@@@@@/src/types/timezone.jl
の,41行目の TimeZone から,何もせずに直帰する。
'@@@@@' はバージョンにより異なるディレクトリになるので,その都度調整が必要。

function TimeZone(str::AbstractString, mask::Class=Class(:DEFAULT))
    return ##### この一行を加える
    tz, class = get(_TZ_CACHE, str) do
     :

以下が動けば OK

using RDatasets
iris = dataset("datasets", "iris")

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

算額(その1596)

2025年02月06日 | Julia

算額(その1596)

三重県伊賀市上野東町 菅原神社(上野天神宮) 嘉永7年(1854)
深川英俊,トニー・ロスマン:聖なる数学:算額,p. 116,森北出版株式会社,2010年4月22日.
キーワード:体積,級数
#Julia, #SymPy, #算額, #和算, #数学

底面が辺の長さ a の正三角形で高さも a である大きな角錐を逆さにして酒を満たし,その体積を V0 とする。
これより 1 石  2斗 5 升(125升)をくみ出して残りを 2 倍にする。次に同じように 125 升をくみ出して残りを 2 倍にする。こうして 10 回目に 125 升をくみ出すと残りが無くなった。さて,この容器の体積 V を求めよう。また 1 升は一辺が 4.0172 寸の立方体としたとき,a を寸で求めよ。

深川英俊,トニー・ロスマン:聖なる数学:算額,p. 114,森北出版株式会社,2010年4月22日.
キーワード:等比級数
#Julia, #SymPy, #算額, #和算, #数学

酒の量は,
V0 : 初期値
V1 = 2(V0 - 125) : 1 回目の操作の後の酒の量
V2 = 2(V1 - 125) : 2 回目の操作の後の酒の量
    :
V10 = 2(V9 - 125) : 10 回目の操作の後の酒の量 = 0
となる。最後の V10 の中の V9 に直前の V9 を代入して...を繰り返し,V10 を V0 で表した方程式を解けばよいが,面倒。

繰り返し作業はコンピュータの最も得意とする所。以下のようにして簡単に解くべき方程式を得ることができる。
等比級数だとか等比級数の和だとか,なんにも考える必要がない。

using SymPy
@syms V[1:11]::positive, V0::positive
V[1] = V0  # 初期状態
for i in 2:11  # 操作を繰り返す。結果は配列の中に代入されていく。
    V[i] = 2(V[i - 1] - 125)
end

V[1] |> println

    V0

V[2] |> println

    2*V0 - 250

V[3] |> println

    4*V0 - 750

V[11]  |> println  # 10 回目の操作が終わった段階での量。

    1024*V0 - 255750

ans_V0 = solve(V[11], V0)[1]   # 1024*V0 = 255750 を解くということ
ans_V0 |> println  # これが「0」であるということなので,方程式を解く。

    127875/512

体積は 249.755859375 升である。

ans_V0.evalf() |> println

    249.755859375000

(1) 底面が一辺 a 寸の正三角形で高さが a の三角錐の体積は (a/2 * √3a/2 * a / 3) で単位は「立法寸」
(2) V0 の単位は「升」なので,「立法寸」にするためには 4.0172 を掛ける。(4.0172^3 立法寸 = 1 升)
(1),(2) が等しいとして,以下の方程式を解いて a を求める。

@syms a
eq = (a/2 * √3a/2 * a / 3) - ans_V0*4.0172^3  # (1) - (2) = 0
solve(eq, a)[1] |> println

    48.2283298085359

a = 48.2283298085359 寸である。

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

算額(その1595)

2025年02月06日 | Julia

算額(その1595)

秋田県仙北郡角館町 熊野神社 安政5年(1858)
深川英俊,トニー・ロスマン:聖なる数学:算額,p. 114,森北出版株式会社,2010年4月22日.
キーワード:俵積み
#Julia, #SymPy, #算額, #和算, #数学

N 個の俵がある。これを 2 通りの方法で積むことができた。
1 つは上が 19 個で下が m 個の台形状になり,次は上が 6 個で下が n 個の台形状である。このとき N, m, n を求めてみよう。

以下の方程式を立てる。

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

using SymPy
@syms m::positive, n::positive, N::positive,
      h1::positive, h2::positive
eq1 = m*(m + 1)/2 - 18(18 + 1)//2 - N
eq2 = n*(n + 1)/2 - 5(5 + 1)//2 - N;

辺々引いて,N を消去する。

eq1 - eq2 |> factor |> println

    (m^2 + m - n^2 - n - 312)/2

定数項を右辺にして残りを因数分解する。

m^2 + m - n^2 - n |> factor |> println

    (m - n)*(m + n + 1)

深川は
(m - n)*(m + n + 1) = 312
で,312 の素因数分解で
(m - n)*(m + n + 1) = 8×39
(m - n)*(m + n + 1) = 1×312
の 2 通りあげているが,もう一組ある。
(m - n)*(m + n + 1) = 3×104

そもそも,因数の組は (a, b) = (1, 312), (2, 156), (3, 104), (4, 78), (6, 52), (8, 39), (12, 26), (13, 24) のすべての組み合わせについて
eq1 = (m - n) - a
eq2 = (m + n + 1) - b
の連立方程式を解いてみて,a, b が整数のものをピックアップするという作業が必要。あたりを付けて 1 つ,2 つ見つけて安心してはいけない。
これは結構大変である。数え落としのない,ブルートフォースで求めるのが安全確実。

for m = 19:1000, n = 6:m
    (m^2 + m - n^2 - n) == 312 &&
        println("m = $m, n = $n, (m - n) = $(m - n), (m + n + 1) = $(m + n + 1), $(m^2 + m - n^2 - n), N = $(Int(m*(m + 1)/2 - 18(18 + 1)/2))")
end

    m = 23, n = 15, (m - n) = 8, (m + n + 1) = 39, 312, N = 105
    m = 53, n = 50, (m - n) = 3, (m + n + 1) = 104, 312, N = 1260
    m = 156, n = 155, (m - n) = 1, (m + n + 1) = 312, 312, N = 12075

検算 N

(sum(19:23), sum(6:15)) |> println
(sum(19:53), sum(6:50)) |> println
(sum(19:156), sum(6:155)) |> println

    (105, 105)
    (1260, 1260)
    (12075, 12075)

 

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

算額(その1594)

2025年02月06日 | Julia

算額(その1594)

深川英俊,トニー・ロスマン:聖なる数学:算額,p. 114,森北出版株式会社,2010年4月22日.
キーワード:正12角形2個,対角線
#Julia, #SymPy, #算額, #和算, #数学

図に示すような正12角形の24本の対角線の長さの和が与えられたとき,内部にできる小さな正12角形の一辺の長さを求める術を述べよ。

外側の正12角形が内接する円の直径を R
内側の正12角形が内接する円の直径を r
とすると,
a = c*tan(15°), c = (a + b)*tan(15°)
対角線の長さの和を l とすると,
l = 12*2*(a + b)
より,以下の連立方程式を解き,a, b を求める。

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

using SymPy
@syms a::positive, b::positive, c::positive,
      l::positive
eq1 = (a + b)*tand(Sym(15)) - a/tand(Sym(15))
eq2 = 12*2(a + b) - l;

表には出てこないが,tan(15°) = 2 - √3 なので,
eq1 = -2*sqrt(3)*a - sqrt(3)*b + 2*b
である。

連立方程式を解いて,a, b を求める。

res = solve([eq1, eq2], (a, b));

# a
res[a] |> simplify |> println

    l*(7 - 4*sqrt(3))/24

l = 150 のとき,a = 0.897459621556135 である。

2*res[a](l => 150).evalf() |> println

    0.897459621556135

長精度演算すると以下のようになる。

2*150*(7 - 4*sqrt(big"3"))/24

    0.897459621556135323627682924706381...

# b
res[b] |> simplify |> println

    l*(-3 + 2*sqrt(3))/12

a = r*sin(15°) なので,
r = a/sin(15°)

c = R*sin(15°) なので,
R = c/sin(15°)

c = (a + b)*tan(15°) なので,
R = (a + b)*tan(15°)/sin(15°)

function draw(n, l, more=false)
    pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
    a = l*(7 - 4√3)/24
    b = l*(2√3 - 3)/12
    r = a/sind(15)
    R = (a + b)*tand(15)/sind(15)
    x = [R*cosd(z) for z = 0:360/n:360]
    y = [R*sind(z) for z = 0:360/n:360]
    c = R*sind(15)
    plot()
    for i = 1:n
        segment(x[i], y[i], x[mod(i - 2 + (n + 1)÷2, n) + 1], y[mod(i - 2 + (n + 1)÷2, n) + 1], :brown, lw=0.3)
    end
    circle(0, 0, R, :green)
    circle(0, 0, r, :red)
    circle(0, 0, c, :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(r, 0, " r", :red, :left, :bottom, delta=delta/5)
        point(c, 0, "c ", :blue, :right, :bottom, delta=delta/5)
        lens!([0, 0.2], [-0.01, 0.2], inset = (1, bbox(0.7, 0.0, 0.3, 0.35)))
    end
end;

draw(12, 15, true)

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

算額(その1593)

2025年02月06日 | Julia

算額(その1593)

長野県 諏訪神社 文化2年(1805)
深川英俊,トニー・ロスマン:聖なる数学:算額,p. 114,森北出版株式会社,2010年4月22日.

キーワード:円1個,長方形,対角線
#Julia, #SymPy, #算額, #和算, #数学

長方形の中に円と対角線を引く。長方形の長辺 AB と短辺 BC が与えられたとき,円によって切り取られる対角線の長さ PQ を求めよ。

円の半径を r
a = AB, b = BC = 2r
P, Q の座標を (x1, y1), (x2, y2)
θ = ∠BDC
とおき,以下の連立方程式を解く。

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

using SymPy
@syms a::positive, b::positive, r::positive,
      x1::positive, x2::positive, PQ::positive
r = b/2
tanθ = b/a
y1 = (a - x1)*tanθ
y2 = (a - x2)*tanθ
eq1 = (x1 - (a - r))^2 + (y1 - r)^2 - r^2
eq2 = (x2 - (a - r))^2 + (y2 - r)^2 - r^2
eq3 = sqrt((x1 - x2)^2 + (y1 - y2)^2) - PQ;

res = solve([eq1, eq2, eq3], (PQ, x1, x2))[1];  # 1 of 2

# PQ
res[1] |> println

    sqrt(2)*sqrt(a)*b^(3/2)/sqrt(a^2 + b^2)

PQ の長さは sqrt((2a*b^3)/(a^2 + b^2)) である。

a = 185, b = 80 のとき,PQ = 68.2871764062511 である。

res[1](a => 185, b => 80).evalf() |> println

    68.2871764062511

function draw(a, b, more=false)
    pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
    (x1, x2, PQ) = ((-sqrt(2)*a^(3/2)*b^(3/2) + a*(2*a^2 - a*b + b^2))/(2*(a^2 + b^2)), (sqrt(2)*a^(3/2)*b^(3/2) + a*(2*a^2 - a*b + b^2))/(2*(a^2 + b^2)), sqrt(2)*sqrt(a)*b^(3/2)/sqrt(a^2 + b^2))
    r = b/2
    tanθ = 2r/a
    θ = atand(tanθ)
    y1 = (a - x1)*tanθ
    y2 = (a - x2)*tanθ
    PQ2 = sqrt((x1 - x2)^2 + (y1 - y2)^2)
    println("PQ = $PQ = $PQ2")
    plot([0, a, a, 0, 0], [0, 0, 2r, 2r, 0], color=:magenta, lw=0.5)
    circle(a - r, r, r, :blue)
    segment(0, 2r, a, 0, :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(a - r, r, "r,(a-r,r)", :blue, :center, delta=-delta/2)
        point(x1, y1, " Q:(x1,y1)", :blue, :left, :bottom, delta=delta/2)
        point(x2, y2, "P:(x2,y2)  ", :blue, :right, :vcenter)
        point(a, b, "A:(a,b)", :magenta, :right, :bottom, delta=delta/2)
        point(0, b, " B:(0,b)", :magenta, :left, :bottom, delta=delta/2)
        point(0, 0, " C:(0,0)", :magenta, :left, delta=-delta/2)
        point(a, 0, "D:(a,0)", :magenta, :right, delta=-delta/2)
        circle(a, 0, a/20, beginangle=180-θ, endangle=180)
        circle(a, 0, a/18, beginangle=180-θ, endangle=180)
        point(a - a/17, 0, "θ", :red, :right, :bottom, delta=delta/2, mark=false)
        ylims!(-5delta, b + 5delta)
    end
end;

draw(5, 3, true)

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

MacOS: ファイル・ディレクトリの変更日の時刻表示フォーマットの設定

2025年02月06日 | ブログラミング

MacOS Sequoia 15.x で,ディレクトリ表示中のファイル・ディレクトリの変更日の時刻表示が12時制になているのを24時制にする方法

ターミナルで 24時間制を強制する方法

1.ターミナルを開く(「アプリケーション」→「ユーティリティ」→「ターミナル」)

2.以下のコマンドを入力し、Enter を押す

defaults write NSGlobalDomain AppleICUForce24HourTime -bool true

3.Finder を再起動

killall Finder

または、ログアウト&ログインすることで設定を適用できます。

現在の設定を確認する

設定が適用されているか確認するには、以下のコマンドを実行してください。

defaults read NSGlobalDomain AppleICUForce24HourTime

これが 1 になっていれば 24時間制が有効になっています。

元に戻したい場合

12時間制に戻したい場合は、以下のコマンドを実行してください。

defaults write NSGlobalDomain AppleICUForce24HourTime -bool false
killall Finder
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

算額(その1592)

2025年02月05日 | Julia

算額(その1592)

岡山県瀬戸内市長船町土師宮森 片山日子神社 明治6年(1873)
深川英俊,トニー・ロスマン:聖なる数学:算額,p.113,森北出版株式会社,2010年4月22日.

キーワード:円7個,正三角形2個,正六角形
#Julia, #SymPy, #算額, #和算, #数学

正方形の中に正三角形 1 個,大円 1 個,中円 2 個,小円 1 個を容れる。中円の半径を大円の半径で表わせ。

正方形の一辺の長さを a
大円の半径と中心座標を r1, (0, r1)
中円の半径と中心座標を r2, (a/2 - r2, a - r2);
小円の半径と中心座標を r3, (0, a - r3)
とおく。

r1, r3 は簡単に計算できる。

r1 = √3a/6
r3 = (a - √3a/2)/2

求めるのが面倒なのは r2 だけなので,以下の方程式を解く。
ちなみに tan(15°) = 2 - √3 である。

include("julia-source.txt");

using SymPy
@syms r1, r2, r3, a
eq = (a - r2)*tand(Sym(15)) - r2
res = solve(eq, r2)[1] |> simplify;

# r2
res |> println

    a*(3 - sqrt(3))/6

問題文が「中円の半径を大円の半径で表せ」なので,「r2/r1」を求めると,中円の半径は大円の半径の √3 - 1 倍である。
r2 = (√3 - 1)*r1

res / (√Sym(3)*a/6) |> simplify |> println

    -1 + sqrt(3)

function draw(a, more=false)
    pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
    r1 = √3a/6
    r2 = a*(3 - √3)/6
    r3 = (1 - √3/2)*a/2
    @printf("中円の半径は大円の半径の %g 倍である。\n", √3 - 1 )
    plot([a, a, -a, -a, a]./2, [0, a, a, 0, 0], color=:green, lw=0.5)
    plot!([a, 0, -a, a]./2, [0, √3a/2, 0, 0], color=:magenta, lw=0.5)
    circle2(a/2-r2, a - r2, r2, :blue)
    circle(0, r1, r1)
    circle(0, a - r3, r3, :brown)
    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, delta=-delta/2)
        point(a/2 - r2, a - r2, "中円:r2,(a/2-r2,a-r2)", :blue, :center, delta=-delta/2)
        point(0, a - r3, " 小円:r3,(0,R-r3)", :brown, :left, :vcenter)
        point(0, √3a/2, "  √3a/2", :magenta, :left, delta=-delta/2)
        point(a/2, a, "(a/2,a)", :green, :right, :bottom, delta=delta/2)
    end
end;

draw(10, true)

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

琴平町 虎屋

2025年02月05日 | さぬきうどん

琴平町 本家 虎屋
かけうどんを注文した
手打ち麺,コシあり,ちょっとしょっぱ目(甘くない)

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

算額(その1591)

2025年02月05日 | Julia

算額(その1591)

岡山県瀬戸内市長船町土師宮森 片山日子神社 明治6年(1873)
深川英俊,トニー・ロスマン:聖なる数学:算額,p. 110,森北出版株式会社,2010年4月22日.

キーワード:円7個,正三角形2個,正六角形
#Julia, #SymPy, #算額, #和算, #数学

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

正六角形の一辺の長さを R
大円の半径と中心座標を r1, (0, 0)
小円の半径と中心座標を r2, (0, r1 + r2)
とする。

大円の直径は正六角形の一辺の長さと等しい。
小円が内接している二等辺三角形の高さは大円の半径に等しい。

小円と大円の間には (r1 - r2)*cos(30°) = r2 の関係がある。
これを解いて,r2 = r1*(2√3 - 3) である。

include("julia-source.txt");

using SymPy
@syms r1::positive, r2::positive
eq = (r1 - r2)*cosd(Sym(30)) - r2
solve(eq, r2)[1] |> factor |> println

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

小円の半径 r2 は大円の半径 r1 の (2√3 - 3) 倍である。
大円の半径が 10 寸のとき,小円の半径は 4.641016151377544 寸である。

function draw(r1, more=false)
    pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
    r2 = r1*(-3 + 2*sqrt(3))
    R = 2r1
    x = [R*cosd(z) for z in 90:60:510]
    y = [R*sind(z) for z in 90:60:510]
    @printf("大円の半径が %g のとき,小円の半径は %g である。\n", r1, r2)
    plot()
    circle(0, 0, r1, :green)
    rotate(0, r1 + r2, r2, angle=60)
    for i = 1:6
        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(0, r1, "r1", :green, :center, :bottom, delta=delta/2)
        point(0, R, "R", :blue, :center, :bottom, delta=delta/2)
        point(0, r1 + r2, "r1+r2", :red, :center, delta=-delta/2)
    end
end;

draw(10, true)

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

算額(その1590)

2025年02月04日 | Julia

算額(その1590)

秋田県角館町熊野神社 嘉永2年(1849)

秋田県仙北市角館町西長野 熊野神社 嘉永2年(1849)
http://www.wasan.jp/akita/kakunodatekumano1.html

深川英俊,トニー・ロスマン:聖なる数学:算額,p. 109,森北出版株式会社,2010年4月22日.

キーワード:円,内接三角形
#Julia, #SymPy, #算額, #和算, #数学

外円の中に三角形 ABC が内接している。頂点 C から対辺 BC に垂線 CH を下ろす。BC, AC, CH が与えられたとき,外円の直径を求める術を述べよ。

「算法叙述の公式25」h = a*b/2r の式変形である。

外円の半径を r
BC, AC, CH を a, b, h
とおく。

C から外接円の中心 O を通る補助線を引き,円周上の交点を D とする。
∠HBC = ∠ADC なので,△HBC ∽ △ADC である。
h/a = b/DC = b/2r = sin(α)
よって,r = a*b/2h である。

a = 5, b = 8, h = 4 のとき,r = 5*8/(2*4) = 5 である。

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

琴平町 うどん吉田屋

2025年02月04日 | さぬきうどん

琴平町 うどん 吉田屋
かやくうどん
やや平べったい,乾麺かな?こしはある

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

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

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