Hatena::Groupsicm

naoya_t@SICM(べ、べつにあなたのためじゃないんだからね) RSSフィード

 | 

2009-01-09

1.4 作用の計算 /Computing Actions

| 00:50 | 1.4 作用の計算 /Computing Actions - naoya_t@SICM(べ、べつにあなたのためじゃないんだからね) を含むブックマーク はてなブックマーク - 1.4 作用の計算 /Computing Actions - naoya_t@SICM(べ、べつにあなたのためじゃないんだからね) 1.4 作用の計算 /Computing Actions - naoya_t@SICM(べ、べつにあなたのためじゃないんだからね) のブックマークコメント

上述のアイデアを説明するために、そして計算機プログラムとしてその定式化を導入するために、我々は最も単純な力学系を考える -- 三次元空間で運動する1つの自由粒子オイラーラグランジュは、自由粒子が実際にとった経路上での運動エネルギーの時間積分は、同じ両端をもつ他のいかなる経路上でとった同様の積分よりも小さいことを発見した:ラグランジュ関数運動エネルギーになるようにとる場合、自由粒子は停留作用の法則に従って運動する。質量m,速度\vec vの粒子の運動エネルギー\frac12mv^2である。ここでvは\vec vの大きさ。このケースでは、一般化座標を通常の直交座標になるように選択することができる。

オイラーラグランジュに従うなら、この自由粒子ラグランジュ関数*1

L(t,x,v)=\frac12m(v\cdot v)

ここで仮引数xは与えられた直交座標系に対する位置成分のタプルを、仮引数vは速度成分のタプルをそれぞれ指定する*2

この公式は手続き

(define ((L-free-particle mass) local)
  (let ((v (velocity local)))
    (* 1/2 mass (dot-product v v))))

として表現することができる。

この定義は、L-free-particle が質量massを引数として取り、「局所タプル local*3 を取り、velocity手続きを用いて一般化速度を抽出し、その速度を用いてラグランジュ関数の値を算出する手続き」を返す手続きであることを示す。

時刻を位置成分にマッピングする座標経路関数をqとすると*4

q(t)=(x(t),y(t),z(t))

この定義は*5

(define q
  (up (literal-function 'x)
      (literal-function 'y)
      (literal-function 'z)))

ここで literal-function は、与えられたシンボル名(symbolic name)以外に既知のプロパティを持たない1引数関数を表す手続きをつくる。シンボルqは、実引数1つ(time)をとり、その時点における座標を表す3成分のタプルを生成する手続きを指すようになる。例えば、この手続きを時刻シンボル t について以下のように評価することができる:

(print-expression (q 't))
→ (up (x t) (y t) (z t))

手続き print-expression は式の印字可能な形を作り、印字前に式を簡約する。

座標経路の微分 Dq は、時刻を速度成分にマッピングする関数である:

Dq(t)=(Dx(t),Dy(t),Dz(t))

我々は、ある関数微分を作って使うことができる*6。例えば、こう書くことができる:

(print-expression ((D q) 't))
→ (up ((D x) t) ((D y) t) ((D z) t))

関数 \Gamma は座標経路をとり、局所タプル (t,q(t),Dq(t),...) を与える時刻の関数を返す。これを手続きGammaとして実装する。Gammaはこのような事を行う:

(print-expression ((Gamma q) 't))
→ (up t
    (up (x t) (y t) (z t))
    (up ((D x) t) ((D y) t) ((D z) t)))

従って合成関数 L\circ\Gamma は、経路上のこの時点でのラグランジュ関数の値を返す時刻の関数である:*7

(print-expression 
  ((compose (L-free-particle 'm) (Gamma q)) 't))
→ (+ (* 1/2 m (expt ((D x) t) 2))
   (* 1/2 m (expt ((D y) t) 2))
   (* 1/2 m (expt ((D z) t) 2)))

手続き show-expression は、簡約された式を伝統的な中置形式(infix form)にしてその結果を表示する点以外はprint-expression と同様である*8。我々はこの本で囲み式を作るのにこの表示方法を使っている。手続き show-expressionprint-expression が返すような前置形式も生成するが、我々は通常これは表示しない*9

(show-expression
 ((compose (L-free-particle 'm) (Gamma q)) 't))

\frac12m(Dx(t))^2+\frac12m(Dy(t))^2+\frac12m(Dz(t))^2

式(1.11)より、我々は時刻t_1からt_2までのラグランジュ作用(積分)を算出できる:

(define (Lagrangian-action L q t1 t2)
  (definite-integral (compose L (Gamma q)) t1 t2))

Lagrangian-action引数としてラグランジュ関数を算出する手続きL、座標経路を算出する手続きq、開始/終了時刻 t1, t2 をとる。ここで使われている definiteintegral は、1つの関数と区間の両端 t1, t2引数とし、関数の区間t1〜t2における定積分を算出する*10

Lagrangian-action の定義は特定の座標セットにも、配置空間の次元にさえも依存しない点に留意されたし。ラグランジュ関数および座標経路の座標表現から作用を算出する方法は座標系に依存しない。

これで我々は経路沿いの自由粒子について作用を計算することができる。例えば、直線 t (4t+7,3t+5,2t+1)に沿って等速運動を行う粒子を考える*11。この経路は手続き

(define (test-path t)
  (up (+ (* 4 t) 7)
      (+ (* 3 t) 5)
      (+ (* 2 t) 1)))

で表される。質量3の粒子について、t=0 から t=10 までの作用を以下のように得る:*12

(Lagrangian-action (L-free-particle 3.0) test-path 0.0 10.0)
→ 435.

練習1.4 ラグランジュ作用 /Lagrangian actions

自由粒子について、適切なラグランジュ関数*13

L(t,x,v)=\frac12mv^2

である。

xを自由粒子の等速直線経路で、x_a=x(t_a) かつ x_b=x(t_b) とする。解経路上の作用が

\frac{m}2\frac{(x_b-x_a)^2}{t_b-t_a}

であることを示せ。

小作用経路 /Paths of minimum action

我々は既に、自由粒子の実際の経路が(等速)直線運動であることを知っている。

オイラーラグランジュによると、その作用は直線状のテスト経路沿いの方が隣接する経路沿いよりも小さくなる。qを作用 S\[q\](t_1,t_2) をもつ直線テスト経路とする。q+\epsilon^\eta を、経路の変分\etaに実引数\epsilonを掛けたものをqに加えることで得た隣接経路とする*14。変更された経路上の作用はS\[q+\epsilon^\eta\](t_1,t_2) である。オイラーラグランジュは、経路の両端で0となる任意の\etaおよび小さな非ゼロ値\epsilon についてS\[q+\epsilon^\eta\](t_1,t_2) > S\[q\](t_1,t_2) が成り立つことを発見した。

経路の両端t=t_1およびt=t_2でゼロになるようなテスト関数のいくらかの値を足してテスト経路を変えながらこれを数値的に検証しよう。

両端でゼロになる関数\etaを作るには、十分うまく動作する関数\nuがあれば、\eta(t)=(t-t_1)(t-t_2)\nu(t)のようにすればよい。これは

(define ((make-eta nu t1 t2) t)
  (* (- t t1) (- t t2) (nu t)))

と実装できる。

これは、与えられた経路に変更を加えた経路上での自由粒子の作用を\epsilon関数として算出するのに利用できる:*15

(define ((varied-free-particle-action mass q nu t1 t2) epsilon)
  (let ((eta (make-eta nu t1 t2)))
    (Lagrangian-action (L-free-particle mass)
                       (+ q (* epsilon eta))
                       t1
                       t2)))

\nu(t)=(sin\,t,cos\,t,t^2)\epsilon=0.001で変更を加えた経路での作用は、予想される通り、テスト経路での作用より大きい:

((varied-free-particle-action 3.0 test-path 
                              (up sin cos square)
                              0.0 10.0)
 0.001)
→ 436.29121428571153

作用が最小になる\epsilonの値を数値的に算出することができる。例えば、-2から1の間で探してみる:*16

(minimize
 (varied-free-particle-action 3.0 test-path 
                              (up sin cos square) 
                              0.0 10.0)
 -2.0 1.0)
→ (-1.5987211554602254e-14 435.0000000000237 5)

期待どおりの結果だ -- \epsilonの最適値はゼロであり*17、作用の最小値は直線経路に沿った経路である。

作用を最小化する軌道を探す /Finding trajectories that minimize the action

与えられた軌道が実現可能なものか決めるのに我々は変分原理(variational principle)を用いてきた。我々は変分原理を軌道の検出にも用いることができる。有限個の引数によって特定された軌道群を与えられたとして、作用を最小化する軌道を探す事により、群に含まれる軌道のなかで実際の軌道を最もよく近似するものを引数空間から探し出すことができる。よい近似関数群を選ぶことで、実際の軌道に任意に近づくことができる*18

両端を固定したパラメトリックな経路をつくる1つの方法は、経路の両端といくつかの中間点を通る多項式を用いることである。中間点の位置を変えることで経路も変わる;変更された経路の引数は中間点の座標である。make-path手続きが ラグランジュ補間多項式を用いてそのような経路を構築する*19。手続き make-path は5つの引数で呼ばれる: (make-path t0 q0 t1 q1 qs), ここで q0q1 は経路の両端, t0t1 は対応する時刻、そしてqs は中間点のリストである。

パラメトリックな経路を指定したので、これでパラメトリックな作用が構築できる。これは単にパラメトリックな経路に沿って算出された作用である:

(define ((parametric-path-action Lagrangian t0 q0 t1 q1) qs)
  (let ((path (make-path t0 q0 t1 q1 qs)))
    (Lagrangian-action Lagrangian path t0 t1)))

作用を最小化する引数を探すことで、近似解経路を発見することができる。この最小化は、お決まりの多次元最小化手続きで行う:*20

(define (find-path Lagrangian t0 q0 t1 q1 n)
  (let ((initial-qs (linear-interpolants q0 q1 n)))
    (let ((minimizing-qs
           (multidimensional-minimize
            (parametric-path-action Lagrangian t0 q0 t1 q1)
            initial-qs)))
      (make-path t0 q0 t1 q1 minimizing-qs))))

手続き multidimensional-minimize は、引数として最小化したい関数(この場合、作用)を計算する手続き(この場合、parametricpathactionへの呼出しの値)と、初期推定値をとる。ここでは両端点を結ぶ直線上に等間隔にとった点を初期設定値として選択し、linear-interpolants で計算する。

この戦略の使い方を説明するために、ラグランジュ関数*21

L(t,q,v)=\frac12mv^2-\frac12kq^2

と、質量m, ばね定数k を使って調和振動子(振り子)の軌道を探してみよう。このラグランジュ関数

(define ((L-harmonic m k) local)
  (let ((q (coordinate local)) 
        (v (velocity local)))
    (- (* 1/2 m (square v)) (* 1/2 k (square q)))))

と実装される。

調和振動子がm=1,k=1でq(0)=1とq(π/2)の間で取る近似経路が1つ見つかる:*22

(define q (find-path (L-harmonic 1.0 1.0) 0. 1. :pi/2 0. 3))

我々は、m=1,k=1におけるこの調和振動子の軌道が

q(t)=A cos(t+\phi)

であることを知っている。ここで振幅Aと位相\phiは初期条件によって決定される。選択した両端点において、解はq(t)=cos(t)である。近似経路は区間0〜π/2での余弦(cos)の近似になるはずである。図1.1はこのプロセスによって生成される多項近似における誤差を示している。中間点3つによるこの近似における最大誤差は1.7\times10^{-4}未満である。近似における誤差は、期待どおり、中間点の数が増えれば減少することが確認できる。中間点4つの場合で1/15ほどになる。

http://mitpress.mit.edu/sicm/chap1-Z-G-32.gif

図1.1:最小作用による多項近似と調和振動子の実際の軌道の差。横軸が時刻、縦軸が誤差。

  • abscissa [æbsísə]: 横座標
  • ordinate : 縦座標

問題1.5 Solution process

作用が計算される度に経路をプロットするように手続きparametric-path-actionに手を加えることで、最小化の進み具合を観察できる。以下を試されたい:

(define win2 (frame 0. :pi/2 0. 1.2))

(define ((parametric-path-action Lagrangian t0 q0 t1 q1) 
         intermediate-qs)
    (let ((path (make-path t0 q0 t1 q1 intermediate-qs)))
      ;; 経路を画面表示
      (graphics-clear win2)
      (plot-function win2 path t0 t1 (/ (- t1 t0) 100))
      ;; 作用を計算
      (Lagrangian-action Lagrangian path t0 t1)))

(find-path (L-harmonic 1. 1.) 0. 1. :pi/2 0. 2)

問題1.6 作用を最小化する /Minimizing action

我々が、ある不可能な問題について、作用を最小化することで経路を得ようとしているとしよう。例えば、1つの自由粒子について、粒子が自由であるということと矛盾するような速度と位置の条件を両端に設定するとしよう。この形式(formalism)はこのような不愉快な攻撃から自らを守るだろうか?これをプログラムして何が起こるか見てみるのは新しい発見になるだろう。

*1:26

*2:27

*3:28

*4:29

*5:30

*6:31

*7:32

*8:33

*9:34

*10:35

*11:36

*12:37

*13:38

*14:39

*15:40

*16:41

*17:42

*18:43

*19:44

*20:45

*21:46

*22:47

 |