座標系の変換
座標系を変換するには,2つのまったく異なる操作がかかわることがある.一つは同じ点に対応する座標値を再計算することであり,もう一つは新しい変数について場を再表現するということである.Wolfram言語はこの両方の操作を実行する関数を提供している.
CoordinateTransformData[transf,"Mapping"] | 座標系同士を順関数としてマッピングする |
CoordinateTransformData[transf,"Mapping",pt] | pt の新しい座標値 |
CoordinateTransform[transf,pt] | pt の新しい座標値 |
マッピング関数はCoordinateTransformDataからリクエストすることができ,後で使うために保存しておくことができる:
Mapを使うと,一度にいくつもの点に適用することができる:
関数CoordinateTransformは1点,もしくはいくつかの点を変換するための便利なメカニズムを提供する.
CoordinateTransformでも,パラメータはCoordinateTransformDataと同様に指定することができる.以下はパラメータが である扁長回転楕円体座標の生成点を 超球座標系に変換する:
2つの座標系の間で場を変換する場合,一つの座標系の変数で与えられた場は別の座標系の変数で再表現される.2つの座標系の間のマッピングに加え,追加のステップが必要となる.それは,前の変数を新しい変数で解いたり,これらの表現に代入したり,ベクトルやテンソル場のときは2つの座標系の間の基底ベクトルの差分を考慮したりすることである.これらすべてのステップが,コマンドTransformedFieldで実行できる.
TransformedField[transf,f,{x1,x2,…,xn}->{y1,y2,…,yn}] | スカラー,ベクトル,テンソル場 f を座標系 xi から座標系 yi に変換する |
前の例題は手計算で行うことができる.CoordinateTransformの場合とは異なり,これらのステップが意味のあるものにするためには,とは数値等の座標値ではなく座標名でなければならない:
ベクトルとテンソルの場合は,基底ベクトルの変化を考慮に入れる必要があるため,より複雑である.その結果,ベクトルの変換はその成分の変換だけでは収まらない.配列は,正規直交基底の成分として解釈され,2つの基底を関連付ける回転行列は,CoordinateTransformDataのプロパティ"OrthonormalBasisRotation"により与えられる.
上記の例題を再生するためには2つの情報が必要である.一つはスカラーの場合のような変数置換規則であり,もう一つは基底回転行列である.回転行列は基底間の回転を指定するので,その転置は成分に作用を及ぼす行列である:
ベクトルを座標系間で変換するためには,まずベクトルに回転行列を掛けて,基底の要素を基底の要素に変えなければならない.これは,ベクトルを局所的な基底ベクトル上に投影することに等しい.その後,置換規則を適用する:
Mapを使うと,スカラー場のリストを座標系間で変換するすることができる.その結果は,同じ要素を持つベクトル場を変換することとは全く異なっている:
座標系のパラメータはTransformedFieldで指定することができる.以下はベクトル場 を直交座標系から,パラメータが の扁長回転楕円体座標系に変換する:
Mapを使うと,行列を2つのベクトルのリスト,あるいは4つのスカラー場の行列として変換することができる.それぞれの場合で結果は大きく異なる:
上で使われた基底回転ベクトルは,マッピングのヤコビアン行列とそれぞれのチャートの直交基底の両方についての情報を組み合せている,直交座標系の場合,基底回転ベクトルはヤコビアンと2セットのスケール因子から構築される.
CoordinateTransformData[transf,prop,pt] | 点 pt における変換のプロパティを計算する |
CoordinateChartData[chart,prop,pt] | 点 pt におけるチャートのプロパティを計算する |
直交系で正規直交基底を定義する回転ベクトルを計算するためには,,スケール因子が必要である.スケール因子のどちらの集合も同じ点で評価されることを確実にするためにCoordinateTransformが使われる: