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

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

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

参照用 記事

次元+次元・解析 -- 現象と量の型チェック機構

「なんとかならないのか!? ベクトル解析:用語法の無茶苦茶」で次のように言いました:

  • (物理的な意味での)次元解析をちゃんとすべし

それで、次元解析(みたいなこと)の話をしたいのですが、「次元」という言葉は注意が必要です。「次元」の2つの意味・用法と、それら2つの次元を両方とも同時に計算・解析する方法について述べます。

内容:

  1. 幾何次元と物理次元
  2. 量の空間の演算
  3. 直積と外積
  4. 無次元量
  5. 実例:熱流束密度と熱伝導度
  6. L3/(L3∧L3) の分析
  7. 強い型付けとしての次元解析

●幾何次元と物理次元

「次元」は多義語なので、代表的な2つの用法を「幾何次元」と「物理次元」と分けて呼びましょう。

幾何次元は、「直線が1次元で平面なら2次元」といった使い方をする「次元」です。要するに、「空間がいくつの方向に広がっているか」ですね。あるいは、空間の位置を数値の組(座標)で表すとき、「いくつの数を必要とするか」です。物理では、この意味の次元を自由度と呼ぶこともあります。

物理次元は、量の種類です。量を「どんな単位で計るのか」で分類したものと言ってもいいでしょう。ある量が「長さの次元」を持つなら、単位はm(メートル)で計れるはずです。「長さ」という物理次元を持つ“量の空間”をLで表します。同様に、「時間」という量の空間をT、「質量」という量の空間をMとします。

よく知られているように、「速度」という量は、L/T という物理次元を持つことになります。スラッシュ「/」は割り算だと思ってかまいません。実際、速度の単位は m/s です。L/T は L・T-1 とも書かれます。ドット「・」は掛け算で、(-)-1は逆数です。割ることは逆数を掛けることですから、L/T = L・T-1 は不思議ではないでしょう。

加速度の物理次元は L/T2 ですが、これを (L/T)/T と書くと、「速度 L/T の時間による変化」であることが分かりやすいでしょう。(L/T)/T = (L/T)・T-1 = L/(T・T) = L/T2 などの計算も特に問題はないですよね。

運動エネルギーは (1/2)mv2 と表現されるので、その物理次元は M・(L/T)2 = (M・L2)/T2 ですね。この量の単位は kg・m2・s-2 ですが、kg・m・s-2 は力の単位N(ニュートン)なので、N・m となり、結局運動エネルギーの単位はJ(ジュール)です;J(ジュール) = N(ニュートン)・m、 N = kg・m・s-2

●量の空間の演算

既に、量の空間であるL、T, Mに対して割り算「/」、掛け算「・」、逆数「(-)-1」を使いました。これらの演算は、数値に対する演算ではなくて、量の空間に対する演算です。長さ、時間、質量の変動(増減、進行)を考えると、それは幾何次元が1のベクトル空間と考えられ、それらのベクトル空間をL, T, Mと表していたのでした。先の割り算、掛け算、逆数は、実はベクトル空間に対する演算です。その実体(実態)は:

  • Y/X は、XからYへの線形写像の空間 LMap(X, Y) である。
  • X・Y は、XとYのテンソル積の空間 X\otimesY である。
  • Y-1 は、Yの双対空間Y* である。

例えば、等式 Y/X = Y・X-1 は、写像空間LMap(X, Y)とテンソル積空間Y\otimesX* が同型であることから合理化されます。

「なんとかならないのか!? ベクトル解析:用語法の無茶苦茶」より:

説明なしで使うのは心苦しいのですが、ベクトル空間のテンソル積と外積、それと直積(代数的には直和)を使います(すぐ上の説明で既に使った)。

●直積と外積

L, T, Mはいずれも幾何次元(=線形代数の意味での次元)が1次元でした。写像空間、テンソル積、双対空間をほどこしても幾何次元は1のままで増えません。ドット「・」とは別な掛け算の記号「×」を、集合論的直積(線形代数の直和)の意味で使います。直積なら幾何次元が増えます。

L×Lは幾何次元が2になります。L×LをL2と書いてしまうと、面積の空間L・Lと区別が付かないので、L2と下付き数字にします。L2 = L×L や L3 = L×L×L は幾何次元が増えますが、量の単位は変わりません。2次元のベクトルでも3次元のベクトルでも長さはmで計りますから。

テンソル積とは別に、「∧」という記号でベクトル空間の外積を導入しておきます。L∧L は実質的な意味がありませんが、L2∧L2 は符号付き面積の空間、L3∧L3 は方向を持つ面積の空間となります。外積L2∧L2でも、量の単位はテンソル積L・LやL2・L2のときと同様です。つまり、L2∧L2の単位はm2(平方メートル)です。

●無次元量

L/Lを普通の割り算とみなすと答は1となります。物理次元の1は無次元量を意味します。無次元量は純粋な数値で単位がつかない量です。実際、L/Lの解釈は写像空間LMap(L, L)であり、LMap(L, L)の元は、伸縮変換なので、伸縮率という純粋な数値と同一視できます。

L2/L2 も形式的な割り算では答が1となります。これは L2/L2 が無次元量であることを示します。しかし、L2/L2 の幾何次元は4です。なぜなら、L2/L2 の解釈は LMap(L2, L2)であり、これは2×2行列で表現可能なので、幾何次元(自由度)4となります。

一般に、X/X、あるいはX・X-1は無次元量となります。しかし、幾何次元は1とは限りません。X/Xの実体は、XからXへの線形写像の空間です。

●実例:熱流束密度と熱伝導度

以下の文章に出てくる「熱流束密度」と「熱伝導度」の物理次元を考えてみることにします。

流れの方向に垂直に微小面積dSをとったとき、dt時間のあいだにこのdSを通った熱の量が q dS dt であるとした場合に、大きさがqで流れと同じ方向を持つベクトルq(x, y, z, t)によってこの点における熱流束密度と定める



温度をu(x, y, z, t)とするとき、grad u を温度勾配と呼ぶ。

熱伝導に関するフーリエの法則 q = -λ grad u の比例定数λを、その物質の熱伝導度という。

Qを熱量(熱エネルギー)の空間、Kを温度の空間とします。

まず、qの物理次元は、熱量を時間と面積で割ったものなので、Q/(T・L3<2>) となります。幾何次元が3なのは、3次元空間で考えているからです。L3<2>はL3∧L3の略記で、3次元空間内の方向を持つ面積の空間です。

Q/(T・L3<2>) は、LMap(T・L3<2>, Q)とも書けるので、「時間と面積に複比例した熱量」を表現する写像の空間です。熱量の単位をJ(ジュール)*1とすれば、Q/(T・L3<2>)の単位は、J/(s・m2) です。まとめると:

  • 熱流束密度の次元はQ/(T・L3<2>)、単位はJ/(s・m2)。

次に、熱伝導度λは、q = -λ grad u という式から、grad u から q への写像の空間に入るはずです。grad u の物理次元は K/L3qの物理次元は既に求めたQ/(T・L3<2>)、よってλは LMap(K/L3, Q/(T・L3<2>) -- 線形代数の言葉で書けば、LMap(K\otimesL3*, Q\otimesT*\otimes(L3∧L3)*) となります。

LMap(K\otimesL3*, Q\otimesT*\otimes(L3∧L3)*) をテンソル積と双対だけで書き直すと、Q\otimesT*\otimes(L3∧L3)*\otimesK*\otimesL3、見やすくなるように「/」と「・」を使い整理すると:

  • (Q/T)・(L3/L3<2>)・K-1

この熱伝導度の単位はどうなるでしょう; (Q/T)の単位はJ/sですが、エネルギーを時間で割った量は仕事率(power)なので、J/s = W(ワット)です。K-1は温度の逆数、温度の単位に同じ'K'を使いますがケルビンです。問題は、(L3/L3<2>)の部分です。次節に書いた議論から、(L3/L3<2>)に属する量は長さの逆数の単位で計れるので、熱伝導度の単位はW/(m・K)となります。まとめると:

  • 熱伝導度の次元は(Q/T)・(L3/L3<2>)・K-1、単位はW/(m・K)。

●L3/(L3∧L3) の分析

L3/L3<2> = L3/(L3∧L3) はいったいどういう量でしょうか? 線形代数で考えると、LMap(L3∧L3, L3) なので、3次元空間内の面積(面積要素、面分ベクトル)を3次元空間内のベクトル(線要素)に変換する写像です。

m2(平方メートル)単位の面積(方向を持つが)を受け取ってm単位の長さに変換するので、この変換自体は、mを1個打ち消すためにm-1の単位を持つだろうと予想できます。

別な考え方として、LMap(L3∧L3, L3) をテンソル積で書いて L3\otimes(L3∧L3)*外積テンソル積の特殊なもの(交代テンソル、反対称テンソル)ですから、普通のテンソル積の空間 L3\otimes(L3\otimesL3)* に埋め込んで考えてもいいでしょう。

L3\otimes(L3\otimesL3)*を、(L3\otimesL3*)\otimesL3* と書き換えてみると、(L3\otimesL3*)はL3の自己変換(endomorphism)なので無次元量です。物理次元として残るのは、L3*だけで、この空間は長さの逆数(長さの空間の双対空間)の物理次元を持ちます。

ところで、LMap(L3∧L3, L3)は9成分を持つテンソル量ですが、熱伝導度からは事実上消え去っているのは何故でしょう。それは、L3∧L3とL3のあいだには標準的な同型があり、熱伝導度の定義のときに、暗黙にこの同型が選ばれているからです。別な言い方をすると、面積を大きさに持つベクトルと長さを大きさに持つベクトルが同一視され、単位の食い違いはm-1を付けることで吸収しているわけです。

●強い型付けとしての次元解析

以上のように、量や法則に対して、その次元(幾何次元と物理次元)をいちいち気にする態度は、プログラミングにおける強い型付け/型チェックに幾分か似ています。次元の計算と型の計算もよく似てます(同じことをやっていると言っていいでしょう)。「現実世界との対応が取りやすく、間違いを犯しにくくなる」というメリットも次元付けと型付けに共通したメリットです。

僕は、次元を取り払うと色や触感(食感?)がなくなった世界にいるような気分になります。色や触感を忘れ去ったほうが効率が上がることもありますが、なんか味気なくつまらないと思うな。

*1:僕はカロリーだと思っていたけど、最近は熱量もジュールなんだそうです。