裏 RjpWiki

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

ダサいプログラム

2023年07月05日 | ブログラミング

某氏のプログラムで(プログラミング言語は何だっていい,言わんとしていることはわかるだろう)

switch mat_ver
case 1
  mat_name='R2019a';
case 2
  mat_name='R2007b';
case 3
  mat_name='ver7.1';
case 4
  mat_name='ver5.3';
end

というような類似部分が,何箇所もある。簡明直截ではあるが,ダサい

name  = ['R2019a', 'R2007b', 'ver7.1', 'ver5.3']
mat_name = name[mat_ver]

でいいじゃないか。

更には,中間変数なんぞも不要で,

mat_name = ['R2019a', 'R2007b', 'ver7.1', 'ver5.3'][mat_ver]

のほうが,どれだけわかりやすいか。

こういうプログラムを書く人は信用ならん。

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

マイナ保険証

2023年07月05日 | 雑感

資格確認書をプッシュ型で届けると言っているけど,従来の保険証を自治体から送っていたのとどこが違うのか?マイナ保険証を使っていない人を特定してから,その人あてに資格確認証を送るの?なんかひと手間かかるようで,またそこで齟齬が発生する可能性が出るのでは?

今まで通り,自治体から保険証を送るので,なんの問題もないのでは?

バカ麻生も,「マイナンバーカードなんてなんのメリットもない,わしは使ったことない」といってるぞ。

そういうことをやってくれるなら(手間だの,費用だのは政府が持つということなら),マイナカード返上してしまおうかな。だって,マイナカード持っていなくても,今まで通りやってもらえるのなら,マイナカード持つ必要性ない(ちなみに,私は申請時期が遅かったので,マイナポイントはもらっていない。なんのメリットも受けていないので,マイナカード返上しても,「マイナポイントただ取り」などと言われる筋合いはない)。

もっとも,ばかな政府のばかな施策を利用した一般国民を「マイナポイントただ取り」呼ばわりするのは門違いなのだが。

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

算額(その314)

2023年07月05日 | Julia

算額(その314)

(4) 京都府長岡京市天神 長岡天満宮 寛政2年(1970)
近畿数学史学会:近畿の算額「数学の絵馬を訪ねて」,平成4年5月16日 初版第一刷,大阪教育図書株式会社,大阪市.

p02-03 特集「算額」(杉浦).indd
https://www.s-coop.net/lifestage/backnumber/2011/pdf/1106_02-03.pdf

キーワード:円8個,正方形

図のように,大円と小円の間に正方形がある。大円と小円の直径はそれぞれ 5cm, 3cm である。正方形の辺の長さを求めよ。

正方形の辺の長さを 2a,右上の大円の中心座標を (x2, x2) とする。右の小円の中心座標を (a + r1, 0) とする。
以下の連立方程式を解く。

include("julia-source.txt");

using SymPy

@syms a::positive, x2::positive
(r1, r2) = (3/2, 5/2)
eq1 = (x2 - (a + r1))^2 + x2^2 - (r1 + r2)^2
eq2 = (sqrt(2)a + r2)^2 - 2x2^2
res = solve([eq1, eq2], (a, x2))

   1-element Vector{Tuple{Sym, Sym}}:
    (2.22326059127573, 3.99102754424210)

2res[1][1] |> println

   4.44652118255146

正方形の一辺の長さは 2 * 2.22326059127573 = 4.44652118255146 cm

using Plots

function draw(more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   (r1, r2) = (3/2, 5/2)
   (a, x2) = res[1]
   plot()
   rect(-a, -a, a, a, :red)
   circle4(x2, x2, r2, :blue)
   circle42(0, a + r1, r1, :green)
   if more
       point(a, 0, "a ", :red, :right, :bottom)
       point(a + r1, 0, " a+r1", :green, :left, :bottom)
       point(x2, x2, "(x2,x2)", :blue)
       vline!([0], color=:black, lw=0.5)
       hline!([0], color=:black, lw=0.5)
   else
       plot!(showaxis=false)
   end
end;

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

算額(その313)

2023年07月05日 | Julia

算額(その313)

「三重県に現存する算額の研究」福島完(2007/2/13)
https://mie-u.repo.nii.ac.jp/?action=repository_uri&item_id=7216
三重県伊賀市 永保寺 弘化4年(1847)

問題文5

図のように,円の中に順次,正六花径,正三角形,正方形,正三角形,正方形をいれる。
最も内側の正方形の上辺から,その正方形が内接する正三角形の頂点までの距離(隅中径; 図の AB)が 1.39883135702…であるとき,それぞれの長さを求めよ。

内側の図形から順次長さを求める。

include("julia-source.txt");

using SymPy

@syms 隅中径::positive
隅中径 = Sym(1.39883135702)
隅中径 |> println

   1.39883135702000

中方平面(小さい正方形の一辺)
@syms 中方平面::positive
eq1 = 隅中径/(中方平面/2) - sqrt(Sym(3))
中方平面 = solve(eq1, 中方平面)[1]
中方平面 = 2隅中径 / sqrt(Sym(3))
中方平面.evalf() |> println

   1.61523132105277

小三角面(小さい正三角形の一辺)
@syms 小三角面::positive
小三角面 = (隅中径 + 中方平面) * 2/sqrt(Sym(3))
小三角面.evalf() |> println

   3.48033979707944

小円ノ廻(小円の円周)
@syms 小円ノ廻::positive, 小円ノ径::positive
小円ノ径 = 小三角面/2 * (2/sqrt(Sym(3))) * 2
小円ノ廻 = 小円ノ径 * PI
小円ノ廻.evalf() |> println

   12.6252762225235

大方平面(大きい正方形の一辺 =  小円ノ径)
@syms 大方平面
大方平面 = 小円ノ径
大方平面.evalf() |> println

   4.01875023743036

大三角面(大きい正三角形の一辺)
@syms 大三角面
eq2 = (大方平面/2 * sqrt(Sym(3)) + 大方平面) * 2/sqrt(Sym(3)) - 大三角面
大三角面 = solve(eq2, 大三角面)[1]
大三角面 |> println

   8.65920330020295

六角ノ面(正六角形の一辺)
@syms 六角ノ面
六角ノ面 = 大三角面/2 * 2/sqrt(Sym(3))
六角ノ面.evalf() |> println

   4.99939335633987

矢(外円と正六角形の一辺が作る弦と外円との距離)
@syms 矢
矢 = 六角ノ面 - (六角ノ面/2 * sqrt(Sym(3)))
矢.evalf() |> println

   0.669791706238393

同外径(大三角面外径;大きい正三角形の外接円の直径)
@syms 同外径
同外径 = 2六角ノ面
同外径.evalf() |> println

   9.99878671267973

外円ノ廻(外円の円周)
@syms 外円ノ廻
外円ノ廻 = 同外径 * PI
外円ノ廻.evalf() |> println

   31.4121148813659

using Plots

function draw(more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   r = 9.99878671267973 / 2  # 外円の半径
   x = zeros(7)
   y = zeros(7)
   for i = 1:7
       θ = 60(i - 1) + 30
       x[i] = r*cosd(θ)
       y[i] = r*sind(θ)
   end
   plot()
   circle(0, 0, r)
   plot!(x, y, color=:blue, lw=0.5)
   plot!(x[[2, 4, 6, 2]], y[[2, 4, 6, 2]], color=:green, lw=0.5)
   rect(大方平面/2, y[6], -大方平面/2, y[6] + 大方平面, :orange)
   delta = y[6] + 大方平面/2
   circle(0, delta, 小円ノ径/2)
   factor = 小円ノ径 / 同外径
   plot!(factor .* x[[2, 4, 6, 2]], factor .* y[[2, 4, 6, 2]] .+ delta,
       color=:green, lw=0.5)
   rect(中方平面/2, factor * y[6] + delta,
       -中方平面/2, factor * y[6] + delta + 中方平面, :magenta)
   if more
       point(0, 小円ノ径/2 + delta, " A", :red, :left, :bottom)
       point(0, factor * y[6] + delta + 中方平面, " B", :red, :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でシェアする

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

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