人気ブログランキング |

ブログトップ

電子工作やってみたよ

DM42で乱数を遊ぶ (3)

前回モンテカルロ法を使って遊んでみましたが、2017年11月16日 HP42S でやったのと同じことをDM42 でサンプリング数を増やしてやってみました。
モンテカルロ法でランダムにやるのでなく等間隔で均一にやってみようというわけです。
DM42ならHP42Sの750倍高速ですし、何より電池を消耗しないという大きなメリットがあります。
図のNo1はモンテカルロ法で、ひとつの真四角の中に乱数でランダムに点を置いて半円(1/4円)の内側にあるかを調べて数の比率で円周率を求めます。

c0335218_10495804.jpg


c0335218_10462042.jpg



全プログラムリスト 
DM42(HP42Sと同じ) 動作はUSBで電源供給なので電池の3倍速で動いています。

01 LBL "AA"
02 0
03 STO X * X座標のポイント
04 STO Y   * Y座標のポイント
05 STO T   * トータルポイント数
06 STO P   * 円内部の点の数 (x^2 + Y^2)が1以下
07   LBL  "BB"     * ループ先頭ラベル
08 XEQ "HH" * 円内部の点の数を数えるサブルーチンへ行く(x^2 + Y^2)が1以下
09 0.001 * 1ステップのY移動値
10 STO +Y   * Yに1ステップ分を加算する。
11 RCL Y   * 1ステップ分移動したY値を読み込む
12 1      * 円の内側かいなかチェックする値(1)をセット
13 X>Y ?    * 円の内側ならば
14 GTO "BB"  * ラベルBBへ行く
15 0      * 0を読み込む
16 STO Y   * Yの座標位置をゼロとする
17 0.001    * 座標 1ステップ分読み込み
18 STO +X   * Y座標 1ステップ分加算
19 RCL X   * 1ステップ分移動したX値を読み込む
20 1      * 円の内側かいなかチェックする値(1)をセット
21 X>Y ?    * 円の内側ならば
22 GTO "BB"  * ラベルBBへ行く
23 RCL T   * トータルポイント数
24 RCL P   * 円内部の点の数 (x^2 + Y^2)が1以下
25 STOP    *


26   LBL  "HH"  *  円内部の点の数を数えるサブルーチンへ行く(x^2 + Y^2)が1以下
27 1      *
28 STO +T   * 測定トータル数を+1
29 RCL X   *
30 X^2 * 現在のX座標値を2乗する
31 RCL Y   *
32 X^2     * 現在のY座標値を2乗する
33 +      * 現在のX座標値を2乗とY座標値の2乗を加算する
34 1       *
35 X<Y ?    * 結果が1より大きければ円の外なので何もせずにリターン
36 RTN     * 結果が1より大きければ円の外なので何もせずにリターン
37 1      *
38 STO +P   * 結果が1以下ならば円の内側なので円内部の点の数に1加算してもどる
39 RTN     *

使用した変数
X * X座標のポイント
Y   * Y座標のポイント
T   * トータルポイント数
P   * 円内部の点の数 (x^2 + Y^2)が1以下



結果A     100dig * 100dig = 10,000点の時
0.01ごとに0~1まで
円の内側の点  7,953
真四角の全点 10,000
円周率  ( 7,953 * 4 )  /  10,000   =  3.1812
*有効桁は2桁


結果B 1,000dig * 1,000dig = 1,000,000点の時
DM42 USB電源にて  8分55秒
0.001ごとに0~1まで
円の内側の点  786,338
真四角の全点 1,000,000
円周率  ( 786,338 * 4 ) / 1,000,000 = 3.14554
*有効桁は3桁


結果C 10,000dig * 10,000dig = 100,000,000点の時
DM42 USB電源にて  約15時間
0.0001ごとに0~1まで
円の内側の点  78,549,762
真四角の全点 100,000,000
円周率  ( 78,549,762 * 4 ) / 100,000,000 = 3.14199048
*有効桁は4桁

========


結果A サンプリング数 10,000点の時   3.1812
結果B サンプリング数 1,000,000点の時 3.14554
結果C サンプリング数 100,000,000点の時 3.14199048

乱数ではなく縦横規則正しいポイントならばサンプリング数に比例して精度が上がりますね。
しかしこれはまったくの遊びですね。高速のDM42を使って15時間もかけたのに有効数字4桁なんて。
DM42でUSB電源はいいですね、今までのように長時間でも電池代金を気にしなくていいのですから。 
これHP42Sでやったならば途中で電池切れをおこして答えは出ないでしょう。
15時間の750倍とは11250時間 これは469日 なんと1.28年  
まあ 電池がもったいし、一年もやっている人絶対いないでしょう。


ふと思ったのですが、乱数を使ったこのモンテカルロ法は、
最近はやりの選挙で行われている「出口調査」やNHKの世論調査と同じですね。
精度はせいぜい2桁ぐらいだけれど、少ないサンプリング数で大まかな動向を出せると言う事でしょう。


このHP電卓のRPN言語は、本当にアセンブラと同じですね。
コメントの書いてないリストは、自分で作った物でさえ後から見ると全く動作が解りませんでした。
これからは、ブログラムの一行ごとに真面目にコメントを書いていきましょう。

****************************************************************
つい先日雪が降っていたのに、もう庭に沢山の花が咲きだしました。
花は綺麗ですけど、地面の映りがうまくないですね。 どうしたらいいかな。
c0335218_07412113.jpg


白いチューリップ
c0335218_07414935.jpg


これなんだろう。

c0335218_07421112.jpg


これ スイセンですよね。
色や形 たくさんの種類があるみたいですね。
c0335218_07430123.jpg



c0335218_07433259.jpg


c0335218_07434999.jpg


タマネギ 300本くらい植えました。 みんな元気に育っています。
向こう側はニンニクです。 去年食べられなかったものを植えておいたら育ってきました。

c0335218_07441168.jpg


長ネギ

c0335218_07482767.jpg




電子工作ランキング

にほんブログ村 その他趣味ブログ 電子工作へ
にほんブログ村

by telmic-gunma | 2019-04-17 20:37 | HP電卓 | Comments(6)

DM42で乱数を遊ぶ

DM42になって計算が非常に高速になり、かつUSB外部電源を使用すれば、
電池の消耗を気にしないで済むというメリットがうまれました。
乱数を扱うと、どうしても計算量が大きくなりますが、今までのHP電卓の遅さに悩んでいたことが、
このDM42を使うとかなり改善されます。

c0335218_10083064.jpg

( データ 1 )
HP32Sで乱数を発生させました。
30分で約40000個 バラつきは、4%でした。

( データ 2 )
DM42(電池)で乱数を発生させました。
1分で約30000個 バラつきは、8%でした。

( データ 3 )
DM42 (USB外部電源)で乱数を発生させました。
10分で約1000000個 バラつきは、0.8%でした。


大まかに言ってサンプル数を30倍するとバラつきは 1/10になりました。
いつも思うのですが、CPUで乱数を発生させているなら、現在の状況を監視させて、乱数のバラつきを
自分で補正をかけるようにすればバラつきのない乱数が出来るはずです。
次はこの自分で補正をかけながら乱数を発生するソフトを作って見たいですね。
このDM42の高速性があればかなり面白いこと出来るとおもいます。




乱数精度のデータ ( 表示文字サイズが統一できずバラついてます)


( データ 1 )
HP32S 乱数の精度 (2017-10-31 HP電卓で遊ぶ=>パイの計算 より)

出力されたデータ (30分間測定)
変数名  データー範囲   出力回数
 A     0~1     3920
 B     1~2     3913
 C     2~3     4075
 D     3~4     3937
 E     4~5     3937
 F     5~6     3965
 G     6~7     3925
 H     7~8     4007
 I     8~9      4017
 J     9~10     3983

最大値  4075
最小値  3913
差    162

生データの合計  39677 
データの平均値  39677 / 10 = 3967.7
差 / 平均値   162 / 3867.7 = 0.040829
乱数の発生頻度のバラツキ  4.08%


**********************************************

DM42での乱数精度テストプログラム

*01 LBL "AA" ■ [PGM.FNC] LBL "AA" ENT 先頭ラベルをAAとする

*02 123.456                 乱数の種データ

*03 SEED ■ [PROB] SEED      乱数の種データを設定する
*04 CLRG ■ [CLEAR] CLRG        数値変数 00~99をクリアする

*05 LBL "BB" ■ [PGM.FNC] LBL "BB" ENT  ループ先頭ラベルをBBとする

*06 RAN ■ [PROB] RAN 乱数を出力する  0~1

*07 10                 10をセット

*08 ×                  乱数を10倍  0~ 10

*09 STO II                IIを配列ポインターとして乱数をセット

*10 1                  乱数カウンターに加算する数値

*11 STO . IND + II           ポインターで振り分けられた所に1を加算する

*12 GTO "BB"             ループの先頭 BBへ行く


注1、 STO II まだ未定義なら  STO ENT II ENT の手順で定義する。
注2、 ソフトを終了させるには 時計で時間を計り [ R/S ] を押して停止させる。


( データ 2 )

DM42(電池) 1分間

0~1 3120
1~2 3108
2~3 3182
3~4 3119
4~5 3163
5~6 3053
6~7 3094
7~8 3078
8~9 3309
9~10 3050

最大値  3309
最小値  3050
差    259

生データの合計  31276 

データの平均値計算  31276 / 10 = 3127.6

差 / 平均値   259 / 3127.6= 0.0828

乱数の発生頻度のバラツキ  8.28%



**********************************************


( データ 3 )
DM42 ( USB 外部電源 10分間 )

0~1 101804
1~2 101900
2~3 101896
3~4 102420
4~5 101843
5~6 102249
6~7 102119
7~8 102431
8~9 102341
9~10 101548

最大値  102431
最小値  101541
差    883

生データの合計  1020551 

データの平均値計算  1020551 / 10 = 102055.1

差 / 平均値   883 / 102055.1= 0.0086521

乱数の発生頻度のバラツキ  0.865%


これで終わりです。




by telmic-gunma | 2019-04-03 22:06 | HP電卓 | Comments(0)

DM42の消費電流を測定してみました。

プログラム実行時の電流が 5.3mA というのは大きいですが、動作スピードを考えればとても低いと思います。
USBから電源をもらっているときは、プログラム実行時でも電池の消費は6.7μA 一定なのは良いですね。
机のうえで使うのならば電池を気にしないでおまけに電池の3倍のスピードで使えるのですから。


測定は「三和計器」の PC5000を使いました。
c0335218_20215405.jpg


過去に測定したデータです。   「2016-11-11 HP電卓 消費電流比較してみました 」
HP15C,HP32S、HP32Sii,HP42Sなどこの時代の技術者は超真面目に仕事していたみたいです。
ブログなどで見かける「10年ぶりに出てきたので電源ONしたら動いた」というのは電源OFF時の消費電流が低いからでしょうね。

HP42S は使っているとすぐ電池が終わる感じでしたね。
c0335218_17433451.jpg



過去に測定したデータです。   「2016-12-2 HP電卓 消費電流比較してみました 2 」
HP35Sは 使いたいときは電池がない、という感じ。

c0335218_17432480.jpg


梅が咲くと急速に春が進むようですね。
まずは スイセン 綺麗ですね。   まだこれだけみたいですけれど。
黄色は大好きです、 わたしの自転車も黄色です。

c0335218_08503675.jpg


c0335218_08504405.jpg


c0335218_08505106.jpg



by telmic-gunma | 2019-03-30 08:57 | HP電卓 | Comments(2)