振り子とベッセル関数


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が何段にもなっているため、段落ちもいっぱいあります。

戻る