第1章 放物運動


一様重力場での質点の2次元平面内の運動を計算しましょう。 質点の質量mは1kgとし、 初期条件は位置qが原点(qx=0,qy=0)単位は[m]、 運動量pが(px=1,py=2)単位は[kgm/s]とします。 この運動方程式は

(1-1)

であり、この解は簡単に解析的に求められます。解析的に求まるとは、 要するに紙と鉛筆で式を変形して、解の数式を書き表すことができると いうことです。しかし、このような解析的な作業はあえてせずに、 コンピュータにより数値的に解の値を計算することにします。 この意義の深さはすぐにわかるでしょう。

(1-1)式のqの2階の微分方程式よりも 次式のq,pの1階の連立微分方程式の方が微分が簡単で計算も簡単です。

(1-2)

この式の右辺に時刻 t=0 での値、つまり初期条件の値を入れると 時刻 t=0 でのq(0),p(0)の時間変化を表す1階微係数になります。 非常に短い時間 dT の間でのq,pの時間変化のテンポは一定であると 近似することができます。つまりq(dT),p(dT)を次式で近似するのです。

(1-3)

この変化分を表す式は任意の時刻においてそのまま使えます。 q(0),p(0)からq(dT),p(dT)を計算して、次に q(dT),p(dT)からq(2dT),p(2dT)を計算して、さらに同様に 次々と先の時間でのq(t),p(t)をこの方法により計算することができます。 これで微分方程式を数値的に解くことになるのです。

(1-3)式は t=0 まわりでのq(dT),p(dT)の Taylar展開で dTの2次以上の 項を完全に無視した非常に粗い近似です。 このように、dTの1次の項しか考えない近似式で微分方程式を 数値的に解くこと方法をEuler(オイラー)法と呼びます。

プログラムでは(1-3)式は次のようになります。

    qx += px/M*dT;
    qy += py/M*dT;
    px += M*0*dT;
    py += -M*G*dT;
つまり変化分を足しあわせるわけです。

質点が地面より上にある間の軌跡を描くことにしましょう。 次のようになります。

ソースのdownload

//=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*
//   Program project
//=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*

#include <stdio.h>
#include "nxgraph.h"

//---- physical setting
#define G          (9.80665)
#define M          (1.0)
#define dT         (1.0/256)

//---- graphic setting
#define WIN_WIDTH  (256)
#define WIN_HEIGHT (256)

//---- main function
int main(void)
{
  NXOpenWindow("Projection Motion", WIN_WIDTH, WIN_HEIGHT );

  double qx=0.0, qy=0.0;
  double px=1.0, py=2.0;

  do{
    NXDrawPoint( (int)(512*qx), WIN_HEIGHT-(int)(512*qy) );

    qx += px/M*dT;
    qy += py/M*dT;
    px += M*0*dT;
    py += -M*G*dT;
  }while( qy > 0.0 );

  XEvent ev;
  NXCheckEvent( NX_WAIT, ev );

  return(0);
}

短い時間幅 dT は256分の1秒としました。do whileループで 位置のy座標 qy が正の間ループを回ることにしています。 位置のプロットの際には(qx,qy)の値は非常に小さいので適当に 拡大して、さらにy軸がwindowでは上下逆なので、それにあわせて変換して からプロットします。 ループを抜けた後はプログラムはwindowがマウスかキーで叩かれるまで 停止します。

放物運動のプログラムはこれだけでできあがりです。 この応用として次のプログラムを作ってみてください。

  • 空気抵抗を考慮した放物運動
    速度に比例して逆向きの力を働かせるわけです。軌跡はどう変わるでしょうか。
  • 風が吹く中での放物運動
    空気抵抗を考慮した上で質点と風との相対運動を考えます。 強い向かい風では質点は投げられたところより後ろに落ちるでしょう。
  • 地面で跳ね返す。
    ボールの運動のように適当な跳ね返り係数で地面で跳ね返させます。 地面との衝突をプログラムで判定する方法や跳ね返り直後の 位置、運動量の設定には少々考察が必要です。
  • 放物運動もこのくらいになると紙と鉛筆だけは簡単にはわからなくなります。 しかしコンピュータプログラムによる数値計算ではそれは意図も簡単に 計算できることがわかります。


  • 第2章 ケプラー運動
  • 目次
    Copyright(C) by Naoki Watanabe. Oct 21st, 1995.
    渡辺尚貴 naoki@cms.phys.s.u-tokyo.ac.jp