振り子とベッセル関数
5.振り子
100 rem furiko 97.5.18
110 graphics 0
120 graphics window 400,400
130 dt = 0.01
140 l = 20 : s = 1.1
150 g = 9.8
160 print l,s,dt
170 for i = 1 to 5000
180 t = t+dt
190 ds = ss*dt
200 s = s+ds
210 dss = -l/g*sin(s)*dt
220 ss = ss+dss
230 x = l*sin(s)
240 y = l*cos(s)
250 rem print t,x,y
260 graphics color 100-i*0.01,0,i*0.05
270 graphics moveto 10*x+200,10*y+200
280 graphics lineto 200,0
290 graphics moveto 10*x+200,10*y+200
300 graphics circle 30
310 for k = 1 to 9000 : next k
320 next i
330 end
解説)
振り子を描くプログラムです。微分方程式を解くのに極めて初歩的な方法でやっています。
dtが時間です。この大きさを変えることにより振動する速さが変わります。
grapphic circle 30で30ドットの大きさの円を描いています。
for .....nextの間が段落ちしているのは、自分でスペースを挿入しているためです。ハイパーカードと違い、自動的になりません。このために若干遅くなるのですが、見やすくするためにやむを得ません。
310行目は時間調整です。
錘りの円を描かない時は、アプリが使用するメモリーが少なすぎるときです。アプリの使
用するメモリーの大きさを大きくして下さい。私は6000kにしています。
6.ベッセル関数
100 rem bessel
110 graphics 0
120 graphics window 500,300
130 rem
140 for i = 1 to 5
145 print "Bessel Function"
150 dz = 0.05
160 for n = 0 to 8
170 for delta = 0 to 10 step 0.1
180 j = 0
190 for z = 0 to pi step dz
200 j = j+cos(delta*sin(z)-n*z)*dz
210 next z
220 j = j/pi
230 if delta = 0 then graphics moveto 40*delta+50,150-j*100 : print "N=";n,"J=";j
240 rem print j
250 graphics lineto 40*delta+50,150-100*j
260 next delta
270 next n
280 for k = 1 to 6000000 : next k
290 cls
300 next i
310 end
解説)
ベッセル関数を描くプログラムです。ベッセル関数については、その手の本を見て下さい。
私はFM変調の時に初めてみました。
1回描いただけでは寂しいので5回くり返しています。(140と300行目がその関係です。)
この関数を描いてみて、昔、私が学校にいた頃にパソコンが使えれば(手元にあれば)、
もっとよく理解できたのにと思いました。
for....nextが何段にもなっているため、段落ちもいっぱいあります。