このブログの更新は Twitterアカウント @m_hiyama で通知されます。
Follow @m_hiyama

メールでのご連絡は hiyama{at}chimaira{dot}org まで。

はじめてのメールはスパムと判定されることがあります。最初は、信頼されているドメインから差し障りのない文面を送っていただけると、スパムと判定されにくいと思います。

参照用 記事

質点系の重心、形式的凸結合のモナド

力学と確率って、ナニヤラ関係しそうだ、って話をモナド風味で。

内容:

質点系とその重心

平面(2次元)や3次元空間内に散らばるいくつかの質点を考えます。例えば、3つの質点 P1, P2, P3 を考えます。P1, P2, P3 は質点なので大きさは持ちません。しかし、質量は持ちます。

ここでは、質量の絶対量は問題にせずに、その比率だけに注目します。例えば、3個の質点の質量の比率が「2対3対1」だとしましょう。質量の総和を1に正規化すると、P1, P2, P3 の質量(の比率)はそれぞれ、1/3, 1/2, 1/6 となります。

平面や空間に原点と座標軸を決めて、P1, P2, P3 の位置ベクトルを x1, x2, x3 とします。また、質量の比率を α1, α2, α3 と書きましょう(α1 + α2 + α3 = 1)。すると、質点系 {P1, P2, P3} は、x1, x2, x3, α1, α2, α3 という数値化された情報で決定されます。形式的に、Pi = αi・xi (i = 1, 2, 3)という書き方を採用して、質点系 {P1, P2, P3} を {α1・x1, α2・x2, α3・x3} とも書くことにします。

より一般に、i = 1, 2, ..., n に対して位置ベクトル xi と比率 αi が与えられたとき、それらで決定される質点系を {αi・xi}i≦n と書きます。質点系全体を一文字で表したいときは、A = {αi・xi}i≦n のように置きます。ここで、iは1から始まるとものと決めて、1≦i は省略しています。

質点系 A = {αi・xi}i≦n重心(の位置ベクトル)は、

  • Barycenter(A) = α1x1 + α2x2 + ... + αnxn

と定義します。ここで注意すべきは、重心の定義における α1x1 などは、単なる形式的な併置ではなくて、スカラー(数値)とベクトルのスカラー乗法であることです。+ はもちろんベクトルの足し算です。上記の公式で重心は実際に計算できて、ひとつの位置ベクトル(座標)が確定します。

重心は、複数の質点からなる質点系を、ただ1つの質点で代表させたいときに適切な質点の位置(座標)を与えます。この計算結果は、ヤジロベーの釣り合いの位置など、直感的な意味での重心を与えます。特に、二点系 {0.5・x, 0.5・y} のときの重心は、xとyの中点の位置となります。

b = Barycenter({αi・xi}i≦n) のとき、位置ベクトルbが「釣り合いの位置」を与えるとは、質点αi・xiに対する αi(xi - b) というベクトル量(モーメント)の質点全部に渡る総和 Σiαi(xi - b) がゼロベクトルになることです。また、そのような位置bが重心です。

質点系の集まりの重心

n個の数 α1, α2, ..., αn が次の条件を満たすとき、これらの組 (α1, α2, ..., αn) を重みベクトルと呼ぶことにします。

  1. αi > 0 (i = 1, 2, ..., n)
  2. α1 + α2 + ... + αn = 1

質点系の「質量の比率の並び」は重みベクトルになっています。ただ1つの数からなる (1) も重みベクトルであることに注意してください。

A1, A2, ..., Ak のそれぞれが質点系だとします。つまり、{A1, A2, ..., Ak} はk個の質点系の集まりです。この集まり {A1, A2, ..., Ak} の全体の重心を求めましょう。ただし、各質点系に重みを配分する必要があります。(β1, β2, ..., βk) が重みベクトルだとして、この重みを使って全体の重心を計算することにします。

具体的な計算のために、少し記号法を工夫する必要があります。jを 1, 2, ..., k の範囲を走る変数だとします。j番目の質点系 Aj を {αj,i・xj,i} のように書きましょう。

αj,i と xj,i は、2つの添字i, jを持つので、ほぼ行列のように思ってかまいません。普通の行列は、j, iの動く範囲が四角形となりますが、今回は、iの最大値がjに依存します。正確に書けば、j|→n(j) という関数を用いて、Aj = {αj,i・xj,i}i≦n(j) となります。n(j) の例として、n(1) = 2, n(2) = 1, n(3) = 3 ならば、j, i が動く範囲の (j, i) を列挙すると次のようになります。

(1, 1) (1, 2)
(2, 1)
(3, 1) (3, 2) (3 3)

質点系 Aj にはβj の重みを付けることを βj・Aj と書くことにすると、重み付けされた質点系の集まりは、

  • j・Aj}j≦k

と書けます。Aj を展開すれば:

  • j・({αj,i・xj,i}i≦n(j))}j≦k

この表式に対して二種類の計算方法があります。

  1. 内側の {αj,i・xj,i}i≦n(j) に対して重心(位置ベクトル)を求めて、それらの重心達を yj (1≦j≦k)として、その後で質点系 {βj・yj}j≦k の重心を求める。
  2. {(βjαj,i)・xj,i}j≦k, i≦n(j) という質点系の重心を求める。

この2つの計算法が同じ結果を与えることは、両方を計算して比較すれば分かります。そのとき、次の点に注意します。

  1. j)j≦kは重みベクトルなので、βj のjを動かした総和は1である。
  2. j, i)i≦n(j)は重みベクトルなので、αj, i> のiを動かした総和は1である。
  3. jに関する総和とiに関する総和は交換可能である。ΣjΣi… = ΣiΣj… 。
  4. ベクトル計算に関する通常の法則(分配法則とか)は使える。

形式的凸結合のモナド

今までの話では、Pi = αi・xi と書いたとき、Pi は質点系に属する質点であり、xi はその位置ベクトル、αi は質量の比率ということでした。

ここからは、そのような物理的/空間的な前提はすべて忘れて、単なる集合Xから出発します。Xはベクトル空間やその部分集合とは仮定しません。(αi)i≦nは長さnの重みベクトルとして、xi∈X (1≦i≦n)はn個の要素とします。αiとxiの組み合わせを形式的に αi・xi と書いて、それらの集合 {αi・xi}i≦n を考えます。

i・xi}i≦n は、具体的な意味を持ちませんが、質点系と重心という具体的な意味をイメージしながら行った計算がそのまま通用します。もちろん、集合X自体にはスカラー乗法も足し算もないのですが、Xから自由生成されたベクトル空間*1のなかになら、計算の意味をみい出せます。ですから、{αi・xi}i≦n を Σi≦nαixi と書いても不都合はありません。

i・xi}i≦n、あるいは Σi≦nαixi の形の表現を、X上の形式的凸結合と呼びます。

あらゆる長さに渡るすべての重みベクトル*2と、Xの有限個の要素の組み合わせから構成された形式的凸結合の全体を Convex(X) と書くことにします。重みベクトル (1) と x∈X から構成される {1・x} は形式的凸結合なので、x |→ {1・x} という単射により、XはConvex(X)に埋め込めます。

質点系の集まりの重心の話で登場した {βj・({αj,i・xj,i}i≦n(j))}j≦k のような表現は、Convex(Convex(X)) に属するものです。これを {(βjαj,i)・xj,i}j≦k, i≦n(j) と平坦化すると、それは Convex(X) に入ります。つまり、「形式的凸結合の形式的凸結合」を「形式的凸結合」に平坦化する操作は、Convex(Convex(X))→Convex(X) という写像です。

埋め込み写像をsingleton、平坦化をflattenという名前で呼ぶと:

  • singletonX:X→Convex(X)
  • flattenX:Convex(Convex(X))→Convex(X)

これは … そうです、モナドです。(Convex, singleton, flatten) が集合圏の上のモナドなのです。質点系の重心の計算は、Convexモナドアイレンベルク/ムーア圏における計算です。別な言い方をすると、重心計算ができるような代数系が「Convexモナドの代数」ということです。

形式的凸結合のモナド(Convexモナド)は、「何故にあえて確率を学ぶのか?」で触れたジリィ・モナド(確率測度のモナド)と近いものです。重心の計算が期待値の計算に対応します。力学的モーメントと確率のモーメントも、名前だけではなくて実際に類似の概念だと思います。

*1:自由生成されたベクトル空間は、形式的線形結合の全体です。

*2:Xが有限集合なら、Xの基数までの長さで十分。