投稿

11月, 2021の投稿を表示しています

N88-BASICでアナログ時計

イメージ
2021/11/28(日) N88-BASICでアナログ時計   アナログ時計を表示しました 1,2キーで秒針の動きを変える事が出来ます 1秒毎に動かすのは簡単です   N88-BASICでは1秒以下の時間を計る関数が ありませんので、滑らかに動かすのは大変です   そこで、1秒間で何回針を書き換えられるかを 測定し、1回の書き換えで進むべき時間を求め る事で滑らかに動かしています   余談 AM/PMを使った12時間表示では AM(午前)は00:00~12:00未満 PM(午後)は12:00~24:00未満 なので AM(午前)12:00が00:00(夜) PM(午後)12:00が12:00(昼) ですが   日本の明治?からの法律では 午前は01時0~12時 午後は13時0~24時 となっていて 午後12:00が00:00(夜) 午前12:00が12:00(昼) という事になっています つまり昼の12:30は午前という 大変混乱する法律を 未だに使っているのです 12:00は午前12:00で 12:01は午後12:01という解釈は 更に混乱を呼びます またアナログ時計に存在しない 午後0時などという更に混乱を 招く解釈をする方がいらっしゃいますが   初めに紹介したAM/PMのに解釈すれば すっきりするのだから 解釈を捻じ曲げて現行法を擁護するより 法律の方を変えるほうがすっきりすると 思います   現在ほとんどの方が 昼の12時から午後だという 認識をしていると思いますので (現行法では昼の12時は午前)   早く法改正すべきだと思います   NL-BASICとblg~.zip(clock001.bas)は このブログ(以下のリンク)から ダウンロードできます https://ulprojectmail.blogspot.com Readme.txtを読んで遊んで下さい  

N88-BASICで素数 (2回目)

イメージ
2021/11/27(土) N88-BASICで素数 (2回目) 素因数分解 数値や式を因数の積の形にする事を 因数分解といいます 素数のみの因数の積で表す事を 素因数分解と言います   数値n(2以上の整数)を素因数分解するには   i = 2~[√n]で割れば良く ([a]はガウス記号でaを超えない最大の整数 a>0なら切り捨て、a<0なら切り上げ)   n = 18なら 2 ) 18 3 )  9    3 18 = 2・3・3 = 2・3 2   となります   アルゴリズム(解法?) ① m = [√n] ② i = 2 ③ i > m なら⑥へ ④ q = n / iが   割り切れればiが素因数, n←q ,  m = [√n]   割り切れなければi←i+1 ⑤ ③へ ⑥ nが素因数   単純だが遅い方法がその1です   2で割り切れなくなれば あとは偶数では割り切れないので 偶数で割ることを省略して処理速度を 上げたのがその2です   今回はこの2種類のアルゴリズムの 処理時間を比較してみました   探せば処理速度の速いアルゴリズムが いろいろとあると思います   また、C等のコンパイラ言語で書くと もっと速くなります   今回TIME$を使って時間を表示しています NL-BASIC,VL-BASIC,XL-BASICの 時刻(DATE$, TIME$)はCLEARやRUNで、 システム時刻に戻ります   Enterのみ入力した場合 127 * 524287 * 6700417 を計算するようにしています   NL-BASICとblg~.zip(prime002.bas)は このブログ(以下のリンク)から ダウンロードできます https://ulprojectmail.blogspot.com Readme.txtを読んで遊んで下さい  

N88-BASICで素数 (1回目)

イメージ
2021/11/26(金) N88-BASICで素数 (1回目) 1~10000までの1229個の素数を求める (NL-BASICはAlt+6で高速化)   エラトステネスのふるい(Sieve of Eratosthenes)   1は素数ではないので消します (素因数分解は6=2×3で6=1×2×3ではない) 2は素数なので2より大きい2の倍数を消す (消えていない数は素数と判断) 3は素数なので3より大きい3の倍数を消す 4は2の倍数なので消えている(素数でない) 5は素数なので5より大きい5の倍数を消す … と[√10000]=100まで繰り返し 残った数が素数です ([x]はガウス記号でxを超えない最大の整数)   b>[√n]、n=b×aとするとb≧aとなり nはaの倍数としてすでに消えている つまり[√n]より大きい数の2~n/[√n]倍の数は すでに消えているということです   通常配列を使うところをグラフィック画面に 点を描いて色で判定しています。 (素数でない場合は0:黒)   100×100(1~10000)のマスに残った素数が 描く模様がどのようなものになるのかと思い 描いてみました   NL-BASICとblg~.zip(prime001.bas)は このブログ(以下のリンク)から ダウンロードできます https://ulprojectmail.blogspot.com Readme.txtを読んで遊んで下さい  

N88-BASICで偶数回目に表が出る確率 (2回目)

イメージ
2021/11/24(水) N88-BASICで偶数回目に表が出る確率 (2回目)   今回は、コインを表が出るまで投げた回数が kの倍数である確率を計算します   1  回目で表が出る確率は1/2 2  回目で表が出る確率は1/2 2  (= 1/2 × 1/2) k  回目で表が出る確率は1/2 k   2k回目で表が出る確率は(1/2 k ) 2   ik回目で表が出る確率は(1/2 k ) i     kの倍数回目で表が出る確率pは、上記のk, 2k, ...回目 の合計になるので、 p = 1/2 k  + (1/2 k ) 2  + ... + (1/2 k ) i  + ...       n  = lim     Σ(1/2 k ) i   n→∞  i=1 を計算すれば良い。      n (r-1)Σ(r) i  = r n+1 +r n +...+r 2  - (r n +...+r 2 +r)    i=1       = r n+1  - r n Σ(r) i  = ( r n+1  - r ) / (r - 1) i=1 (等比級数の和) また、|r| < 1ならlim r n  = 0         n→∞ (例0.1×0.1×...は0に近づく) を使って、       n p = lim     Σ(1/2 k ) i   n→∞  i=1  = lim { (1/2 k ) n+1  - 1/2 k  } / (1/2 k  - 1)   n→∞  = ( 0 - 1/2 k  ) / (1/2 k  - 2 k /2 k )  = 1/2 k  / {(2 k -1)/2 k }   p = 1 / (2 k -1)    … [k > 0]   NL-BASICとblg~.zip(coin002.bas)は このブログ(以下のリンク)から ダウンロードできます https://ulprojectmail.blogspot.com Readme.txtを読んで遊んで下さい  

N88-BASICで偶数回目に表が出る確率 (1回目)

イメージ
2021/11/23(火) N88-BASICで偶数回目に表が出る確率 (1回目)   コインを表が出るまで投げた回数が 偶数か奇数かを当てるゲームをする   例えば 裏,裏,表(必ず表で終了)と出れば 3回投げたので奇数に賭けた人の勝ちです 裏,裏,裏,表(必ず表で終了)と出れば 4回投げたので偶数に賭けた人の勝ちで   実際にコインを投げて見ると 奇数に掛けた方が良く勝てます   不思議です・・・   が、よく考えてみると   1回目が表の確率は1/2 2回目が表の確率は1/4 (1回目裏は1/2 その内の1/2) 3回目が表の確率は1/8 4回目が表の確率は1/16 5回目が表の確率は1/32 6回目が表の確率は1/64 ・・・ なので 奇数回で終了する確率は1/2+1/8+1/32+ … と 1/2より大きいくなるので 偶数回で終了する確率は(1/4+1/16+1+64+ … ) 1/2より小さくなります   ではどの位有利なのかを計算してみます 偶数回で終了する確率pは、上記の2,4,6,… 回目 の合計になるので、 p = 1/4 + 1/16 + 1/64 + …       n  = lim   Σ(1/4) i   n→∞  i=1 を計算すれば良い          n (r-1)Σ(r) i  = r n+1 +r n + … +r 2  - (r n + … +r 2 +r)    i=1 = r n+1  - r n Σ(r) i  = ( r n+1  - r ) / (r - 1) i=1 (等比級数の和) また、|r| < 1ならlim r n  = 0         n→∞ (例0.1×0.1×...は0に近づく) を使って       n p = lim   Σ(1/4) i   n→∞  i=1  = lim { (1/4) n+1  - (1/4) } / (1/4 - 1)   n→∞  = { 0 - (1/4) } / (1/4 - 4/4)  = (-1/4) / (-3/4)  = (1/4) / (3/4)  = 1/4 × 4/3  = 1/3 … 偶数回 奇数回の確率 = 1 - 1/3 = 2/3 つまり   偶数回で終わる確率1/3 奇数回で終わる確率2/3 という結果になります   どちらがジ

N88-BASICでうなり

イメージ
2021/11/21(日) N88-BASICでうなり   例えば振動数440Hzと443Hzの音 を同時に聞くと1秒間に3回 (|443Hz-440Hz|)の音量の大小が 聞こえる現象をうなりと言います。 楽器のチューニングなどに使うと 思います。   この現象をBASICで視覚化して 見ましょう。   話を簡単にするために、音を 正弦(sin)波で表す事にします。   そこで 三角比のsin(正弦),cos(余弦),tan(正接) と 加法定理 sin(α±β) = sinαcosβ±cosαsinβ cos(α±β) = cosαcosβ∓sinαsinβ tan(α±β) = (tanα±tanβ)/(1∓tanαtanβ) は https://ulprojectmail.blogspot.com/2021/09/1.html 三角関数 (1回目) を見てください   次に正弦波の合成を考えます。 a = α+β   、b = α-βと置くと α= (a+b)/2 、β= (a-b)/2 Asina + Asinb = Asin(α+β) + Asin(α-β) = Asinαcosβ+Acosαsinβ  +Asinαcosβ-Acosαsinβ = 2Asinαcosβ = 2Acos{(a-b)/2}sin{(a+b)/2}   振幅A(m),振動数f(Hz)の音(正弦波) の変位y(m)と時間t(s)の関係は、 y = -Asin2πft -Aになっているのは正弦波がx軸の 正の方向に移動すると初めyは負の 方向に変化するからですが、ここでは あまり重要ではありません。 0~2π(ラジアン)は0~360(°)の 角度の弧度法表記です。   a = 2πft、 b = 2πf'tと置くと、 a-b=2πt(f-f')なので、 a-bは振動数の差、(a+b)/2は振動数 の平均になります   Asina + Asinb = 2Acos{(a-b)/2} sin{(a+b)/2} の2Acos{(a-b)/2}を振幅と考えると cosは1周期(0~2π)で2回振幅が 増加しますので(a-b)/2では、 |a-b|回振幅が増加します つまり、振動数|f-f'|(=|a-b|)の うなりが聞こえることになります (1秒間に|f-f

N88-BASICで万有引力

イメージ
2021/11/17(水) N88-BASICで万有引力   万有引力( Universal gravitation )を再現し 恒星、惑星、衛星を動かします   大文字ベクトル、小文字スカラー   位置   P1=(x 1 ,y 1 ,z 1 ),P2=(x 2 ,y 2 ,z 2 ) 質量   m 1 ,m 2   加速度 A 1 ,A 2     N:物体2に働く引力方向の単位ベクトル R:P 1 -P 2   r:2点間の距離 k:比例定数(万有引力定数) N = R/|R| 、 r = |R| 引力F = m 2 A 2  = -m 1 A 1   引力F=k(m 1 +m 2 )N/(r 2 ) =k(m 1 +m 2 )R/(|R| 3 )   A 1  = -k(m 1 +m 2 )R/(|R| 3 )/m 1   A 2  =  k(m 1 +m 2 )R/(|R| 3 )/m 2   (k = 万有引力定数Gとすれば 万有引力による加速度になりますが 今回は適当な数値を使います)   加速度、速度、位置のベクトルを A,V,Pとすると、 Pの微小増分dP,時間tの微小増分dt dP = Vdt, dV = Adt です。両辺dtで割ると、 dP/dt = VはPの時間微分です dV/dt = AはVの時間微分です   ここからA = const.(一定)のとき を考えます dV/dt = Aの両辺をtで積分すると、 V = At + C (Cは積分定数) t=0のときV=V 0 (初速度)と置くと C = V 0 となる。同様に dP/dt = V = At + V 0 を積分すると、 P = (1/2)At 2  + V 0 t + C t=0のときP=P 0 (初期位置)と置くと C = P 0 となる よって、 A = const.のとき、 V = V 0  + At P = P 0  + V 0 t + (1/2)At 2   という、おなじみの式になります t = 1(単位時間 = 1/60s など) とすると、単位時間ごとに P = P + V + A/2 V = V + A を計算することになります 万有引力による加速度は一定では ないのでこの式では誤差がでます が、万有引力による正確な式を 求めるのは困難なので、 今回はこの式を使

N88-BASICで二項分布 (6回目)

イメージ
2021/11/14(日) N88-BASICで二項分布 (6回目)   100円玉n枚と500円玉m枚を同時に投げた時 それぞれの表の数をx, yとすると x < y, x = y, x > y となる確率pを求め nとpのグラフを表示しました ただし、n≦mとする (n>mの時は硬貨を入替えれば良いため)   maxとsを入力し、 n=0~max, m=s~max+s としています --------------------------------------------- 特別な場合 --------------------------------------------- 硬貨の枚数の差m-nが1のとき x < yの確率(100円の表が少なくなる確率)は、 nにかかわらず0.5になっています これは、 n枚の100円玉とn+1枚の500円玉を同時に投げて 表の数が100円玉より500円玉のほうが多い確 率は? 2005年度・京都大学・理系(後期) の答えになっています   --------------------------------------------- 考察 --------------------------------------------- nCrの公式、詳しくは https://ulprojectmail.blogspot.com/2021/11/n88-basicbnp-3.html N88-BASICで二項分布 (3回目) を参照 nCr = n!/{(n-r)!r!} = n C n-r   ΣnCi = 2 n  (i=0~n)   P(x < y)の式、詳しくは https://ulprojectmail.blogspot.com/2021/11/n88-basicbnp-5.html N88-BASICで二項分布 (5回目) を参照 P(x < y) = (1/2) n+m ・Σ(mCy・ΣnCx) (内x=0~y-1)(外y=1~n) + (1/2) m ・ΣmCy (y=n+1~m) にm=n+1を代入した式をpとすると p = (1/2) 2n+1 ・Σ( n+1 Cy・ΣnCx) (内x=0~y-1)(外y=1~n) + (1/2) n+1   = (1/2) 2n+1 {Σ( n+1 C

N88-BASICで二項分布 (5回目)

イメージ
2021/11/13(土) N88-BASICで二項分布 (5回目)   100円玉n枚と500円玉m枚を同時に投げた時 それぞれの表の数をx, yとすると x < y, x = y, x > y となる確率を求める   ただし、n≦mとする (n>mの時は硬貨を入替えれば良いため)   --------------------------------------------- x = yの確率を考える --------------------------------------------- 各硬貨は独立試行なので表の数x, yは 二項分布B(n, 1/2),B(m, 1/2)に従うので 100円玉の表の数がx枚になる確率は nCx・p x ・q n-x  (p=1-q=1/2) = nCx・(1/2) n   500円玉の表の数がy枚になる確率は mCy・(1/2) m よって (1/2) n+m ・Σ(nCi・mCi) (i = 0~n) となる (i = n+1~mの時はx=yとならないので確率は0)   --------------------------------------------- x > yの確率を考える --------------------------------------------- (1/2) n+m ・ΣΣ(nCx・mCy) (内y=0~x-1)(外x=1~n)   = (1/2) n+m ・Σ(nCx・ΣmCy) (内y=0~x-1)(外x=1~n) となる (x=0の時はx>yとならない)     --------------------------------------------- x < yの確率を考える --------------------------------------------- (1/2) n+m ・ΣΣ(nCx・mCy) (内x=0~y-1)(外y=1~n) + (1/2) n+m ・ΣΣ(nCx・mCy) (内x=0~n)(外y=n+1~m) = (1/2) n+m ・Σ(mCy・ΣnCx) (内x=0~y-1)(外y=1~n) + (1/2) n+m ・Σ(mCy・ΣnCx) (内x=0~n)(外y=n+1~m) = (1/2) n+m ・Σ(mCy・ΣnCx)