眠り姫問題 (パラドックス)
Sleeping Beauty problem
主人公は眠り姫
質問は、コインが表の確率
考えれば考えるほど確率が分からなくなる
パラドックス
この記事はリニューアルしました
https://ulprojectmail.blogspot.com/2021/12/n88-basicsleep.html
N88-BASICで眠り姫問題
眠り姫問題 (パラドックス)
Sleeping Beauty problem
主人公は眠り姫
質問は、コインが表の確率
考えれば考えるほど確率が分からなくなる
パラドックス
この記事はリニューアルしました
https://ulprojectmail.blogspot.com/2021/12/n88-basicsleep.html
N88-BASICで眠り姫問題
掛け算と足し算の順序
掛け算の順序
a × 2は
aが2個という意味で
2 × aは
2がa個という意味と思いがちですが
2 × aは
aが2個と考えても構いませんので
a × 2個と2個 × aは同じです
3×2 = 3+3 = 2+2+2
2×3 = 3+3 = 2+2+2です
2xは
x + xの事だと思い浮かべます
x・2も
x + xの事だと思い浮かべます
つまり2・x = x・2です
(2xなど、数字・文字の時は・を省略
しても良いことになっています
x2はx2と間違えるので使いません)
結論
3×2個=2個×3
a×2個=2個×a (=2a)なので
3が2個を
3×2と書こうが2×3と書こうが自由です
足し算の順序
リンゴ3個とミカン2個合わせて何個?
3+2 = 5
2+3 = 5
どちらも正解です
リンゴ3個 + ミカン2個は正解だが
ミカン2個 + リンゴ3個は間違い
なんて事はありません
どちらを先に書こうが自由です
余談
1あたり × いくつ分 = 全体
いくつ分 × 1あたり = 全体
どちらか一方で練習するのは自由ですが
どちらで書いても正しいです
後者を×にする事は
2a を 2個分 × a (= a + a)と
考えてはいけない事になります
2a は 2がa個分(= 2 + 2 + ...)としか
考えてはいけませんという事になります
そんなことはありません
2a = a + aと考えても問題ありません
2人の会話
A「2χ+3χはなぜ5χ?」
B「χが2個とχが3個合わせてχが5個」
A「2χは2がχ個じゃないの?」
B「2χはχが2個と考えても良い」
A「2χは2がχ個と考えないとダメと思い込んでた」
B「思い込まなくて良いよ」
掛け算と割り算の順序
単位を書けば分かり易くなる
と思いますので、例を示します
単位の括弧は見やすいと思ったので
付けました
問題1
1箱にアメ玉が8個入っている。
この箱が2箱あればアメ玉は
全部で何個か
8(個/箱) × 2(箱) = 16(個) 〇
または
2(箱) × 8(個/箱) = 16(個) 〇
どちらも正解です
どちらも間違ってはいません
問題2
16個のアメ玉を2箱に同じ数
ずつ分けると1箱当たり何個か
16(個) ÷ 2(箱) = 8(個/箱) 〇
または
2(箱) ÷ 16(個) = 1/8(箱/個) ×
(1/8は8分の1と思ってください)
どちらも1箱 : 8個という
同じ比を表している(互いに逆数の関係)
が、この問いは(個/箱)を答えよと
言っているので
後者は間違いとして良いと思います
8(個/箱)はこの場合8個と答えても良いと
思います
問題3
4(km/h)の速さで3時間歩くと
歩いた距離は何kmか
(時間はhourのhと書くとします)
4(km/h) × 3(h) = 12(km)
または
3(h) × 4(km/h) = 12(km)
どちらも正解です
問題4
12kmの道のりを3時間で歩くと
速さは何km/hか
12(km) ÷ 3(h) = 4(km/h)
問題5
12kmの道のりを3時間で歩くと
1km当たり何時間かかったか
3(h) ÷ 12(km) = 1/4(h/km)
この場合、1/4時間
と答えても良いと思います
問題6
塩化ナトリウム0.010molに水を加え
100mLにした水溶液のモル濃度(mol/L)を
答えよ
(1000mL/Lは
1L当たり1000mLまたは
1000mL : 1Lという事です)
(次の/は分数のつもりです)
100mL / 1000mL/L = 100/1000 L
0.010mol / (100/1000)L
= 0.010 × 1000 / 100 mol/L
= 0.10 mol/L
単位を付けると
100mL × 1000mL/L = 100000 mL2/L ???
となって、間違いに気付きやすいかも
余談ですが
2+2+2 = 2×3個 = 3個×2 = 6
3+3 = 2個×3 = 3×2個 = 6
どちらも2×3とも3×2とも表せます
BASICのGOTO文について
BASICのGOTO文について
思う事があります
CPUは機械語を実行しますが
機械語に1対1に対応しているのが
アセンブラです
アセンブラの制御命令は
条件分岐と分岐などで行われます
je jpなどCPUによって
書き方は色々ありますが
これをBASICで書くと
IF A = 0 GOTO *LABEL (IF A = 0 THEN *LABEL)
GOTO *LABEL
になります
つまり、GOTO文が無ければCPUを制御
出来ないという事になります
しかし、BASICにはGOTO文に変わる命令も
用意されいてます
それがFORやWHILEなどです
これらの命令のおかげでアセンブラよりも
分かり易いプログラムが書けます
分かり易さを考えて、GOTO文よりFORやWHILE
などの高級言語特有の命令を使用するよう
推奨されました
この後、GOTO文が悪者にされるようになりましたが
アセンブラのjpなどは批判されていません
これは、GOTO文がアセンブラのようにも
プログラムが書けるよう存在していた事が
忘れ去られていった結果だと思います
アセンブラのCALLはBASICではGOSUBです
この様にBASICはアセンブラに出来ることは
出来、さらに高級言語特有の制御命令も
使える仕様になっていました
よって、GOTOを悪者にすることはアセンブラや
CPUを悪者にしているのと同じ事だと思います
昔は、分かり易いプログラムを書きましょうと言う
意味でGOTO文は避けましょうと言っていたのが
いつのまにかGOTO文の存在自体が悪いように
言われるようになってきました
アセンブラやBASICは
書く人によって分かり易くも
スパゲッティにする事も出来ます
その後、初心者でもスパゲッティになりにくく
するように工夫したプログラミング言語が
でてきましたが、どれも最終的にはアセンブラ
(機械語)で動いていますので、結局は
BASICで言うGOTO文で動いている事に
なります
GOTO文は悪者ではありません
使い方ですね
N88-BASICで小惑星の軌道 (1回目 Apophis)
本日、2021.3.6(土)
小惑星アポフィスが地球に接近するそうです
と言っても月までの数十倍の距離だそうですが
詳しくはアポフィスで検索するといろいろ
出てきます
2068年に衝突する可能性が0ではないと
言われているそうです
1年前からの1年間の軌道を描画して見ました
青い軌跡が惑星、紫の軌跡が小惑星
水色の点が地球、赤色の点がアポフィスです
プログラムは
https://ameblo.jp/vlbasic/entry-12627629545.html
N88-BASICで惑星の軌道 (9回目)
を小惑星用に削って使用しています
式など詳しくは
https://ameblo.jp/vlbasic/entry-12623474486.html
N88-BASICで惑星の軌道 (1回目)
からの記事を見てください
アポフィスの軌道データは
JPL Small-Body Database Browser (nasa.gov)
を参照しました
データの扱いなどミスがあるかもしれませんので
自己責任で鑑賞して下さい
NL-BASICとnl30306.zip(ast001.bas)は
以下のリンクからダウンロードできます
Readme.txtを読んで遊んで下さい
(動画もあります)
下記リストをマウスで選択しCtrl+cでコピーし、
NL-BASICの画面でAlt+v(Ctrl+vではないので注意)
でプログラムを読込めます。
ast001.bas
1000 '----------------------------------------------------------------------
1010 ' N88-BASICで小惑星の軌道 (1回目 Apophis) by ULproject 2021.3
1020 '
1030 ' 画面下が平均春分点の方向(春分の日の地球から太陽への方向)
1040 ' 画面上で地球が太陽の真下のとき秋分の日近くになります。
1050 ' 黄道(地球の軌道)面の真上から見た軌道を表示しています。
1060 ' 遠近法を使用していないので遠くも同じ大きさになります。
1070 '
1080 ' テキスト表示のあるプログラムはCtrl+sで一時停止できます。
1090 ' NL-BASICではAlt+6で多少速くできます。
1100 '----------------------------------------------------------------------
1110 DEFDBL A-H, J, L-S, U-Z: DEFINT I,K: DEFSNG T
1120 '--- 関数,定数定義
1130 DEF FNT(A) = A * PI / 180
1140 PI = ATN(1) * 4
1150 PI2 = PI * 2
1160 '--- 画面消去
1170 SCREEN 3: CONSOLE ,,, 1: COLOR 7,,,, 2: CLS 3
1180 '--- Select
1190 INPUT "見る角度(90など) "; X1
1200 X1 = FNT(X1)
1210 CLS
1220 '--- 基本データ読込み
1230 READ R, DN
1240 DIM JD0(DN-1)
1250 FOR I=0 TO DN-1
1260 READ YY, MM, DD: GOSUB *DATE2JD: JD0(I) = JD
1270 NEXT
1280 READ TL, TS
1290 TL = TL - 1
1300 READ KN, K3
1310 DIM C(KN), D(KN), A(KN), E(KN), I(KN), OO(KN), O(KN), M0(KN), P(KN)
1320 DIM X(KN), Y(KN), B(KN), T(15), M(15), MM(15, KN)
1330 '--- 軌道データ読込み
1340 GM = FNT(270) '--- 平均春分点の方向(画面下)
1350 FOR K=1 TO KN
1360 READ C(K), D(K), A(K), E(K), I(K), OO(K), O(K), M0(K), P(K)
1370 A(K) = A(K) * R
1380 I(K) = FNT(I(K) )
1390 OO(K) = FNT(OO(K)) + GM
1400 O(K) = FNT(O(K) ) + GM
1410 M0(K) = FNT(M0(K))
1420 X(K) = 640 '--- 画面外
1430 Y(K) = 400
1440 NEXT
1450 '---
1460 P = P(K3)^2 / A(K3)^3 '--- T^2/a^3 = const.
1470 FOR K=1 TO KN
1480 GOSUB *I2MATRIX '--- i
1490 B(K) = 1
1500 IF P(K) = 0 THEN P(K) = SQR(A(K)^3 * P): B(K) = 8+3
1510 P(K) = P(K) * 365.25 '--- ユリウス年を日に変換
1520 T = JD0(0) - JD0(D(K))
1530 N = PI2 / P(K) '--- n:平均運動(ラジアン/日)
1540 M0(K) = M0(K) + N * T '--- M:平均近点角
1550 NEXT
1560 '--- 画面表示
1570 X = 320
1580 Y = 200
1590 WINDOW(-X, -Y)-(X-1, Y-1)
1600 LINE(-X, 0)-(X-1, 0), 1
1610 LINE(0, -Y)-(0, Y-1), 1
1620 LOCATE 36, 0: PRINT "春分(平均)";
1630 LOCATE 0, 12: PRINT "夏至(平均)";
1640 LOCATE 36, 23: PRINT "秋分(平均)";
1650 LOCATE 70, 12: PRINT "冬至(平均)";
1660 '--- 方向表示
1670 COLOR 4: LOCATE 0, 0: PRINT "春分点方向(平均)"
1680 COLOR 2: LOCATE 0, 1: PRINT "近日点方向(赤:惑星)"
1690 COLOR 1: LOCATE 0, 2: PRINT "近日点方向(青:小惑星等)"
1700 COLOR 6: LOCATE 0, 3: PRINT "昇交点方向(各色)"
1710 COLOR 5: LOCATE 0, 4: PRINT "地球(水色)"
1720 COLOR 7
1730 R = 190
1740 LINE(0, 0)-(R * COS(GM ), -R * SIN(GM )), 4
1750 FOR K=KN TO 1 STEP -1
1760 B = 2
1770 IF B(K) > 7 THEN B = 1
1780 R = A(K)
1790 X = R * COS(O(K))
1800 Y = R * SIN(O(K))
1810 Z = 0
1820 GOSUB *PRODUCT
1830 LINE(0, 0)-(X1, -Y1), C(K)
1840 R = A(K) * (1 - E(K))
1850 X = R * COS(OO(K))
1860 Y = R * SIN(OO(K))
1870 Z = 0
1880 GOSUB *PRODUCT
1890 LINE(0, 0)-(X1, -Y1), B
1900 NEXT
1910 CIRCLE(0, 0), 3, 2,,,,F
1920 '--- Planets (T=0 → 元期0)
1930 FOR T = 0 TO TL STEP TS '--- ts日ずつ
1940 JD = JD0(0) + INT(T): GOSUB *JD2DATE
1950 WW = INT(JD + 0.5)
1960 WW = WW - INT(WW / 7) * 7
1970 LOCATE 64, 10
1980 PRINT USING "####/##/##("; YY, MM, DD;
1990 PRINT MID$("月火水木金土日", WW*2+1, 2); ")"
2000 FOR K=1 TO KN
2010 C = C(K) : A = A(K): E = E(K): OO = OO(K): O = O(K)
2020 M0 = M0(K): P = P(K): X = X(K): Y = Y(K) : B = B(K)
2030 GOSUB *ORBIT
2040 X(K) = X: Y(K) = Y
2050 NEXT
2060 NEXT
2070 LOCATE 0, 13
2080 END
2090 '--- Orbit
2100 *ORBIT
2110 N = PI2 / P '--- n:平均運動(ラジアン/日)
2120 M = M0 + N * T '--- M:平均近点角
2130 M = M - FIX(M / PI2) * PI2
2140 GOSUB *NEWTON '--- u:離心近点角
2150 F = ATN(SQR((1+E)/(1-E)) * TAN(U / 2)) * 2 '--- f:真近点角
2160 R = A * (1 - E*E) / (1 + E * COS(F)) '--- r:動径
2170 CIRCLE(X, -Y), 1, B,,,, F
2180 X = R * COS(F + OO)
2190 Y = R * SIN(F + OO)
2200 Z = 0
2210 GOSUB *PRODUCT
2220 X = X1: Y = Y1
2230 CIRCLE(X, -Y), 1, C,,,, F
2240 RETURN
2250 '--- Newton method newton(M, e) = u
2260 *NEWTON
2270 U = M + E * SIN(M)
2280 FOR I=20 TO 1 STEP -1 '--- 最大繰返し回数
2290 F = U - E * SIN(U) - M '--- f(u)
2300 FD = 1 - E * COS(U) '--- f'(u)
2310 DU = F / FD
2320 U = U - DU
2330 IF ABS(DU) <= 1E-5 THEN I = 1 '--- 終了条件(誤差)
2340 NEXT
2350 RETURN
2360 '--- Date(YY/MM/DD) → JD
2370 *DATE2JD
2380 IF MM <= 2 THEN JM = MM + 13: JY = YY - 1 ELSE JM = MM + 1: JY = YY
2390 JD = INT(JY * 365.25) + INT(JM * 30.601) + DD + 1721117.5 - 122 - 1
2400 IF JD >= 2299160.5 THEN JD = JD -INT(JY/100) +INT(JY/400) + 12 - 10
2410 RETURN
2420 '--- JD → Date(YY/MM/DD)
2430 *JD2DATE
2440 DD = JD + 0.5
2450 JY = INT(DD)
2460 DD = DD - JY
2470 IF JY < 2299161 THEN *JD2DATE1
2480 JY = JY - (12 - 10)
2490 YY = (JY - 1721118 + 1) / 365.2425
2500 JY = JY + INT(YY / 100) - INT(YY / 400)
2510 *JD2DATE1
2520 JY = JY - 31 - 28
2530 YY = INT((JY - 0.001) / 365.25)
2540 JY = JY - INT(YY * 365.25) + 122
2550 MM = INT(JY / 30.601)
2560 DD = DD + JY - INT(MM * 30.601)
2570 IF MM > 13 THEN MM = MM - 13: YY = YY + 1 ELSE MM = MM - 1
2580 YY = YY - 4712
2590 RETURN
2600 '--- 軌道傾斜角i(k),o(k) → MM(0-15, k)
2610 *I2MATRIX
2620 GOSUB *IDENTITY
2630 VIEWMODE = 0
2640 D = I(K ): O = O(K ): X = COS(O): Y = SIN(O): Z = 0
2650 GOSUB *ROTATE '--- iを傾ける
2660 VIEWMODE = 1
2670 D = -I(K3): O = O(K3): X = COS(O): Y = SIN(O): Z = 0
2680 GOSUB *ROTATE '--- 見る場所を黄道面真上にする
2690 D = -X1: X = 1: Y = 0: Z = 0
2700 GOSUB *ROTATE '--- x軸回転
2710 VIEWMODE = 0
2720 FOR I=0 TO 15
2730 MM(I, K) = M(I)
2740 NEXT
2750 RETURN
2760 '----------------------------------------------------------------------
2770 ' 行列とベクトルの積(p1 = Mp) ULproject
2780 '
2790 ' inp MM(0-15, k), x, y, z
2800 ' out x1, y1, z1
2810 '----------------------------------------------------------------------
2820 *PRODUCT
2830 X1 = MM(0, K) * X + MM(4, K) * Y + MM( 8, K) * Z + MM(12, K)
2840 Y1 = MM(1, K) * X + MM(5, K) * Y + MM( 9, K) * Z + MM(13, K)
2850 Z1 = MM(2, K) * X + MM(6, K) * Y + MM(10, K) * Z + MM(14, K)
2860 RETURN
2870 '----------------------------------------------------------------------
2880 ' 行列の積(M = MT model mode , M = TM view mode) ULproject
2890 '
2900 ' inp T,M
2910 ' out M
2920 ' tmp m1,m2,m3,m4
2930 '----------------------------------------------------------------------
2940 *MULT
2950 IF VIEWMODE THEN *MULT.TM
2960 FOR IY=0 TO 3
2970 M1 = M(IY): M2 = M(IY+4): M3 = M(IY+8): M4 = M(IY+12)
2980 FOR IX=0 TO 12 STEP 4
2990 M(IX+IY) = M1*T(IX) + M2*T(IX+1) + M3*T(IX+2) + M4*T(IX+3)
3000 NEXT
3010 NEXT
3020 RETURN
3030 *MULT.TM
3040 FOR IX=0 TO 12 STEP 4
3050 M1 = M(IX): M2 = M(IX+1): M3 = M(IX+2): M4 = M(IX+3)
3060 FOR IY=0 TO 3
3070 M(IX+IY) = T(IY)*M1 + T(IY+4)*M2 + T(IY+8)*M3 + T(IY+12)*M4
3080 NEXT
3090 NEXT
3100 RETURN
3110 '----------------------------------------------------------------------
3120 ' 単位行列 ULproject
3130 '
3140 ' out M
3150 '----------------------------------------------------------------------
3160 *IDENTITY
3170 M(0) = 1: M(4) = 0: M( 8) = 0: M(12) = 0
3180 M(1) = 0: M(5) = 1: M( 9) = 0: M(13) = 0
3190 M(2) = 0: M(6) = 0: M(10) = 1: M(14) = 0
3200 M(3) = 0: M(7) = 0: M(11) = 0: M(15) = 1
3210 RETURN
3220 '----------------------------------------------------------------------
3230 ' 並進行列 ULproject
3240 '
3250 ' inp x, y, z
3260 ' out T,M
3270 '----------------------------------------------------------------------
3280 *TRANSLATE
3290 T(0) = 1: T(4) = 0: T( 8) = 0: T(12) = X
3300 T(1) = 0: T(5) = 1: T( 9) = 0: T(13) = Y
3310 T(2) = 0: T(6) = 0: T(10) = 1: T(14) = Z
3320 T(3) = 0: T(7) = 0: T(11) = 0: T(15) = 1
3330 GOSUB *MULT
3340 RETURN
3350 '----------------------------------------------------------------------
3360 ' 回転行列 ULproject
3370 '
3380 ' inp d(rad), x, y, z
3390 ' out T,M
3400 ' tmp rr,tt,ss,nn,n1,n2,n3
3410 '----------------------------------------------------------------------
3420 *ROTATE
3430 RR = SQR(X*X + Y*Y + Z*Z)
3440 N1 = X / RR
3450 N2 = Y / RR
3460 N3 = Z / RR
3470 SS = COS(D)
3480 RR = 1.0 - SS
3490 T( 0) = N1 * N1 * RR + SS
3500 T( 5) = N2 * N2 * RR + SS
3510 T(10) = N3 * N3 * RR + SS
3520 SS = SIN(D)
3530 TT = N1 * N2 * RR: NN = N3 * SS: T(4) = TT - NN: T(1) = TT + NN
3540 TT = N1 * N3 * RR: NN = N2 * SS: T(2) = TT - NN: T(8) = TT + NN
3550 TT = N2 * N3 * RR: NN = N1 * SS: T(9) = TT - NN: T(6) = TT + NN
3560 T(12) = 0: T(13) = 0: T(14) = 0: T(15) = 1
3570 T( 3) = 0: T( 7) = 0: T(11) = 0
3580 GOSUB *MULT
3590 RETURN
3600 '----------------------------------------------------------------------
3610 '- 1AU = 1.495978707(億km)
3620 '- c:色(0黒,1青,2赤,3紫,4緑,5水,6黄,7白,+8+暗,8灰+暗)
3630 '- 軌道長半径a(AU), 離心率e
3640 '- 近日点黄経(Ω+ω近日点引数)(゚), 昇交点黄経Ω(゚)(平均春分点基準)
3650 '- 元期平均近点離角Mo(゚)
3660 '- 周期P(ユリウス年)(=365.25日)
3670 '----------------------------------------------------------------------
3680 '- ~火星
3690 '----------------------------------------------------------------------
3700 DATA 100 '--- dot/AU(1AU = ?dot)
3710 DATA 4 '--- 元期(軌道要素を決めた日)数
3720 DATA 2020, 3, 6.0 '--- 元期d=0(表示開始日)
3730 DATA 2020,12,17.0 '--- 元期d=1(Mo惑星)
3740 DATA 2019, 4,27.0 '--- 元期d=2(Mo小惑星)
3750 DATA 2020,12,17.0 '--- 元期d=3(Mo小惑星)
3760 DATA 366, 1 '--- 表示期間(日),経過時間(日)
3770 DATA 7, 3 '--- 惑星数, 地球番号
3780 '--- c,d, a , e , i , Ω+ω , Ω, , Mo , P
3790 DATA 7,1, 0.3871, 0.2056, 7.004, 77.489, 48.305,183.661, 0.24085 '水
3800 DATA 6,1, 0.7233, 0.0068, 3.394,131.565, 76.622, 75.525, 0.61520 '金
3810 DATA 5,1, 1.0000, 0.0167, 0.003,103.006,174.823,342.791, 1.00002 '地
3820 DATA 3,1, 1.5237, 0.0934, 1.848,336.153, 49.496, 71.013, 1.88085 '火
3830 '--- c,d, a , e , i , Ω+ω , Ω , Mo , P
3840 DATA 14 ,2, 1.190, 0.190, 5.9,463.1 ,251.6,249.8 , 0 '竜宮
3850 DATA 12 ,2, 1.324, 0.280, 1.6,231.9 , 69.1,288.9 , 0 '糸川
3860 DATA 10 ,3, 0.923, 0.192, 3.3,330.6 ,204.0,110.6 , 0 'Apophis