裏 RjpWiki

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

事務処理のいろはのい

2023年06月13日 | 雑感

マイナ520万人分、総点検 年金情報閲覧で政府

> 政府は13日、年金情報の閲覧問題で、国家公務員や私立学校教職員らの共済組合にもマイナンバー登録状況の総点検を求めると明らかにした。地方公務員の組合と合わせ、対象は約520万人になる。松本剛明総務相は「原因は人為的なミス」と説明し、制度そのものに問題はないと強調。野党側は混乱の拡大に批判を強めた。

ヒューマンエラーは「ありうるもの」として,それを防ぐための防波堤を設計するのが普通。

いままでの,「消えた年金」とか,「幼児の公金受け取り口座が親の名義の口座」とか,チェックすれば防げるのをやらないから問題が生じる。

消えた年金だと,仮名書の姓名と実際の戸籍名を突合しないとか

幼児のマイナンバーの名義と口座の名義が一致するかどうか確認しないとか

むしろ,システム設計者やお役人は「幼児の口座なんてないだろうし,親の口座を登録して差し支えないよね」と思ってたんじゃないの?

後になって,問題になりそうになって,急遽「そんなことをした人が悪い」と言い出したとしか思えない。

普通の事務処理では考えられないようなミスを繰り返している。これは,現場の事務職員の問題ではなく,システムを構築する「自称プログラマ」および「自称IT企業」の問題であろう。何が問題なのかを全く理解していない。

「前の人がログアウトしないまま次の人が処理をしたので...」そんな言い訳が通じるなら,「警察はいらん!!!」国は,システム構築企業に対して損害賠償訴訟を起こすべきだ。それとも,竹中某に遠慮して,そんなことはできないというのか?お役所仕事やノオ

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

個人番号カード...マイナンバーカードですわ...

2023年06月13日 | 雑感

遅ればせながら,今日,市役所にマイナンバーカードを受け取りに行きました。

そこで,実態に触れてみて,「これでいいのか?」と思う点が多々あったので記録しておきます。

まず,私が窓口に行った段階で,待ち行列の人数は 44 人。待つこと1時間以上。

窓口にたどり着いてから何をやったかというと。

1. 事前に書かされた証明用電子証明書の暗証番号を,受付のおねいさんが入力。

2. 同じく,利用者証明用電子証明証暗証番号を,受付のおねいさんが入力。

3. その確認。

これだと,1分もかからないと思うでしょう?いやいや,測っていないけど少なくとも20分はかかった。

おまけに,「証明用電子証明書の暗証番号」は大文字アルファベットと数字の組み合わせで6〜16桁というのだけど,私の汚い文字をみて「これは数字ですか,アルファベットでか?」などというやりとりがあったりで,「では,あなたが最終的に入力した暗証番号を私が確認することはできないのですか?」というと,驚くべきことに「できません。一応私が一文字ずつ間違いがないか確認していますので大丈夫です」とのこと。信頼できないなあ。あなたは大丈夫だとは思うけど,日本全国の事務職員が 申請者に確認せずに,I と1 ,O と 0 を絶対に間違えないというのは信じられないなあ。見分けがつかなければ普通は聞くのだろうけど,自分が見分けられたと思って間違った入力をしていたらどうするの。

高齢の方とか,スマホの扱いに慣れていない方という場合には,懇切丁寧な対処が必要なのは言うまでもない。

しかし,可能な人は

1.カードを郵送で受け取る

2.  カードを有効にするために,ネットで 「証明用電子証明書の暗証番号」,「利用者証明用電子証明証暗証番号」を設定する。

3. それで初めて,個人番号カードが有効になる。

でいいじゃない?

普通,クレジットカードなんかは,必要事項を設定したあと,郵送されるクレジットカードをすぐ使えるよね。

実際,個人番号カードが発行されたあと,人によっては「マイナポイントの登録」,「保険証との紐づけ」,「公金振込口座の登録」などをやるわけですよ。

それを自分でデキる人はやればいいし,自分でできない人は然るべきところへ行って手続きすればいいわけですよ。

だれにも彼にも窓口で【「証明用電子証明書の暗証番号」,「利用者証明用電子証明証暗証番号」を設定する。】をやらなくてもいいでしょう。

ということで,カード受け取り,保険証への紐づけ,公金受け取り口座の設定をやったけど,「何だこんなことをおおげさにやってんだ」という気持ちを新たにしたということ。

お役所は未だに根本的に前近代的な事務処理をしているんだなあとつくづく思った。

こんな状態では,デジタル社会は来やしないぞ。

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

算額(その277)

2023年06月12日 | Julia

算額(その277)

中村信弥「改訂増補 長野県の算額」
http://www.wasan.jp/zoho/zoho.html
県内の算額(238)
長野県松本市筑摩 筑摩神社 明治6年(1873)

大小 2 つの正方形が接し,頂点を結ぶ斜線で区切られた区画内に大小の円が入っている。大円,小円の径がそれぞれ 1尺8寸,8寸のとき,大きい方の正方形の一辺の長さを求めよ。

大小の正方形の一辺の長さを a, b とおく。斜線が正方形と交わる座標を (a,c) とおく。

include("julia-source.txt");

using SymPy
@syms a::positive, b::positive, c::positive;

eq1 = a/(a + b) - c/b  # 三角形が相似であることから
eq2 = (a - c)/b - 9//4  # 同じく相似関係から
eq3 = 2a - c - sqrt(a^2 + (a - c)^2) - 18;  # 大円の直径は「鉤 + 股 - 弦」であることから

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

   1-element Vector{Tuple{Sym, Sym, Sym}}:
    (36, 12, 9)

大きい方の正方形の一辺の長さは 36 寸,小さい方のそれは 12寸,斜線は (36, 9) を通る。

using Plots

function draw(more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   (a, b, c) = res[1]
   (r1, r2) = (9, 4)
   @printf("a = %.6f 寸;  b = %.6f 寸;  c = %.6f\n", a, b, c)
   plot([0, a+b, 0, 0], [0, 0, a, 0], color=:black, lw=0.5)
   rect(0, 0, a, a, :black, fill=false)
   rect(a, 0, a + b, b, :black, fill=false)
   segment(0, a, a + b, 0, linewidth=0.5)
   circle(a - r1, a - r1, r1, :blue)
   circle(a + b - r2, b - r2, r2)
   if more
       point(a - r1, a - r1, "大円:r1\n(a-r1,a-r1)", :blue, :left, :bottom)
       point(a + b - r2, b - r2, " 小円:r2\n (a+b-r2,b-r2)", :red)
       point(a, 0, " a", :black, :left, :bottom) 
       point(a + b, 0, "a+b  ", :black, :right, :bottom)
       point(a, c, "(a,c)", :black, :right)
       vline!([0], color=:black, lw=0.5)
       hline!([0], color=:black, lw=0.5)
   else
       plot!(showaxis=false)
   end
end;

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

算額(その276)

2023年06月12日 | Julia

算額(その276)

中村信弥「改訂増補 長野県の算額」
http://www.wasan.jp/zoho/zoho.html
県内の算額(262)
長野県上水内郡信州新町日名 日置神社 明治44年(1911)

正三角形に円が内接している。三角面冪(正三角形の一辺の平方)が 64 平方寸,外積(正三角形と内接円の間の面積)が 12.9 平方寸のとき,内接円の直径を求めよ。

三角率(正三角形の一辺の長さを a としたときの正三角形の面積 = a^2 *(√3/4) における √3/4 = 0.4330127018922193)の近似値を 0.433,円積率(直径が b のときの円の面積 = (b/2)^2 * π = b^2 * (π/4) における π/4 = 0.7853981633974483)の近似値を 0.7 とするとあるが,この近似値計算は基本的に間違っている。

正三角形の一辺の長さを a とすれば,内接円の半径 r は正確に a/2√3 である
外積は 12.9 ではなく 10.957652101956466 = √3/4 * a^2 - pi *  (a/2√3)^2 なのだから。

   三角形の一辺の長さ = 8.000000 寸;  内接円の直径 = 4.618802 寸

include("julia-source.txt");

using Plots

function draw(more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   a = sqrt(64)
   r = a / 2√3
   @printf("三角形の一辺の長さ = %.6f 寸;  内接円の直径 = %.6f 寸\n", a, 2r)
   plot([a/2, 0, -a/2, a/2], [0, √3a/2, 0, 0], color=:black, lw=0.5)
   circle(0, r, r, :green)
   if more
       point(a/2, 0, "a/2  ", :black, :right, :bottom)
       point(0, a / 2√3, "(0,a/2√3)")
       vline!([0], color=:black, lw=0.5)
       hline!([0], color=:black, lw=0.5)
   else
       plot!(showaxis=false)
   end
end;

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

算額(その275)

2023年06月12日 | Julia

算額(その275)

中村信弥「改訂増補 長野県の算額」
http://www.wasan.jp/zoho/zoho.html
県内の算額(262)
長野県飯綱町 牟礼神社 明治31年(1898)

外球に円柱が内接している。甲球 1 個,乙球 2 個,丙球 2 個,丁球 1 個,戊球 1 個がそれぞれが隣の球(甲乙丙丁丙乙甲)の順に外接しており,外球に内接し円柱に外接している。また,外球を含めてすべての球の中心は同一平面上にある。

外球の直径が 85 寸,甲球の直径が 17 寸のとき,乙球の直径を求めよ。

問題は三次元で難しそうであるが,全ての球の中心が同一平面上にあるということから,上方からの透視図を考えると図のような二次元の問題であることがわかる。

それぞれの円の半径,中心座標を以下のようにする。
外円 r0, (0, 0) 既知 r0 = 85 // 2
甲円 r1, (0, r0 - r1) 既知 r1 = 17 // 2
乙円 r2, (x2, y2)
丙円 r3, (x3, y3)
丁円 r4, (0, r4 - r0)
戊円 r5, (0, r5 + 2r4 - r0)
以下の 8 本の方程式を解く。

include("julia-source.txt");

using SymPy
@syms r0::positive, r1::positive, r2::positive, r3::positive,
   r4::positive, r5::positive, x2::positive, y2::positive,
   x3::positive, y3::positive;

r0 = 85 // 2
r1 = 17 // 2
eq1 = x2^2 + (r0 - r1 - y2)^2 - (r1 + r2)^2 |> expand
eq2 = (x2 - x3)^2 + (y2 - y3)^2 - (r2 + r3)^2 |> expand
eq3 = x2^2 + (y2 - (r5 + 2r4 - r0))^2 - (r2 + r5)^2 |> expand
eq4 = x3^2 + (y3 - (r4 - r0))^2 - (r3 + r4)^2 |> expand
eq5 = x3^2 + (y3 - (r5 + 2r4 - r0))^2 - (r3 + r5)^2 |> expand
eq6 = x2^2 + y2^2 - (r0 - r2)^2 |> expand
eq7 = x3^2 + y3^2 - (r0 - r3)^2 |> expand
eq8 = r1 + r4 + r5 - r0 |> expand;

res = solve([eq1, eq2, eq3, eq4, eq5, eq6, eq7, eq8], (r2, r3, r4, r5, x2, y2, x3, y3))

   1-element Vector{NTuple{8, Sym}}:
    (10, 170/11, 85/4, 51/4, 10*sqrt(3), 55/2, 170*sqrt(3)/11, 85/22)

外円 = 42.500;  甲 = 8.500;  乙 = 10.000;  丙 = 15.455;  丁 = 21.250;  戊 = 12.750
x2 = 17.321;  y2 = 27.500;  x3 = 26.768;  y3 = 3.864

すなわち,乙円(乙球)の直径は 20 寸である。

using Plots

function draw(more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   r0 = 85 // 2
   r1 = 17 // 2
   (r2, r3, r4, r5, x2, y2, x3, y3) = res[1]
   # (r2, r3, r4, r5, x2, y2, x3, y3) = [19, 20, 21, 22, 20, 20, 20, -20]
   @printf("外円 = %.3f;  甲 = %.3f;  乙 = %.3f;  丙 = %.3f;  丁 = %.3f;  戊 = %.3f\n", r0, r1, r2, r3, r4, r5)
   @printf("x2 = %.3f;  y2 = %.3f;  x3 = %.3f;  y3 = %.3f\n", x2, y2, x3, y3)
   plot()
   circle(0, 0, r0, :black)
   circle(0, r0 - r1, r1, :green)
   circle(x2, y2, r2, :red)
   circle(-x2, y2, r2, :red)
   circle(x3, y3, r3, :blue)
   circle(-x3, y3, r3, :blue)
   circle(0, r4 - r0, r4, :magenta)
   circle(0, r5 + 2r4 - r0, r5, :orange)
   if more
       point(r0, 0, "r0 ", :black, :right, :bottom)
       point(0, r0 - r1, " 甲:r1\n r0-r1", :green, :left, :bottom)
       point(x2, y2, " 乙:r2\n (x2,y2)", :red, :center, :bottom)
       point(x3, y3, " 丙:r3\n (x3,y3)", :blue, :center, :bottom)
       point(0, r4 - r0, " 丁:r4\n r4-r0", :magenta, :left, :bottom)
       point(0, r5 + 2r4 - r0, " 戊:r5\n r5+2r4-r0", :orange, :left, :bottom)
       vline!([0], color=:black, lw=0.5)
       hline!([0], color=:black, lw=0.5)
   else
       plot!(showaxis=false)
   end
end;

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

算額(その274)

2023年06月11日 | Julia

算額(その274)

中村信弥「改訂増補 長野県の算額」
http://www.wasan.jp/zoho/zoho.html
県内の算額(165)
長野県飯山市下木島 鳥出神社 弘化4年(1847)

大円と小円は同心円で,半径の差は小円の半径に等しい。3 個の小円の中心は大円の演習場にあり,小円は中遠に外接しかつ大円(中円)の弦にも接している。
小円の径が 4 寸,矢が 1 寸のとき,中円の径はいかほどか。

矢の長さを a とする。
中円の半径と中心座標を r2, (0, 0) とする。
中央と右の小円の半径と中心座標を r1, (0, r1 +r2), (x1, r2 - a + r1) とする。

r1, a を変数のまま以下の連立方程式を解く。

include("julia-source.txt");

using SymPy
@syms r1::positive, r2::positive, x1::positive, a::positive;

r1 = 2
a = 1
eq1 = x1^2 + (r2 - a + r1)^2 - (r1 + r2)^2
eq2 = x1^2 + a^2 - 4r1^2
res = solve([eq1, eq2], (r2, x1))

   1-element Vector{Tuple{Sym, Sym}}:
    (r1*(-a + 2*r1)/a, sqrt(-a + 2*r1)*sqrt(a + 2*r1))

2r2 が中円の直径なので 2*(r1*(-a + 2*r1)/a)

2res[1][1] |> simplify |> println

   2*r1*(-a + 2*r1)/a

2r1 は小円の直径なので,「小円の直径の二乗を矢で割って小円の直径を引く」と中円の直径が得られる。

r1 = 2; a = 1
2*(r1*(-a + 2*r1)/a)  # 中円径

   12.0

   r1 = 2.000000;  a = 1.000000;  r2 = 6.000000;  x1 = 3.872983

using Plots

function draw(more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   a = 1
   r1 = 4 // 2
   (r2, x1) = (r1*(-a + 2*r1)/a, sqrt(-a + 2*r1)*sqrt(a + 2*r1))
   @printf("r1 = %.6f;  a = %.6f;  r2 = %.6f;  x1 = %.6f\n", r1, a, r2, x1)
   plot()
   circle(0, 0, r2 + r1, :black)
   circle(0, 0, r2, :green)
   circle(0, r2 + r1, r1, :blue)
   circle(x1, r2 - a + r1, r1, :blue)
   circle(-x1, r2 - a + r1, r1, :blue)
   x = sqrt((r2 + r1)^2 - (r2 - a)^2)
   segment(-x, r2 - a, x, r2 - a)
   if more
       point(r2, 0, "r2 ", :green, :right)
       point(r2, 0, "中円 \n", :green, :right, :bottom)
       point(r2 + r1, 0, "r2+r1 ", :black, :right)
       point(r2 + r1, 0, "大円 \n", :black, :right, :bottom)
       point(x1, r2 - a + r1, "小円:r1\n(x1,r2-a+r1)", :blue, :left, :bottom)
       point(0, r2 - a, " r2-a", :black)
       point(0, r2, " r2", :green)
       point(0, r2 + r1, " r2+r1", :blue)
       vline!([0], color=:black, lw=0.5)
       hline!([0], color=:black, lw=0.5)
   else
       plot!(showaxis=false)
   end
end;

 

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

Julia / v1.9.1 での新機能の二つ目

2023年06月09日 | Julia

今まで,ユニコード文字列のスライスに手こずっていたけど,Unicode.graphemes() でなんとかうまくいくようになった。多バイト文字とASCIIなどが混じっていても文字単位でスライスできる。

In [23]: a = "私の名前は中野です"

Out[23]: "私の名前は中野です"

In [24]: a[2:5]  # これはエラーになる

ERROR: StringIndexError: invalid index [2], valid nearby indices [1]=>'私', [4]=>'の'

Stacktrace:

[1] string_index_err(s::String, i::Int64)

   @ Base ./strings/string.jl:12

[2] getindex(s::String, r::UnitRange{Int64})

   @ Base ./strings/string.jl:277

[3] top-level scope

   @ REPL[24]:1

[4] top-level scope

   @ /Applications/Julia-1.9.app/Contents/Resources/julia/share/julia/stdlib/v1.9/REPL/src/REPL.jl:1416

In [25]: using Unicode  # こうやっておいて

In [26]: graphemes(a, 3:7)  # こうすれば,うまくいく

Out[26]: "名前は中野"

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

Julia / v1.9.1 での新機能の一つ

2023年06月09日 | Julia

新しい機能で,入力と出力に番号プレフィックスをつけることができるようになった。

しかし,println() を使うとその機能が使えない。バグ?

julia> using REPL  # まずはこれをやらないといけないのかな?

julia> REPL.numbered_prompt!()  # ついで,これ。

In [2]: (a, b) = (2, 45)

Out[2]: (2, 45)

In [3]: println(a + 2b)  # println() の出力には[番号]がつかない

92

In [4]: a + 2b  # REPL だと,つく。

Out[4]: 92

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

Julia / Current stable release: v1.9.1 (June 7, 2023)

2023年06月09日 | Julia

Julia が v1.9.1 へバージョンアップされました

Current stable release: v1.9.1 (June 7, 2023)

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

算額(その273)

2023年06月09日 | Julia

算額(その273)

中村信弥「改訂増補 長野県の算額」
http://www.wasan.jp/zoho/zoho.html
県内の算額(165)
長野県飯山市下木島 鳥出神社 天保14年(1843)

大円内に中円 1 個,小円 2 個が入っている。外円,中円の径を知って小円の径を求めよ。

大円の半径と中心座標を R, (0, 0) とする。
中円の半径と中心座標を r1, (0, R - r1) とする。
右下の小円の半径と中心座標を r2, (r2, y2) とする。

以下の連立方程式を解く。

include("julia-source.txt");

using SymPy
@syms R::positive, r1::positive, r2::positive, y2::negative;

eq1 = r2^2 + y2^2 - (R - r2)^2
eq2 = r2^2 + (R - r1 - y2)^2 - (r1 + r2)^2
res = solve([eq1, eq2], (r2, y2))

   1-element Vector{Tuple{Sym, Sym}}:
    ((-R + r1)*(-R + (R^2 - 3*R*r1)/(R + r1))/(R + r1), (R^2 - 3*R*r1)/(R + r1))

res[1][1] |> simplify |> println  # r2: 小円の半径
res[1][2] |> simplify |> println  # y2: 小円の中心の y 座標

   4*R*r1*(R - r1)/(R + r1)^2
   R*(R - 3*r1)/(R + r1)

R = 140寸, r1 = 84寸 のとき,小円の半径 r2 = 52寸5分である。直径は 105 寸である。

(R, r1) = (140, 84)
4*R*r1*(R - r1)/(R + r1)^2

   52.5

using Plots

function draw(more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   (R, r1) = (140, 84)
   r2 = 4*R*r1*(R - r1)/(R + r1)^2
   y2 = R*(R - 3*r1)/(R + r1)
   @printf("r2 = %.6f;  y2 = %.6f\n", r2, y2)
   plot()
   circle(0, 0, R, :black)
   circle(0, R - r1, r1, :blue)
   circle(r2, y2, r2)
   circle(-r2, y2, r2)
   if more
       point(R, 0, " R", :black, :left, :bottom)
       point(0.7R, R - 1.7r1, "大円:R\n(0,0)", :black, mark=false)
       point(0, R - r1, " 中円:r1\n (0,R-r1)", :blue)
       point(r2, y2, " 小円:r2\n (r2,y2)", :red)
       vline!([0], color=:black, lw=0.5)
       hline!([0], color=:black, lw=0.5)
   else
       plot!(showaxis=false)
   end
end;

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

算額(その272)

2023年06月09日 | Julia

算額(その272)

中村信弥「改訂増補 長野県の算額」
http://www.wasan.jp/zoho/zoho.html
県内の算額(257)
長野県下高井郡野沢温泉村 湯沢神社 明治17年(1884)

円内に等円 3 個,三角形 1 個が入っている。等円の径を知って三角形の高さを求めよ。

右下の等円の半径と中心座標を r, (r, R - 3r) とする。
外円の半径を R とすると,三角形の頂点 A の座標(x0, y0) で,y0 = R - 2r, x0 = sqrt(R^2 - (R - 2r)^2) である。
上の等円の中心から線分 AB への距離が r である。
以下の連立方程式を解く。

include("julia-source.txt");

using SymPy
@syms R::positive, r::positive, x::positive, y::negative, x0::positive, y0::positive, x1::positive, y1::positive;

y0 = R - 2r
x0 = sqrt(R^2 - (R - 2r)^2)
eq2 = x1^2 + y1^2 - R^2
eq3 = distance(x0, y0, x1, y1, 0, R - r) - r^2
eq4 = r^2 + (R - 3r)^2 - (R - r)^2;

res = solve([eq2, eq3, eq4], (R, x1, y1))

   1-element Vector{Tuple{Sym, Sym, Sym}}:
    (9*r/4, 2*sqrt(5)*r/9, 79*r/36)

   R = 2.250000;  x1 = 0.496904;  y1 = 2.194444;  y0 = 0.250000
   三角形の高さ: y1 - y0 = (35/18)*r = 1.944444

y1 - y0 が三角形の高さなので,79r/36 - (9r/4 - 2r) = (35/18)*r である。

using Plots

function draw(more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   r = 1
   R = 9r/4
   y0 = R - 2r
   x0 = sqrt(R^2 - (R - 2r)^2)
   (R, x1, y1) = (9*r/4, 2*sqrt(5)*r/9, 79*r/36)
   @printf("R = %.6f;  x1 = %.6f;  y1 = %.6f;  y0 = %.6f\n", R, x1, y1, y0)
   @printf("三角形の高さ: y1 - y0 = (35/18)*r = %.6f\n", (35/18)*r)
   plot()
   circle(0, 0, R, :black)
   circle(r, R - 3r, r)
   circle(-r, R - 3r, r)
   circle(0, R - r, r)
   plot!([x0, x1, -x0, x0], [y0, y1, y0,  y0], color=:blue, lw=0.5)
   if more
       point(x1, y1, " B:(x1,y1)", :black, :left, :bottom)
       point(x0, y0, "A:(x0,y0)  ", :black, :right, :bottom)
       point(0, R, " R", :black, :left, :bottom)
       point(r, R - 3r, "(r,R-3r)", :red)
       point(0, R - r, " R-r", :red)
       vline!([0], color=:black, lw=0.5)
       hline!([0], color=:black, lw=0.5)
   else
       plot!(showaxis=false)
   end
end;

 

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

算額(その271)

2023年06月09日 | Julia

算額(その271)

中村信弥「改訂増補 長野県の算額」
http://www.wasan.jp/zoho/zoho.html
県内の算額(256)
長野県下高井郡野沢温泉村 湯沢神社 明治17年(1884)

直線の上に天円 2 個が互いに外接している。月円 4 個も直線に外接し両端の月園は天円にも外接している。人円 2 個は月円 2 個と,天円および日円に外接している。日円は天円とも外接している。天円の径を知って月円の径を求めよ。

y 軸が天円の交点を通るようにして,右半分だけを考える。
天円の半径,中心座標を r1, (r1, r1)
日円の半径,中心座標を r2, (0, y2)
人円の半径,中心座標を r3, (x3, y3)
月円の半径,中心座標を r4, (r4, r4) および (3r4, r4)

天円と右端の月円が外接することから,天円の径が与えられれば月円の径は方程式 1 本で解ける。

include("julia-source.txt");

using SymPy
@syms r1::positive, r2::positive, r3::positive, r4::positive, y2::positive, x3::positive, y3::positive;

r1 = 1
eq3 = (r1 -3r4)^2 + (r1 - r4)^2 - (r1 + r4)^2 |> expand
solve(eq3, r4) |> println

   Sym[r1/9, r1]

r4 < r1 なので r4 = r1 / 9,すなわち月円の径は天円の径の 1/9 である。

以下の連立方程式を解いて残りのパラメータを求める。

@syms r1::positive, r2::positive, r3::positive, r4::positive, y2::positive, x3::positive, y3::positive;

r1 = 1
r4 = r1//9
eq1 = r1^2 + (r1 - y2)^2 - (r1 + r2)^2 |> expand
eq2 = (r1 - x3)^2 + (r1 - y3)^2 - (r1 + r3)^2 |> expand
eq4 = x3^2 + (y2 - y3)^2 - (r2 + r3)^2 |> expand
eq5 = (x3 - 3r4)^2 + (y3 - r4)^2 - (r3 + r4)^2 |> expand
eq6 = r4^2 + (y2 - r4)^2 - (r2 + r4)^2 |> expand;

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

   1-element Vector{NTuple{5, Sym}}:
    (8*r1/45, 17*r1/45, 2*r1/27, 2*r1/9, 7*r1/27)

日円の径は天円の径の 8/45,人円の径は天円の径の 2/27 などである。

using Plots

function draw(more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   r1 = 1
   r4 = r1/9
   (r2, y2, r3, x3, y3) = (8*r1/45, 17*r1/45, 2*r1/27, 2*r1/9, 7*r1/27)
   @printf("月円: r4 = %.6f\n", r4)
   plot()
   circle(r1, r1, r1)
   circle(-r1, r1, r1)
   circle(0, y2, r2, :blue)
   circle(x3, y3, r3, :magenta)
   circle(-x3, y3, r3, :magenta)
   circle(r4, r4, r4, :green)
   circle(3r4, r4, r4, :green)
   circle(-r4, r4, r4, :green)
   circle(-3r4, r4, r4, :green)
   if more
       point(r1, r1, " 天円:r1,(r1,r1)", :red)
       point(0, y2, " 日円:r2,(0,r2)", :blue, :left, :bottom)
       point(x3, y3, " 人円:r3,(x3,y3)", :magenta, :left, :bottom)
       point(r4, r4, " 月円:r4,(r4,r4)", :green, :left, :bottom)
       point(3r4, r4, " 月円:r4,(3r4,r4)", :green, :left, :top)
       vline!([0], color=:black, lw=0.5)
       hline!([0], color=:black, lw=0.5, xlims=(-0.1, 2), ylims=(-0.05, 1.1))
   else
       plot!(showaxis=false)
       hline!([0], color=:black, lw=0.5)
   end
end;

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

算額(その270)

2023年06月08日 | Julia

算額(その270)

中村信弥「改訂増補 長野県の算額」
http://www.wasan.jp/zoho/zoho.html
県内の算額(260)
長野県下高井郡木島平村 天満宮 推定明治21年(1888)

直線の上に丁円,乙円,甲円,乙円の順に 4 円が外接している。この 4 円に外接する丙円がある。甲円,乙円の径がそれぞれ 2 寸,3 寸のとき,丁円の径を求めよ。
丁円の半径,中心座標を r0, (0, r0)
甲円の半径,中心座標を r1, (x1, r1)
乙円の半径,中心座標を r2, (x2, r2), (x3, r2), x3 = x1 + (x1 - x3) = 2x1 - x2
丙円の半径,中心座標を r4, (x1, 2r1 + r4)

include("julia-source.txt");

using SymPy
@syms r0::positive, r1::positive, r2::positive, r4::positive, x1::positive, x2::positive, x3::positive, y4::positive;

x2 = 2x1 - x3

x4 = x1
y4 = 2r1 + r4
eq1 = x3^2 + (r0 - r2)^2 - (r0 + r2)^2
eq2 = x1^2 + (r0 - y4)^2 - (r0 + r4)^2
eq3 = (x1 - x2)^2 + (r1 - r2)^2 - (r1 + r2)^2
eq4 = (x2 - x4)^2 + (r2 - y4)^2 - (r2 + r4)^2;

r1, r2 を変数として,r0, r4, x1, x3 を求める。

res = solve([eq1, eq2, eq3, eq4], (r0, r4, x1, x3))

   2-element Vector{NTuple{4, Sym}}:
    (r1*r2^2/(2*r1 - r2)^2, -r1^2/(r1 - r2), -4*r1^(3/2)*sqrt(r2)*sqrt(1/(4*r1^2 - 4*r1*r2 + r2^2)), -2*sqrt(r1)*r2^(3/2)*sqrt(1/(4*r1^2 - 4*r1*r2 + r2^2)))
    (r1*r2^2/(2*r1 - r2)^2, -r1^2/(r1 - r2), 4*r1^(3/2)*sqrt(r2)*sqrt(1/(4*r1^2 - 4*r1*r2 + r2^2)), 2*sqrt(r1)*r2^(3/2)*sqrt(1/(4*r1^2 - 4*r1*r2 + r2^2)))

二組の解が求まるが,実際の値を与えて検証すると,二番目の解が適切である。

   丁円: r0 = 18.000000;  丙円: r4 = 4.000000;  x1 = 19.595918;  x3 = 14.696938

(r1, r2) = (2, 3)
(r1*r2^2/(2*r1 - r2)^2, -r1^2/(r1 - r2), -4*r1^(3/2)*sqrt(r2)*sqrt(1/(4*r1^2 - 4*r1*r2 + r2^2)), -2*sqrt(r1)*r2^(3/2)*sqrt(1/(4*r1^2 - 4*r1*r2 + r2^2)))


   (18.0, 4.0, -19.595917942265427, -14.69693845669907)

(r1, r2) = (2, 3)
(r1*r2^2/(2*r1 - r2)^2, -r1^2/(r1 - r2), 4*r1^(3/2)*sqrt(r2)*sqrt(1/(4*r1^2 - 4*r1*r2 + r2^2)), 2*sqrt(r1)*r2^(3/2)*sqrt(1/(4*r1^2 - 4*r1*r2 + r2^2)))

   (18.0, 4.0, 19.595917942265427, 14.69693845669907)

二番目の解の数式表現を求める。

甲円,乙円の半径を引数として,丁円の半径を求めるプログラムを書く。

直径を与えれば直径を求める。

draw(2, 3, more=false

   丁円: r0 = 18.000000;  丙円: r4 = 4.000000;  x1 = 19.595918;  x3 = 14.696938

using Plots

function draw(r1, r2, more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   (r0, r4, x1, x3) = (
       r1*r2^2/(2*r1 - r2)^2,
       -r1^2/(r1 - r2),
       4*r1^(3/2)*sqrt(r2)*sqrt(1/(4*r1^2 - 4*r1*r2 + r2^2)),
       2*sqrt(r1)*r2^(3/2)*sqrt(1/(4*r1^2 - 4*r1*r2 + r2^2)))
   x2 = 2x1 - x3
   x4 = x1
   y4 = 2r1 + r4
   @printf("丁円: r0 = %.6f;  丙円: r4 = %.6f;  x1 = %.6f;  x3 = %.6f\n", r0, r4, x1, x3)
   plot()
   circle(0, r0, r0)
   circle(x1, r1, r1, :blue)
   circle(x3, r2, r2, :green)
   circle(x2, r2, r2, :green)
   circle(x4, y4, r4, :magenta)
   if more
       point(x1, r1, " 甲円:r1(x1,r1)", :blue)
       point(x2, r2, " 乙円:r2(x2,r2)", :green, :left, :bottom)
       point(x3, r2, "乙円:r2(x3,r2) ", :green, :right, :bottom)
       point(x4, y4, " 丙円:r4(x4,y4)", :magenta, :left, :bottom)
       point(0, r0, " 丁円:r0", :red)
       vline!([0], color=:black, lw=0.5)
       hline!([0], color=:black, lw=0.5, xlims=(-r0, x2 + 4r2))
   else
       plot!(showaxis=false)
   end
end;

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

算額(その269)

2023年06月08日 | Julia

算額(その269)

中村信弥「改訂増補 長野県の算額」
http://www.wasan.jp/zoho/zoho.html
県内の算額(260)
長野県下高井郡木島平村 天満宮 推定明治21年(1888)

追記:この算額の図は多分誤っている。算額(その798)の図が正しい。https://blog.goo.ne.jp/r-de-r/e/1fd7e974eb24c0c5118e308a9e790003
すなわち,「小円は 3 個の中円に外接している」のが正しい。
そのように仮定すれば,答えも術も矛盾しない。

大円 2 個,中円 5 個,小円 4 個が配置されている。小円は大円と中円に外接している。
大円の直径が 1 尺(10 寸)のとき,小円の直径を求めよ。

術は「近似値」を求めているが,右上と左下の小円の中心間の距離を「大円の半径+小円の直径」とする無茶なものである。

大円,中円の半径を r1, r2 とおく(r2 = r1/2)。小円の直径を r3, 中心座標を (x3, x3) とおき,以下の方程式を解く。条件式が 2 本で,r3, x3 の二変数について解を求める。その解の式には r1 が変数として含まれる。

include("julia-source.txt");

using SymPy
@syms r1::positive, r2::positive, r3::positive, x3::positive;

r2 = r1//2
eq1 = x3^2 + (x3 + r2)^2 - (r1 + r3)^2
eq2 = (2r2 - x3)^2 + x3^2 - (r2 + r3)^2;

solve([eq1, eq2], (r3, x3))

   1-element Vector{Tuple{Sym, Sym}}:
    (3*r1/14, 4*r1/7)

直径が 10 寸ならば,小円の直径は 30/14 = 2.142857142857143 である。
術では (sqrt(1/2) - 1/2)*10 = 2.0710678118654755 としているので,そうとう違う。

追記:この術は算額(その498)の図についての正しい答えである。

(sqrt(1/2) - 1/2)*10

   2.0710678118654755

using Plots

function draw(more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   r1 = 10//2
   r2 = r1//2
   (r3, x3) = (3r1/14, 4r1/7)
   @printf("r3 = %.6f;  x3 = %.6f\n", r3, x3)
   @printf("小円の直径 = 2r3 = %.6f\n", 2r3)
   plot()
   circle(0, r2, 2r2)
   circle(0, -r2, 2r2)
   circle(0, 0, r2, :blue)
   circle42(0, 2r2, r2, :blue)
   circle4(x3, x3, r3, :green)
   if more
       point(r2, 0, " r2")
       point(0, r2, " r2")
       point(2r2, 0, " 2r2")
       point(0, 2r2, " 中円:r2\n 2r2", :blue)
       point(3r2, 0, "3r2 ", :green, :right)
       point(x3, x3, " 小円:r3\n (x3,x3)", :green, :center, :bottom)
       point(1.2r2, 2r2, "大円", :red, mark=false)
       vline!([0], color=:black, lw=0.5)
       hline!([0], color=:black, lw=0.5)
   else
       plot!(showaxis=false)
   end
end;

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

算額(その268)

2023年06月07日 | Julia

算額(その268)

中村信弥「改訂増補 長野県の算額」
http://www.wasan.jp/zoho/zoho.html
県内の算額(183)
長野県下高井郡木島平村西小路 満昌院 嘉永5年(1852)

左下の頂点が原点の正方形と,2つの頂点がその正方形の辺上にあり,最初の正方形の右上の頂点が45度回転した正方形がある。左下の二等辺直角三角形中に甲円,右上の2個の二等辺直角三角形中にそれぞれ乙円が内接している。甲円の直径を乙円の直径で表わせ。
甲円と乙円の入っている二等辺直角三角形は相似で,相似比が √2 である。
よって,「甲円の直径 = √2 乙円の直径」である。

   a = 10.000000;  b = 6.666667;  r1 = 1.952621;  r2 = 1.380712;  r1/r2 = 1.4142135623730951

include("julia-source.txt");

using SymPy
@syms b::positive, 甲円の直径::positive, 乙円の直径::positive;

eq1 = 甲円の直径 / 乙円の直径 - sqrt(Sym(2))b / b
res = solve(eq1, 甲円の直径)[1] |> println

   sqrt(2)*乙円の直径

using Plots

function draw(more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   a = 10
   b = 2a/3
   r1 = (2b - sqrt(2b^2))/2
   r2 = (sqrt(2)b - b)/2
   @printf("a = %.6f;  b = %.6f;  r1 = %.6f;  r2 = %.6f;  r1/r2 = %.16f\n", a, b, r1, r2, r1/r2)
   plot([0, a, a, 0, 0], [0, 0, a, a, 0], color=:blue, lw=0.5)
   plot!([0, b, 2b, b, 0], [b, 0, b, 2b, b], color=:red, lw=0.5)
   circle(r1, r1, r1, :green)
   circle(a - b/2, a + r2, r2, :magenta)
   if more
       point(a, 0, " a", :black, :left, :bottom)
       point(b, 0, "  b", :black, :left, :bottom)
       point(r1, r1, " 甲:r1\n (r1,r1)", :green, :center, :top)
       point(b, a + r2, "乙:r2\n(b,a+r2)", :magenta, :center, :top)
       vline!([0], color=:black, lw=0.5)
       hline!([0], color=:black, lw=0.5)
   else
       plot!(showaxis=false)
   end
end;

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

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

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