Hatena::Groupsicm

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

2009-01-02

Chapter 8 - Appendix: 記法についての解説 / Our Notation

| 22:00 | Chapter 8 - Appendix: 記法についての解説 / Our Notation - naoya_t@SICM(べ、べつにあなたのためじゃないんだからね) を含むブックマーク はてなブックマーク - Chapter 8 - Appendix: 記法についての解説 / Our Notation - naoya_t@SICM(べ、べつにあなたのためじゃないんだからね) Chapter 8 - Appendix: 記法についての解説 / Our Notation - naoya_t@SICM(べ、べつにあなたのためじゃないんだからね) のブックマークコメント

1章に入る前に、記法についての解説(8章Appendix)にちゃんと目を通しておこうと思う。

我々は、SpivakがCalculus on Manifoldsにおいて用いた記法に近い関数的な数学記法を採用する。

関数記法を使うことで従来の数学記法にあるあいまいさの多くを回避することができる;従来記法のあいまいさは古典力学におけるクリアな推論の妨げになる。関数記法は、特定の引数に適用する際に関数とその関数の値とを丁寧に区別する。関数記法では数式は一義的であり、自己完結している。

我々は、加算・乗算のような基本的な算術演算を多種多様な数学的な型に拡張したジェネリックな算術を採用する。従って例えば加算演算子 + は数値、数値タプル、行列、関数etc.に適用することができる。ジェネリックな算術は 数学オブジェクトの操作に使われるcommon informal practiceを形式化する。

分子群の全直交座標、のようなaggregate quantitiesを、component partsを明示的に操作したりすることなく

操作したくなることが時々ある。テンソル算術はaggregate objectの従来の操作法を提供してくれる:添字がpartsをラベルする;和の規約(summation convention)のような規約が添字操作のために導入される。

我々は、aggregate quantitiesの操作のための代替的手段として、添字でpartsをラベリングしなくてもよいタプル算術を導入する。タプル算術はテンソル算術にインスパイアされたものだがより一般的である:タプルの各コンポーネントのサイズや型が全て同じである必要がない。

数学記法コンピュータ言語 Scheme の式と1対1で対応する。Schemeはλ算術に基づいており、関数の操作を直接的にサポートしている。Schemeの簡易なイントロダクションがAppendixにあるので見るとよい。

数学記法Schemeとの対応関係は、数式が一義的かつ自己完結してることを要求する。Scheme数学演繹(推論)の確認において即時的フィードバックを提供するとともに、系(system)の挙動の調査を手助けしてくれる。

関数 / Functions

関数 f に引数 x を与えた値は f(x) と書かれる。式 f(x) は与えられた引数 x における関数の値を表す;関数そのものを表したい場合には単に f と書く。関数は複数の引数をとりうる。例えば、与えられた平面上の2点の直交座標から2点間のユークリッド距離を求める関数を考えてみよう:

d(x_1,y_1,x_2,y_2)=\sqrt{(x_2-x_1)^2+(y_2-y_1)^2}

Schemeではこう書ける:

(define (d x1 y1 x2 y2)
  (sqrt (+ (square (- x2 x1)) (square (- y2 y1)))))

ある関数の値域が別の関数の定義域に重なる場合、その2関数は合成することができる。関数の合成は、ある関数の出力を別の関数の入力に渡すことで構築される。我々は2関数の合成を演算子 o を用いて

(f\circ g):x\mapsto(f\circ g)(x)=f(g(x))

のように記す。

与えられた引数正弦(sin)の三乗(cube)を計算する手続き h は、cube手続きとsin手続きを合成することで定義できる:

(define h (compose cube sin))

(h 2)
→ .7518269446689928

これは以下と同等である:

(cube (sin 2))
→ .7518269446689928

算術は関数の操作にまで拡張される:通常の数学演算関数にも適用できる。

例として加算や乗算がある;ある2つの関数が同種の引数をとり、かつ値が加算(もしくは乗算)可能な場合、それらの関数を足したり掛け合わせたりすることが可能である:

(f+g)(x)=f(x)+g(x),

(fg)(x)=f(x)g(x)

引数の三乗(cube)を 引数正弦(sin)と掛け合わせる手続き g は以下のようになる:

(define g (* cube sin))

(g 2)
→ 7.274379414605454

(* (cube 2) (sin 2))
→ 7.274379414605454

(* 手続き 手続き) みたいなのは元のSchemeにはないよね。

Symbolic values

未知の、あるいは不完全に特定された数学オブジェクトを表す記号の使用を従来の数学記法におけるのと同様に許すよう算術を拡張する。これらの記号はあたかも既知の型の値をもっているかのように操作される。デフォルトではSchemeの記号は実数値を表すものと見なされる。従って式 'a は不特定の実数値を表すSchemeの記号リテラルである:

(print-expression
 ((compose cube sin) 'a))
→ (expt (sin a) 3)

print-expression手続きは式を簡略化し、型タグを除去し、可読な形式で表示する。三角恒等式(trigonometric identity*1 )の検証にsimplifierを使うことができる:

(print-expression 
  ((- (+ (square sin) (square cos)) 1) 'a))
→ 0

symbolic numbersが操作可能だと便利なのと同様、symbolic functionが操作可能だと便利だ。

literal-function手続きは、自身の名前以外のプロパティを持たない関数として振る舞う手続きを作る。

デフォルトでは、リテラル関数は実引数を1つ取り実数値を1つ返すよう定義される。例えば、関数 f : R → R を使いたいとしよう:

(print-expression 
  ((literal-function 'f) 'x))
→ (f x)

(print-expression 
  ((compose (literal-function 'f) (literal-function 'g)) 'x))
→ (f (g x))

構造化引数を複数とり構造化値を返すリテラル関数も作ることができる。例えば実引数を2つ取り実数値を1つ返すリテラル関数 g (g : R × R → R) を表すにはこう書けばよい:

(define g (literal-function 'g (-> (X Real Real) Real)))

(print-expression (g 'x 'y))
→ (g x y)

このようなリテラル関数は、同じ型の明示的な関数が使える場所であればどこでも使用可能である。

引数の数や型、返り値の型などの事を考えると、リテラル関数の型の記述はかなり長くなる。2つの実数値を実数値にマッピングする関数の型は (-> (X Real Real) Real) と記述される。後ほど、構造化された引数や返り値を導入する際にそれらを扱うリテラル関数の拡張について説明しよう。

なんかHaskellみたいになってきた。面白そう。

タプル / Tuples

タプルにはアップ・タプルとダウン・タプルの2種類がある。タプルはその成分を順に並べたリストとして記述する:アップタプルは括弧で、ダウンタプルは角括弧で区切られる。例えば、速度成分 v0, v1, v2 から成るアップタプル v は

v=(v^0,v^1,v^2)

モーメント成分 p0, p1, p2 から成るダウンタプル p は

p=\[p_0,p_1,p_2\]

となる。

アップタプルの成分は通常、上付き文字で指定される。ダウンタプルの成分は通常下付き文字で指定される。

我々はタプルの要素を参照する際、0ベースのインデックスを用いる。この記法テンソル算術における従来の規約に追随したものである。

Schemeでは、コンストラクタ up, down を用いてタプルを作る:

(define v (up 'v^0 'v^1 'v^2))

(print-expression v)
→ (up v^0 v^1 v^2)

(define p (down 'p_0 'p_1 'p_2))

(print-expression p)
→ (down p_0 p_1 p_2)

(up v^0 v^1 v^2) は #(v^0 v^1 v^2)、(down p_0 p_1 p_2) は (*down* (p_0 p_1 p_2)) のように表現されていた。

タプル算術は、タプルの成分がタプルでもよい点、異なるタプルが同じ構造をもっている必要がない点において従来のテンソル算術とは異なる。例えば、位相空間状態(phase-space states)のタプル構造 s は

s=(t,(x,y),\[p_x,p_y\])

と表せる。

これは時刻、座標、モーメントのアップタプルである。時刻tは下部構造をもたない。座標は座標成分x,yのアップタプルである。モーメントはモーメント成分px,pyのダウンタプルである。Schemeでは

(define s (up 't (up 'x 'y) (down 'p_x 'p_y)))

のように記述する。

タプル構造の成分を参照するために、セレクタ関数が用意されている。例えば:

I(s)=s

I_0(s)=t

I_1(s)=(x,y)

I_2(s)=\[p_x,p_y\]

I_{1,0}(s)=x

...

I_{2,1}(s)=p_y

セレクタの下付きの整数列は、意図した成分へのアクセスチェーンを記述する。

component手続きは、セレクタ関数I_zを実装した一般的なセレクタ手続きである:

((component 0 1) (up (up 'a 'b) (up 'c 'd)))
→ b

タプルの成分へのアクセスには、タプルと添字1つを取り、タプルの指し示された要素を返すセレクタ手続き ref を使うこともできる:

(ref (up 'a 'b 'c) 1)
→ b

どこでも0ベースの添字が用いられる。ref手続きはタプルツリーのいかなる下部構造へのアクセスにも使用できる:

(ref (up (up 'a 'b) (up 'c 'd)) 0 1)
→ b

同じ長さの2つのアップタプルは、成分が加算可能な互換性をもっていれば要素毎に加算・減算して1つのアップタプルを作ることができる。同様に、同じ長さの2つのダウンタプルは、成分が加算可能な互換性をもっていれば要素毎に加算・減算して1つのダウンタプルを作ることができる。

任意のタプルに対し数値を乗算することができる。各成分にその数を掛ければよい。数値はもちろん乗算可能である。加算に対し互換性をもつタプルはベクトル空間を生成する。

便宜のために、タプルの二乗はタプルの各成分の二乗の和として定義する。タプルは後述のように乗算対象になりうるが、タプルの二乗はタプルとそれ自身との積ではない。

タプルの積が意味するところはタプルの構造に依存する。2つのタプルが逆の型の同じ長さのタプルであり、対応する要素が両方ともタプルであり縮合可能であるか、あるいは一方がタプルでない場合、これらのタプルは縮合可能である(compatible for contraction)という。

2つのタプルが縮合可能ならば、ジェネリックな乗算は縮合として解釈される:結果は両タプルの対応する成分同士の積の和である。例えば、前述の等式(8.4)および(8.5)にて導入された p と v は縮合可能であり、その積は

pv=p_0v^0+p_1v^1+p_2v^2

である。

従って、縮合可能なタプルの積は内積である。前に定義したタプル p と v を用いるなら

(print-expression (* p v))
→(+ (* p_0 v^0) (* p_1 v^1) (* p_2 v^2))

タプルの縮合(contraction)は可換(commutative)である。即ち pv = vp となる。注意:縮合可能なタプル同士の乗算は、一般に、結合則が成り立たない(not associative)。

例えば u=(5,2),v=(11,13),g=\[ \[3,5\],\[7,9\] \] とすると、このとき u(g v)=964 だが (u g)v=878である。式 u g v は一義ではない。こうした多義性をもつ式がこの本に現れることはない。

縮合可能でない2つの構造の乗算則は単純である。AとBが縮合可能ではないなら、積ABはAをBの各成分に掛けた積を成分とする、Bの型のタプルとなる。成分同士の積にもこの規則が再帰的に適用される。従って、B=(B^0,B^1,B^2)ならAとBの積は

AB=(AB^0,AB^1,AB^2)

である。

AとCが縮合可能ではなく、C=\[C_0,C_1,C_2\] ならばその積は

AC=\[AC_0,AC_1,AC_2\]

となる。

一次(線形)変換を表現するためにタプル構造が作られることがある。例えば、通常は行列で表現される回転

\left\[\begin{array}{cc}cos\theta&-sin\theta\\sin\theta&cos\theta\end{array}\right\]

はタプル構造によって

\left\[\left(\begin{array}{c}cos\theta\\sin\theta\\\end{array}\right)\left(\begin{array}{c}-sin\theta\\cos\theta\\\end{array}\right)\right\]

のように表現することができる。

このようなタプルはベクトルを表すアップタプルと縮合可能である。だから例えば

\left\[\left(\begin{array}{c}cos\theta\\sin\theta\\\end{array}\right)\left(\begin{array}{c}-sin\theta\\cos\theta\\\end{array}\right)\right\]\left(\begin{array}{c}x\\y\\\end{array}\right)=\left(\begin{array}{c}x cos\theta-y sin\theta\\x sin\theta+y cos\theta\\\end{array}\right)

線形変換を表現する2つのタプルは、縮合可能ではないが、積によって合成することも可能である。この場合、その積は線形変換の合成を表す。例えば、2つの回転を表すタプルの積は

\left\[\left(\begin{array}{c}cos\theta\\sin\theta\\\end{array}\right)\left(\begin{array}{c}-sin\theta\\cos\theta\\\end{array}\right)\right\]\left\[\left(\begin{array}{c}cos\varphi\\sin\varphi\\\end{array}\right)\left(\begin{array}{c}-sin\varphi\\cos\varphi\\\end{array}\right)\right\]=\left\[\left(\begin{array}{c}cos(\theta+\varphi)\\sin(\theta+\varphi)\\\end{array}\right)\left(\begin{array}{c}-sin(\theta+\varphi)\\cos(\theta+\varphi)\\\end{array}\right)\right\]

となる。

変換の合成で結合則が成り立つが交換則が成り立たないように、線形変換を表すタプル同士の積は結合則が成り立つが一般に交換則は成り立たない。

微分 / Derivatives

関数 f の微分関数であり、Df で表される。D は優先順位の高い演算子であるというのが我々の記法規約である。従って D は 隣りの関数に対し他の関数適用より前に影響をもつので、Df(x)(Df)(x) と同等である。高次微分は、微分演算子を累乗することで記述される。従って関数 f の n回微分D^n f のように表記される。

関数微分を生成するScheme手続きは D という名前である。sin手続きの微分はcosを計算する手続きである:

(define derivative-of-sine (D sin))

(print-expression (derivative-of-sine 'x))
→ (cos x)

関数 f の微分関数 Df である。ある引数におけるその値に引数の増分Δxを掛けることで、fの値における増分の一次近似を得ることができる:

f(x+\Delta x)\approx f(x)+Df(x)\Delta x

例えば、fを引数を三乗する関数 (f(x)=x^3) だとしよう。 このとき Df引数の二乗の3倍を生成する関数 (Df(y)=3y^2) である。従って f(5)=125, Df(5)=75である。引数 x+\Delta x に対する f の値は

f(x+\Delta x)=(x+\Delta x)^3=x^3+3x^2\Delta x+3x\Delta x^2+\Delta x^3

また

Df(x)\Delta x=3x^2\Delta x

である。

従って Df(x)をΔx倍したものは f(x+\Delta x) のΔxにおける一次の項の係数となり、Δxが小さい場合にはf(x+\Delta x)-f(x)のよい近似値となる。

合成関数微分は連鎖法則(chain rule)に従う:

D(f\circ g)=((Df)\circ g)\cdot D

従って、x において

(D(f\circ g))(x)=Df(g(x))\cdot Dg(x)

である。

微分演算子である。関数同士の乗算が関数の返り値同士の乗算である(式8.3参照)一方で演算同士の乗算が(関数の)合成として解釈される点を覗けば、演算子関数である。D がもしも通常の関数であるなら、乗算則はD^2 fDfをそれ自身の積になることを示唆するところだが、それは意図されるものとは異なる。算術は演算子同士の乗算を許すよう拡張される。典型的な演算子(D+1)(D-1)=D^2-1 で、ここでは関数の2回微分から関数そのものを減じている。1 は identity 演算子として振る舞う;算術的に演算子と合成された場合、数値は入力にその値を乗じた数を返す演算子として扱われる。このような演算子Schemeでは以下のように構築される:

(print-expression
  (((* (- D 1) (+ D 1)) (literal-function 'f)) 'x))
→ (+ (((expt D 2) f) x) (* -1 (f x)))

変数関数微分 / Derivatives of functions of multiple arguments

  • "The derivative generalizes to functions that take multiple arguments. The derivative of a real-valued function of multiple arguments is an object whose contraction with the tuple of increments in the arguments gives a linear approximation to the increment in the function's value."

微分は複数の引数をとる関数にまで一般化される。多引数をとる実関数微分は、引数の増分のタプルと縮合すると関数値の増分への一次近似になるようなオブジェクトとなる。

引数関数は、引数をアップタプルにしたものについての関数と考えることができる。従って増分引数タプルは引数1つ1つを成分とするアップタプルである。そのような関数微分は 各引数の位置に応じた偏微分のダウンタプルである。

2つの実値引数をとる実関数 g があって、x,y における g の返り値の増分を近似したいとしよう。引数がタプル (Δx, Δy) だけ増加するなら

Dg(x,y)\cdot(\Delta x,\Delta y)=\[\partial_0g(x,y),\partial_1g(x,y)\]\cdot(\Delta x,\Delta y)\\=\partial_0g(x,y)\Delta x+\partial_1g(x,y)\Delta y

前に定義された2引数リテラル関数 g を用いて

(print-expression ((D g) 'x 'y))
→ (down (((partial 0) g) x y) (((partial 1) g) x y))

一般に偏微分とは、複数の引数(あるいは構造化された引数、もしくはその両方。後述。)をとる関数微分の成分にすぎない。従って、ある関数の偏微分は、成分セレクタとその関数微分を合成したものである。事実、

\partial_0g=I_0\circ Dg

\partial_1g=I_1\circ Dg

である。

具体的には、もし

g(x,y)=x^3y^5

ならば

Dg(x,y)=\[3x^2y^5,5x^3y^4\]

であり、xとyにおける引数の変化の増分の1次近似は

g(x+\Delta x,y+\Delta y)-g(x,y)\approx \[3x^2y^5,5x^3y^4\]\cdot(\Delta x,\Delta y)

=3x^2y^5\Delta x+5x^3y^4\Delta y

となる。

合成関数の偏微分も連鎖法則(chain rule)に従う:

\partial_i(f\circ g)=((Df)\circ g)\cdot\partial_ig

従って、xが引数タプルであれば

(\partial_i(f\circ g))(x)=Df(g(x))\cdot\partial_ig(x)

となる。

数学記法は普通複数の引数をとる関数と、引数タプルをとる関数を区別しない。h((x,y))=g(x,y)としよう。関数hは引数x,yのタプルをとるが、これは引数x,yをとる関数gと区別されない。我々は複数の引数をとる関数を定義するのにどちらの方法も用いる。

  • "The derivatives of both kinds of functions are compatible for contraction with a tuple of increments to the arguments."

どちらの種類の関数引数への増分タプルに対し縮合可能である。

Schemeはこういう時に便利である:

(define (h s)
  (g (ref s 0) (ref s 1)))

(print-expression
 (h (up 'x 'y)))
→ (g x y)

(print-expression ((D g) 'x 'y))
→ (down (((partial 0) g) x y) (((partial 1) g) x y))

(print-expression ((D h) (up 'x 'y)))
→ (down (((partial 0) g) x y) (((partial 1) g) x y))

位相空間状態の関数は、時刻と座標とモーメントの関数である。Hをそのような関数だとしよう。時刻t,座標(x,y),モーメント \[p_x,p_y\] におけるHの値はH(t,(x,y),\[p_x,p_y\])である。sを式(8.6)にあるような位相空間状態とすると:

s=(t,(x,y),\[p_x,p_y\])

引数タプルsにおけるHの値はH(s)である。Hの値について書く際に我々はどちらの方法も用いる。

セミコロンで引数タプルの境界を示し、タプル成分をコンマで区切ることによって、タプルを含む複数の引数をとる関数を提示することがある。Hが引数t,(x,y),\[p_x,p_y\]をとる位相空間状態の関数であるとすると、H(t;x,y;p_x,p_y) のように書かれるかもしれない。この記法だとアップ/ダウンの区別を失うが、我々のセミコロンとコンマによる記法は便利だし、リーズナブルに一義的である。

Hの微分は、引数構造における増分と縮合されることで関数値における増分を生み出すことができるオブジェクトを作る関数である。この微分は3つの偏微分から成るダウンタプルである。最初の偏微分は数値引数に関する偏微分である。2番目の偏微分はアップタプル引数の各成分に関する偏微分を成分とするダウンタプルである。3番目の偏微分はダウンタプル引数の各成分に関する偏微分を成分とするアップタプルである:

DH(s)=\[\partial_0H(s),\partial_1H(s),\partial_2H(s)\]

=\[\partial_0H(s),\[\partial_{1,0}H(s),\partial_{1,1}H(s)\],(\partial_{2,0}H(s),\partial_{2,1}H(s))\]

ここで\partial_{1,0}は第二引数(添字1)の第1成分(添字0)に関する偏微分であることを表している。以下同様。実際、任意の関数Fおよびアクセスチェーンzについて \partial_zF=I_z\circ D F である。従って、Δsを位相空間状態の増分タプル

\Delta s=(\Delta t,(\Delta x,\Delta y),\[\Delta p_x,\Delta p_y\])

とするなら

DH(s)\Delta s=\partial_0H(s)\Delta t

+\partial_{1,0}H(s)\Delta x+\partial_{1,1}H(s)\Delta y

+\partial_{2,0}H(s)\Delta p_x+\partial_{2,1}H(s)\Delta p_y

注意:異なる構造をした引数に関する偏微分演算子は一般に可換ではない。

Schemeで(書くときに)は、明示的な選択をしなければならない。たいてい位相空間状態関数はタプルの関数であると想定する。例えば

(define H
  (literal-function 'H 
    (-> (UP Real (UP Real Real) (DOWN Real Real)) Real)))

(print-expression
 (H s))
→ (H (up t (up x y) (down p_x p_y)))

(print-expression
 ((D H) s))
→ (down
 (((partial 0) H) (up t (up x y) (down p_x p_y)))
 (down (((partial 1 0) H) (up t (up x y) (down p_x p_y)))
       (((partial 1 1) H) (up t (up x y) (down p_x p_y))))
 (up (((partial 2 0) H) (up t (up x y) (down p_x p_y)))
     (((partial 2 1) H) (up t (up x y) (down p_x p_y)))))

Structured results

関数のなかには構造化された出力をするものもある。出力がタプルな関数は、それぞれが出力タプルの1成分を生成する関数を成分として持つタプルと等価である。

例えば、数値引数を1つ取り構造化された出力を行う関数が空間内の曲線を描写するのに使われることがある。以下の関数三次元空間のz軸の回りを回る螺旋状の経路を描写する:

h(t)=(cos t,sin t, t)=(cos,sin,I)(t)

その微分関数の各成分の微分のアップタプルにすぎない:

Dh(t)=(-sin t,cos t,1)

Schemeではこう書くか、

(define (helix t)
  (up (cos t) (sin t) t))

あるいは単に

(define helix (up cos sin identity))

でよい。

その微分関数の各成分の微分のアップタプルにすぎないので:

(print-expression ((D helix) 't))
→ (up (* -1 (sin t)) (cos t) 1)

一般に構造化された出力をする関数は単に成分1つ1つが関数である構造体として扱われる。

構造化された入力をとり構造化された出力をする関数微分は、入力構造体の増分と縮合したときに、出力の増分への一次近似が出るオブジェクトである。だから、もし関数gを〜のように定義するなら、

g(x,y)=((x+y)^2,(y-x)^3,e^{x+y})

gの微分

Dg(x,y)=\left\[\left(\begin{array}{c}2(x+y)\\-3(y-x)^2\\e^{x+y}\\\end{array}\right),\left(\begin{array}{c}2(x+y)\\3(y-x)^2\\ e^{x+y}\\\end{array}\right)\right\]

となる。Schemeでは

(define (g x y)
  (up (square (+ x y)) (cube (- y x)) (exp (+ x y))))

(print-expression ((D g) 'x 'y))
→ (down (up (+ (* 2 x) (* 2 y))
          (+ (* -3 (expt x 2)) (* 6 x y) (* -3 (expt y 2)))
          (* (exp y) (exp x)))
      (up (+ (* 2 x) (* 2 y))
          (+ (* 3 (expt x 2)) (* -6 x y) (* 3 (expt y 2)))
          (* (exp y) (exp x))))

となる。

問題8.1 連鎖法則

F(x,y)=x^2y^3, G(x,y)=(F(x,y),y), H(x,y)=F(F(x,y),y)とし、H=F\circ Gになるようにする。

a. \partial_0F(x,y)\partial_1F(x,y)を計算せよ。

b. \partial_0F(F(x,y),y)\partial_1F(F(x,y),y)を計算せよ。

c. \partial_0G(x,y)\partial_1G(x,y)を計算せよ。

d. DF(a,b),DG(3,5),DH(3a^2,5b^3)を計算せよ。

問題8.2 微分の計算

我々は 引数を複数個取る関数を手続きとして、それをどのように使いたいかに応じて幾通りかの方法で表現することができる、最もシンプルな案は手続きの引数関数引数を同一視することである。

例えば、問題8.1に出てくる関数の実装を以下のように書くことができるだろう:

(define (f x y)
  (* (square x) (cube y)))
(define (g x y)
  (up (f x y) y))
(define (h x y)
  (f (f x y) y))

この選択により、fと、それらの引数のタプルを生成する関数gのように複数の引数をとる関数の合成はawkwardである。あるいは、関数引数をタプルデータ構造のスロットとして表現し、そのようなデータ構造で結果を返す関数との合成を行うのも容易である。しかし、この選択は構造を構築したり分解したりする手続きを必要とする。

例えば、上述の関数を実装する手続きを以下のように定義できる:

(define (f v) 
  (let ((x (ref v 0))
        (y (ref v 1)))
    (* (square x) (cube y))))
(define (g v) 
  (let ((x (ref v 0))
        (y (ref v 1)))
    (up (f v) y)))
(define h (compose f g))

コンピュータを用い、問題8.1をもう一度やれ。多引数関数の両方の実装について調べよ。

2009-01-01

あけおめ ことよろ

00:13 | あけおめ ことよろ - naoya_t@SICM(べ、べつにあなたのためじゃないんだからね) を含むブックマーク はてなブックマーク - あけおめ ことよろ - naoya_t@SICM(べ、べつにあなたのためじゃないんだからね) あけおめ ことよろ - naoya_t@SICM(べ、べつにあなたのためじゃないんだからね) のブックマークコメント

さあSICM読むよ読むよ・・・まずはPrefaceから。

以下、ひっかかった所とか重要そうな所の個人的メモおよび部分訳。

訳語の統一とか気にしない気にしない。「明示的」とか平気で使うけど気にしない気にしない。

はじめに /Preface

| 01:03 | はじめに /Preface - naoya_t@SICM(べ、べつにあなたのためじゃないんだからね) を含むブックマーク はてなブックマーク - はじめに /Preface - naoya_t@SICM(べ、べつにあなたのためじゃないんだからね) はじめに /Preface - naoya_t@SICM(べ、べつにあなたのためじゃないんだからね) のブックマークコメント

  • nonlinear resonance(非線形共鳴)って何

とりあえずスルー

  • qualitatively "定性的に"

  • (Rather than concentrating on symbolic descriptions, we concentrate on) geometric features of the set of possible trajectories

一連のとりうる軌跡の幾何学的特性

  • (Classical mechanics is) deceptively simple
    1. 〔難しそうに見えるが〕見掛けによらずやさしい
    2. 一見やさしそうに見える〔が実は難しい〕

ってどっち? →「伝統的な数学記法で用いられる記号にあいまいさ、というか文脈に依存するところがある」と言ってるので後者か

従来の記法では、ラグランジュ方程式

http://mitpress.mit.edu/sicm/front-Z-G-1.gif

のように書かれる。偏微分が意味をなすためには、ラグランジアン L は位置成分および速度成分 q^i, \dot q^i関数として解釈されなければならないのだが、時間微分 d/dt が意味をなすためには、時刻の関数になるように、ラグランジアンの偏微分にsolution paths(解経路)を挿入しておくべきである。

...

・・・これは、この式を読む人間が(辻褄があうように、適宜)よしなに解釈しているという事なのかな。

で、まあ「複数の意味にとれる記法を使うのはクリアな推論のハンデになるから避けたい・・・ので本書ではよりpreciseな数式記法を用いる事にした・・・われわれの(関数型な)数式記法について詳しくはAppendixを見よ」と。

ここでTeXの復習。いやTeXで数式書いた事ないし。復習じゃなくて勉強。

\frac{d}{dt}\frac{\partial L}{\partial \dot q^i} - \frac{\partial L}{\partial q^i} = 0

合ってるかな?

例えばさっきのラグランジュ方程式をこの関数記法で書くとこうなる:

D(\partial_2L\circ\Gamma\[q\])-\partial_1L\circ\Gamma\[q\]=0

ラグランジアン L は時刻 t, 座標 x, 速度 v の実数値関数で、その値は L(t,x,v)である。

微分は、関数の特定引数位置に関する微分として表される:例えば \partial_2L は、ラグランジアン関数Lをその2番目の引数(※0ベースで)v について偏微分することで得られる関数を表す。(なるほど)

従来型の、ある「変数」に関する微分として表現される偏微分記法では、文脈に依存するし曖昧さの元になる。ラグランジアンの偏微分は経路関数(path function) q に沿って明示的に評価される。時間微分がとられラグランジュ方程式が立つ。各ステップは明示的であり、暗黙に入れ替わったりはしない。

  • dynamical phenomena - "力学(的)"現象
  • variational mechanics - "変分力学"

  • the motion of systems - 系の運動...?
  • an integral part of the presentation - (presentationの)不可分な、切り離せない一部。(※整数部ではなく)

この本ではSchemeというLISP-1言語(※そんな事かいてない)を使います。Schemeについては良いexpositions(説明、解説)が沢山あります。AppendixにもSchemeの短いイントロダクションがあるよ

この本で使ってるSchemeのバージョンはMIT Scheme(フリーウェア)で、Scmutilsという巨大ソフトライブラリで拡張されていて、多くの数学オブジェクト、シンボル演算等に対し演算子ジェネリックに拡張している上、求積法、(連立?)微分方程式積分、多変数最小化?のような数値法もサポートしている(のでGaucheとか使ってる紳士淑女の皆さまは注意してくらはい)

この本は古典力学をunusualなパースペクティヴから提示する。この本では、運動方程式の導出よりも、運動を理解することに主眼をおいている。非線形力学(nonlinear dynamics)における最近の発見を、(後知恵的に提示するのではなく)道筋を順に追いながら提示していく。古典力学の基礎的な性質(properties)をきっちり理解するために関数的な数学記法を用いる。記法の制約(律則)、方法の定式化、シミュレーション、記号の解析にコンピュータを用いる。

  • afterthought 後からの思い付き、後知恵(の産物)、結果論

この本はMITにおける過去6年の古典力学教育の成果である。

我々の授業の内容は、AbelsonとSussmanの基礎コンピュータ科学のクラスで開発された方法論を公式化するために計算機をどう使っていったら良いかといった知見に基づいた非線形力学太陽系力学(天体力学?)の授業からの着想で始まった。


ScmutilsをMacにインストール...できるのか

15:28 | ScmutilsをMacにインストール...できるのか - naoya_t@SICM(べ、べつにあなたのためじゃないんだからね) を含むブックマーク はてなブックマーク - ScmutilsをMacにインストール...できるのか - naoya_t@SICM(べ、べつにあなたのためじゃないんだからね) ScmutilsをMacにインストール...できるのか - naoya_t@SICM(べ、べつにあなたのためじゃないんだからね) のブックマークコメント

http://groups.csail.mit.edu/mac/users/gjs/6946/linux-install.htm

MacOSX 10.5 でも行けるっぽい旨が書いてあるので試してみるとする

Scheme Mechanics Installation for GNU/Linux or Mac OS X

から最新のtarball (scmutils-20081204-ix86-apple-darwin.tar.gz) を頂いてくる。

% sudo tar zxf scmutils-20081204-ix86-apple-darwin.tar.gz -C /usr/local/

これでインストールされるっぽい。

Terminalから /usr/local/bin/mechanics を起動するとX11上でEdwinMIT SchemeエディタGNU Emacs:elisp = Edwin:MIT Scheme)が動く。

(+ 1 2) と書いてC-x C-eしてみたらミニバッファ?に

;Value: 3

が現れた。

  • /usr/local/scmutils/manual/ 以下にドキュメント
  • /usr/local/scmutils/src/ 以下に全ソース

があるらしい。(あとで読む


Acknowledgments

| 16:48 | Acknowledgments - naoya_t@SICM(べ、べつにあなたのためじゃないんだからね) を含むブックマーク はてなブックマーク - Acknowledgments - naoya_t@SICM(べ、べつにあなたのためじゃないんだからね) Acknowledgments - naoya_t@SICM(べ、べつにあなたのためじゃないんだからね) のブックマークコメント

スキップed

2008-12-31

グループ作りました。

16:57 | グループ作りました。 - naoya_t@SICM(べ、べつにあなたのためじゃないんだからね) を含むブックマーク はてなブックマーク - グループ作りました。 - naoya_t@SICM(べ、べつにあなたのためじゃないんだからね) グループ作りました。 - naoya_t@SICM(べ、べつにあなたのためじゃないんだからね) のブックマークコメント

テキストは http://mitpress.mit.edu/SICM/ にあります。英語です。無料です。

noranekosannoranekosan2009/01/17 00:36こんにちはー。
最初見てこちらのグループhttp://sicmstudyclass.g.hatena.ne.jp/と混同してちょっと混乱してました。
不躾で失礼な質問かとも思いますが、何故SICMを読まれようと思ったのですか?
あと本で読まれているのですが?それともWebで?

n4_tn4_t2009/01/17 01:04>> noranekosanさん

こんばんは。naoya_tです。

SchemerなのでSchemeで書いてあれば少しは理解できるのではないかと安易な気持ちで読み始めました。どこで行き詰まるか(あるいは飽きて投げ出すか)わかりませんが、ネタだと思ってご笑覧いただければ幸いです。読んでるのはWeb版です。

ちなみにsicmstudyclassグループが既にあったことは後で知りました。同じ本に関するグループが複数存在することについて不快に思われたのでしたらお赦しを。

noranekosannoranekosan2009/01/18 04:08こんばんわー。

あくまでもScheme本として読んでらっしゃるんですね。結構奇妙な解析力学の本ですから、どういう興味で読んだりするんだろーと思ってました。自分も仕事の現実逃避に少し読んでみてたのですが、最近時間と気力が無くて見事に頓挫してます。

今ちょっと気力がないのであれですが、時々暇を見てお邪魔するかもしれません。
その時はよろしくお願い致します m( _ _ )m

あ、グループの事は単に自分が過去の記憶と識別できなくて混乱していただけです。
内容が被っていたとしても、複数あっても別にいいと思いますし。

2001-01-01

目次

| 目次 - naoya_t@SICM(べ、べつにあなたのためじゃないんだからね) を含むブックマーク はてなブックマーク - 目次 - naoya_t@SICM(べ、べつにあなたのためじゃないんだからね) 目次 - naoya_t@SICM(べ、べつにあなたのためじゃないんだからね) のブックマークコメント

 はじめに (1/01) /Preface

 謝辞 /Acknowledgments

 1. ラグランジュ力学 (1/03) /Lagrangian Mechanics

  1.1 停留作用の原理 (1/03) /The Principle of Stationary Action

        運動に関する見識 /Experience of motion

        実現可能な経路 /Realizable paths

  1.2 配置空間 (1/08) /Configuration Spaces

  1.3 一般化座標 (1/08) /Generalized Coordinates

        一般化座標におけるラグランジアン /Lagrangians in generalized coordinates

  1.4 作用を計算する (1/09) /Computing Actions

        最小作用経路 /Paths of minimum action

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

  1.5 オイラー・ラグランジュ方程式 (1/15) /The Euler-Lagrange Equations

        ラグランジュ方程式 /Lagrange equations

   1.5.1 ラグランジュ方程式の微分 /Derivation of the Lagrange Equations

        Varying a path

        Varying the action

        Harmonic oscillator

        Orbital motion

   1.5.2 Computing Lagrange's Equations

        The free particle

        The harmonic oscillator

  1.6 How to Find Lagrangians

        Hamilton's principle

        Constant acceleration

        Central force field

   1.6.1 Coordinate Transformations

   1.6.2 Systems with Rigid Constraints

        Lagrangians for rigidly constrained systems

        A pendulum driven at the pivot

        Why it works

        More generally

   1.6.3 Constraints as Coordinate Transformations

   1.6.4 The Lagrangian Is Not Unique

        Total time derivatives

        Adding total time derivatives to Lagrangians

        Identification of total time derivatives

  1.7 Evolution of Dynamical State

        Numerical integration

  1.8 Conserved Quantities

   1.8.1 Conserved Momenta

        Examples of conserved momenta

   1.8.2 Energy Conservation

        Energy in terms of kinetic and potential energies

   1.8.3 Central Forces in Three Dimensions

   1.8.4 Noether's Theorem

        Illustration: motion in a central potential

  1.9 Abstraction of Path Functions

        Lagrange equations at a moment

  1.10 Constrained Motion

   1.10.1 Coordinate Constraints

        Now watch this

        Alternatively

        The pendulum using constraints

        Building systems from parts

   1.10.2 Derivative Constraints

        Goldstein's hoop

   1.10.3 Nonholonomic Systems

  1.11 Summary

  1.12 Projects

 2 Rigid Bodies

  2.1 Rotational Kinetic Energy

  2.2 Kinematics of Rotation

  2.3 Moments of Inertia

  2.4 Inertia Tensor

  2.5 Principal Moments of Inertia

  2.6 Representation of the Angular Velocity Vector

        Implementation of angular velocity functions

  2.7 Euler Angles

  2.8 Vector Angular Momentum

  2.9 Motion of a Free Rigid Body

        Conserved quantities

   2.9.1 Computing the Motion of Free Rigid Bodies

   2.9.2 Qualitative Features of Free Rigid Body Motion

  2.10 Axisymmetric Tops

  2.11 Spin-Orbit Coupling

   2.11.1 Development of the Potential Energy

   2.11.2 Rotation of the Moon and Hyperion

  2.12 Euler's Equations

        Euler's equations for forced rigid bodies

  2.13 Nonsingular Generalized Coordinates

        A practical matter

        Composition of rotations

  2.14 Summary

  2.15 Projects

 3 Hamiltonian Mechanics

  3.1 Hamilton's Equations

        Illustration

        Hamiltonian state

        Computing Hamilton's equations

   3.1.1 The Legendre Transformation

        Legendre transformations with passive arguments

        Hamilton's equations from the Legendre transformation

        Legendre transforms of quadratic functions

        Computing Hamiltonians

   3.1.2 Hamilton's Equations from the Action Principle

   3.1.3 A Wiring Diagram

  3.2 Poisson Brackets

        Properties of the Poisson bracket

        Poisson brackets of conserved quantities

  3.3 One Degree of Freedom

  3.4 Phase Space Reduction

        Motion in a central potential

        Axisymmetric top

   3.4.1 Lagrangian Reduction

  3.5 Phase Space Evolution

   3.5.1 Phase-Space Description Is Not Unique

  3.6 Surfaces of Section

   3.6.1 Periodically Driven Systems

   3.6.2 Computing Stroboscopic Surfaces of Section

   3.6.3 Autonomous Systems

        Hénon-Heiles background

        The system of Hénon and Heiles

        Interpretation

   3.6.4 Computing Hénon-Heiles Surfaces of Section

   3.6.5 Non-Axisymmetric Top

  3.7 Exponential Divergence

  3.8 Liouville's Theorem

        The phase flow for the pendulum

        Proof of Liouville's theorem

        Area preservation of stroboscopic surfaces of section

        Poincaré recurrence

        The gas in the corner of the room

        Nonexistence of attractors in Hamiltonian systems

        Conservation of phase volume in a dissipative system

        Distribution functions

  3.9 Standard Map

  3.10 Summary

  3.11 Projects

 4 Phase Space Structure

  4.1 Emergence of the Divided Phase Space

        Driven pendulum sections with zero drive

        Driven pendulum sections for small drive

  4.2 Linear Stability

   4.2.1 Equilibria of Differential Equations

   4.2.2 Fixed Points of Maps

   4.2.3 Relations Among Exponents

        Hamiltonian specialization

        Linear and nonlinear stability

  4.3 Homoclinic Tangle

   4.3.1 Computation of Stable and Unstable Manifolds

  4.4 Integrable Systems

        Orbit types in integrable systems

        Surfaces of section for integrable systems

  4.5 Poincaré-Birkhoff Theorem

   4.5.1 Computing the Poincaré-Birkhoff Construction

  4.6 Invariant Curves

   4.6.1 Finding Invariant Curves

   4.6.2 Dissolution of Invariant Curves

  4.7 Summary

  4.8 Projects

 5 Canonical Transformations

  5.1 Point Transformations

        Implementing point transformations

  5.2 General Canonical Transformations

   5.2.1 Time-Independent Canonical Transformations

        Harmonic oscillator

   5.2.2 Symplectic Transformations

   5.2.3 Time-Dependent Transformations

        Rotating coordinates

   5.2.4 The Symplectic Condition

  5.3 Invariants of Canonical Transformations

        Noninvariance of p v

        Invariance of Poisson brackets

        Volume preservation

        A bilinear form preserved by symplectic transformations

        Poincaré integral invariants

  5.4 Extended Phase Space

        Restricted three-body problem

   5.4.1 Poincaré-Cartan Integral Invariant

  5.5 Reduced Phase Space

        Orbits in a central field

  5.6 Generating Functions

        The polar-canonical transformation

   5.6.1 F1 Generates Canonical Transformations

   5.6.2 Generating Functions and Integral Invariants

        Generating functions of type F1

        Generating functions of type F2

        Relationship between F1 and F2

   5.6.3 Types of Generating Functions

        Generating functions in extended phase space

   5.6.4 Point Transformations

        Polar and rectangular coordinates

        Rotating coordinates

        Two-body problem

        Epicyclic motion

   5.6.5 Classical ``Gauge'' Transformations

  5.7 Time Evolution Is Canonical

        Liouville's theorem, again

        Another time-evolution transformation

   5.7.1 Another View of Time Evolution

        Area preservation of surfaces of section

   5.7.2 Yet Another View of Time Evolution

  5.8 Hamilton-Jacobi Equation

   5.8.1 Harmonic Oscillator

   5.8.2 Kepler Problem

   5.8.3 F2 and the Lagrangian

   5.8.4 The Action Generates Time Evolution

  5.9 Lie Transforms

        Lie transforms of functions

        Simple Lie transforms

        Example

  5.10 Lie Series

        Dynamics

        Computing Lie series

  5.11 Exponential Identities

  5.12 Summary

  5.13 Projects

 6 Canonical Perturbation Theory

  6.1 Perturbation Theory with Lie Series

  6.2 Pendulum as a Perturbed Rotor

   6.2.1 Higher Order

   6.2.2 Eliminating Secular Terms

  6.3 Many Degrees of Freedom

   6.3.1 Driven Pendulum as a Perturbed Rotor

  6.4 Nonlinear Resonance

   6.4.1 Pendulum Approximation

        Driven pendulum resonances

   6.4.2 Reading the Hamiltonian

   6.4.3 Resonance-Overlap Criterion

   6.4.4 Higher-Order Perturbation Theory

   6.4.5 Stability of the Inverted Vertical Equilibrium

  6.5 Summary

  6.6 Projects

 7 Appendix: Scheme

        Procedure calls

        Lambda expressions

        Definitions

        Conditionals

        Recursive procedures

        Local names

        Compound data -- lists and vectors

        Symbols

 8 Appendix:記法についての解説 (1/02) /Our Notation

        関数 /Functions

        Symbolic values

        タプル /Tuples

        微分 /Derivatives

        多変数関数微分 /Derivatives of functions of multiple arguments

        Structured results

 Bibliography

 List of Exercises

 Index