REALbasic かってに連載します(第4回)


   「for 〜 next」や「while 〜 wend」などのループにはいると、キーボードからの入力を受け付けなくなります。無限ループにはいると、強制終了しなければなりません。このためループ内には、いつでも「コマンド+ピリオド」でキャンセル出来るように。次の3行をつけ加えておきましょう。
  if usercancelled then
    exit
  end if

 第4回 - 「微分方程式でサインカーブを描く」クラリス編  -

 「 (d2x / dt2)=-kx の解はどうして Sin Cos型になるのか」と題して、グラフで考えると楽しい微分方程式の解を取り上げます。

 今回はREALbasicそのもののプログラムよりも、微分の意味を伝えたいと思いますので、クラリスワークスだけを使って微分方程式を解きグラフを描く説明をします。ここまでを前編としました。

 まず、今回取り上げる式です「(d2x / dt2)=-kx」 2階微分方程式と呼ばれています。この式を一目見て逃げ出したくなる方もたくさんいらっしゃるとは思いますがぜひしばらくつきあってください。
 それでは文字の説明から、xはx 軸上での位置、t はストップウォッチで計る時間を表します。kは単なる比例定数で数字の1とでも考えてください。
 この式の意味は家から(原点x=0から)遠い位置xまで離れれば離れるほど家の方向に戻ろうとする力が増してくるというホームシックの方程式です。
 ところで短い時間 dt [秒]の間に短い距離 dx [メートル] だけ進むとき速度 v [メートル/秒] は v=dx/dt で表され、この速度が dt [秒] の間に dv [メートル/秒] だけ増加するとき、加速度運動をしているといい、加速度αはα=dv/dt で表されます。(まとめるとα=dv/dt= d2x/dt2となる、つまり今回取り上げたはじめの式はα=-kx と簡単に表現できます。)
 dx/dtやdv/dtはグラフを描いたときの傾きを意味しています。つまりdx/dtは縦軸に x 、横軸に t をとったグラフの傾きを、dv/dtは縦軸にv、 横軸に t をとったグラフの傾きを表しています。
 もしこのグラフの傾きがわずかな時間内であれば一定であると考えると、これらのグラフは、紙と鉛筆があれは1点1点計算して描くことが出来ます。もちろん正確なグラフとは、ずれが出てきますが、このかなりいい加減な方法でもびっくりするほどの結果が出てきますのでお楽しみに。
 微分の説明用のグラフ。クラリスで描いたものを、グラフィックコンバーターでGIFにしたものです。
 さてグラフを描くためには出発点が必要ですね。これは勝手に決めればよいのでとりあえず、t = 0 のとき x = A 、v = 0 としてみます、このときαの出発点は -kAとなります。
 いよいよグラフです。
 運動を始めるそれぞれの点は v0 = 0 , x0 = A , α0 = -kx0 = -kA です。(A=10 , k=1, Δt=0.1 としてみるとv0 = 0 , x0 = 10 , α0 = -10)
 Δt だけ時間がたった後の各点 v1 , x1 , α1
  v1 = v0+(dv/dt) Δt = v00 Δt (v1 =0+(-10)*0.1=-1)
  x1 = x0+(dx/dt) Δt = x0+v1 Δt (x1 =10+(-1)*0.1=9.9)
  α1 = -k x1 (α1 = -1*9.9=-9.9)
 さらにΔt だけ時間がたった後の各点 v2 , x2 , α2
  v2 = v1+(dv/dt) Δt = v11 Δt (v2 =-1+(-9.9)*0.1=-1.99)
  x2 = x1+(dx/dt) Δt = x1+v2 Δt (x2 =9.9+(-1.99)*0.1=9.701)
  α2 = -k x2 (α2 = -1*9.701=-9.701)
 さらにΔt だけ時間がたった後の各点 v3 , x3 , α3
  v3 = v2+(dv/dt) Δt = v22 Δt
  x3 = x2+(dx/dt) Δt = x2+v3 Δt
  α3 = -k x3
 このような調子で各点を紙と鉛筆(電卓)を片手に計算していきます。
 時間さえかければ紙と鉛筆だけでこの微分方程式のグラフを描くことができることがわかります。それなりの楽しさはあるのですが(そんなもんどこが楽しい、、という声が聞こえそうですが)、電卓代わりに表計算ソフトが使えそうです。
 そこで何でもよいのですが、クラリスワークスを利用することにします。
 1行目には、t , v = v+αΔt , x = x+vΔt , α = -kx のタイトル。
 2行目には、時間 t , 速度 v , 位置 x , 加速度 α のタイトル。
 3行目には、0 , 0 , 10 , -10 の初期値( A=10 , k=1としました)。
 3行目の1列目から50列ほどドラッグして連続データーを選択して増加分を0.1とし、時間のデータを完成させる。
 4行目の2列目には =B3+D3*0.1 3列には =C3+B4*0.1 4列には =-1*C4 のように数式を書き込んで2列 3列 4列を3行目から50列ほどドラッグして下方向コピーで表の出来上がり。
 グラフは2行目の2列目から4列目の50行までドラッグしておいてから折れ線グラフを選択します。

 さて結果はいかがですか、うまくいくまで楽しんで下さい。
 クラリスはえらい!!ちゃんとグラフを描いてくれます。できあがりは三角関数のSin やCos型のグラフになりました。はじめてこのグラフが描けたときは感動しました、なぜかというと、ここまでの計算の途中には1度もSinやCosの関数式は使っていないからです。つまりはじめの2階微分方程式の解が確かにSinやCos型になることが確かめられたからです。それも、はじめから誤差がでるのを承知で正確ではない計算式をたてたのに、結果はSinやCos型に見えるグラフになったのです!!。
 今回は、ここまでにします。次回はREALbasicでプログラムしてみましょう。


今回の微分方程式のサンプルプログラムです
  今回クラリスワークス(4.0)で作ったサンプルの書類です28kバイト
          koko-@mx2.tiki.ne.jp  

このホームページのホストはです。 無料ホームページをどうぞ!