ベクトル解析
ベクトル解析
ベクトル解析は多数の物理および数学モデルの基礎をなす.Wolfram言語はさまざまな座標系で傾き,発散,回転,ラプラシアンの基本的な操作を計算することができる.さらに,これらの演算子は非常に一般的な形式で実装されているので,いろいろな次元で使うことも,高階のテンソルで使うこともできる.
ベクトル導関数
| Grad[f,{x1,…,xn}] | スカラー関数 |
| Div[{f1,…,fn},{x1,…,xn}] | ベクトル値関数 |
| Curl[{f1,…,fn},{x1,…,xn}] | ベクトル値関数の回転 |
| Laplacian[f,{x1,…,xn}] | スカラー関数 |
Grad[x ^ 2 + y ^ 2 + z ^ 2, {x, y, z}]Div[{2 x, 2 y, 2z}, {x, y, z}]Curl[{y, -x, 2 z}, {x, y, z}]Laplacian[(1/Sqrt[x ^ 2 + y ^ 2 + z ^ 2]), {x, y, z}]//SimplifyGrad[x ^ 2 + y ^ 2 , {x, y}]Div[{w Sin[x ], w Cos[y], (x y/z), (w ^ 2 /z) }, {w, x, y, z}]Laplacian[x y z Exp[-(u ^ 2 + v ^ 2)], {u, v, x, y, z}]//SimplifyCurl[{y, -x}, {x, y}]Curl[Exp[x ^ 2 + y ^ 2 + z ^ 2]{u, v, -v, -u, x y z}, {u, v, x, y, z}]%//TensorSymmetry高階テンソルへの一般化
前セクションで紹介した4つの演算子はすべて,入力としてベクトルや高階のテンソルを取ることのできる一般的な演算子である.次元
のCurlでは,入力はスカラー,ベクトル,
階までのテンソルが取れる.他の関数では,入力テンソルで取れる階数には制約がない.
Grad[{x ^ 2 y, x y ^ 2}, {x, y}]Grad[%, {x, y}]Div[{{x y, x y ^ 2}, {x ^ 2 y, x ^ 2y ^ 2}}, {x, y}]TensorContract[Grad[{{x y, x y ^ 2}, {x ^ 2 y, x ^ 2y ^ 2}}, {x, y}], {{2, 3}}]TensorContractを使うと,最後のスロット以外のスロットにおける発散が取れる:
TensorContract[Grad[{{x y, x y ^ 2}, {x ^ 2 y, x ^ 2y ^ 2}}, {x, y}], {{1, 3}}]Laplacian[{x ^ 2 y, x y ^ 2}, {x, y}]Curl[ x y z, {x, y, z}]//NormalCurl[ {x, y, z}, {x, y, z}]Curl[ {{0, x y, -x z}, {-x y, 0, y z}, {x z, -y z, 0}}, {x, y, z}]HodgeDual@ Symmetrize[Grad[x y z, {x, y, z}], Antisymmetric[All]]//NormalHodgeDual@ Symmetrize[Grad[{x, y, z}, {x, y, z}], Antisymmetric[All]]//NormalHodgeDual@ Symmetrize[Grad[{{0, x y, -x z}, {-x y, 0, y z}, {x z, -y z, 0}}, {x, y, z}], Antisymmetric[All]]//Normal既知の座標チャート
Wolfram言語には,多数の座標チャートに関する情報が含まれている.関数CoordinateChartDataはこの情報を取得するためのメカニズムを提供する.
| CoordinateChartData[{"coordsys",n}] | |
| CoordinateChartData[{All,n}] | |
| CoordinateChartData[{All,All,n}] | |
| CoordinateChartData[chart,"prop"] | 指定された座標チャートの特性 "prop" |
| CoordinateChartData[chart,"prop",pt] | 点 pt において指定された座標チャートの特性 "prop" |
以下は利用できる座標チャートを調べる方法を説明した例である.もっとも一般的な形式では,座標チャートの指定には座標系の名前,計量,次元が含まれる.多くのチャートでパラメータも必要とされる.これらは指定することもできるし,デフォルトのままにすることもできる.
CoordinateChartData[{"Cartesian", 3}]CoordinateChartData[{"ProlateSpheroidal", 3}]CoordinateChartData[{{"ProlateSpheroidal", 1}, 3}]CoordinateChartData[{{"Confocal", {3, 2, 1}}, 3}]CoordinateChartData[{All, 2}]CoordinateChartData[{All, "Euclidean", 2}]CoordinateChartData[{All, All, 2}]CoordinateChartDataは異なる座標チャートに関する多数の特性を含んでいる.もっとも基本となるのが計量である.これは最終的に座標チャートすべての長さと体積を決定する.しかし,直交座標系におけるベクトル解析においては,スケール因子と体積因子を考える方が一般的である.
CoordinateChartData["Polar", "Metric", {r, θ}]CoordinateChartData["Polar", "ScaleFactors", {r, θ}]CoordinateChartData["Polar", "VolumeFactor", {r, θ}]c[t_] := {μ[t], η[t]}CoordinateChartData["Elliptic", "ScaleFactors", {μ[t], η[t]}]vel = CoordinateChartData["Elliptic", "ScaleFactors", {μ[t], η[t]}] c'[t]Sqrt[vel.vel]% == Sqrt[c'[t]. CoordinateChartData["Elliptic", "Metric", {μ[t], η[t]}] . c'[t]]CoordinateChartData[{{"Bipolar", 1}}, "VolumeFactor", {θ, ξ}]Times @@ CoordinateChartData[{{"Bipolar", 1}}, "ScaleFactors", {θ, ξ}]NIntegrate[CoordinateChartData[{{"Bipolar", 1}}, "VolumeFactor", {θ, ξ}], {θ, -Pi, Pi}, {ξ, 1 / 2, 1}]CoordinateChartData["Properties"]直交座標系以外の座標系でのベクトル導関数
| Grad[f,{x1,…,xn},chart] | 指定された座標チャートにおける傾き |
| Div[{f1,…,fn},{x1,…,xn},chart] | 指定された座標チャートにおける発散 |
| Curl[{f1,…,fn},{x1,…,xn},chart] | 指定された座標チャートにおける回転 |
| Laplacian[f,{x1,…,xn},chart] | 指定された座標チャートにおけるラプラシアン |
これらのコマンドにおける配列は,正規直交基底における要素として扱われる.これは入出力の両方に当てはまる.その結果,物理的なドット積はDotを使って計算できる.
Grad[f[r, θ], {r, θ}, "Polar"]Grad[f[r, θ], {r, θ}] / CoordinateChartData["Polar", "ScaleFactors", {r, θ}]Grad[{f^(1, 0)[r, θ], (f^(0, 1)[r, θ]/r)}, {r, θ}, "Polar"]//SimplifyGrad[#, {r, θ}, "Polar"]& /@ {f^(1, 0)[r, θ], (f^(0, 1)[r, θ]/r)}//SimplifyDiv[{1, μ}, {μ, θ}, {{"Elliptic", a}}]//SimplifyTensorContract[ Grad[{1, μ}, {μ, θ}, {{"Elliptic", a}}], {{1, 2}}]//SimplifyDiv[{{μ ^ 2, 0}, {μ θ, θ ^ 2}}, {μ, θ}, "Bipolar"]//SimplifyDiv[#, {μ, θ}, "Bipolar"]& /@ {{μ ^ 2, 0}, {μ θ, θ ^ 2}}//SimplifyDiv[Grad[f[r, θ], {r, θ}, "Polar"], {r, θ}, "Polar"]//SimplifyLaplacian[f[r, θ], {r, θ}, "Polar"]//SimplifyLaplacian[ {r, r Sin[θ], r Cos[θ] Sinh[φ]}, {r, θ, φ}, "Spherical"]//SimplifyLaplacian[ #, {r, θ, φ}, "Spherical"]& /@ {r, r Sin[θ], r Cos[θ] Sinh[φ]}Curl[{f[r, θ, z], g[r, θ, z], z[r, θ, z]}, {r, θ, z}, "Cylindrical"]//ExpandCurl[f[r, θ], {r, θ}, "Polar"]従来の定義
scales = CoordinateChartData["CircularParabolic", "ScaleFactors", {μ, η, φ}]Grad[f[μ, η, φ], {μ, η, φ}] / scales% == Grad[f[μ, η, φ], {μ, η, φ}, "CircularParabolic"]vol = CoordinateChartData["PlanarParabolic", "VolumeFactor", {μ, ν}]scales = CoordinateChartData["PlanarParabolic", "ScaleFactors", {μ, ν}](1/vol)Div[vol {f[μ, ν], g[μ, ν]} / scales, {μ, ν}]//Simplify% == Div[{f[μ, ν], g[μ, ν]}, {μ, ν}, "PlanarParabolic"]//Simplifyvol = CoordinateChartData["CircularParabolic", "VolumeFactor", {μ, η, φ}]scales = CoordinateChartData["CircularParabolic", "ScaleFactors", {μ, η, φ}](1/vol)Div[vol Grad[f[μ, η, φ], {μ, η, φ}] / scales ^ 2, {μ, η, φ}]//Expand% == (Laplacian[f[μ, η, φ], {μ, η, φ}, "CircularParabolic"])//Simplifyvol = CoordinateChartData["Spherical", "VolumeFactor", {r, θ, φ}]scales = CoordinateChartData["Spherical", "ScaleFactors", {r, θ, φ}]scales Curl[ scales {f[r, θ, φ], g[r, θ, φ], h[r, θ, φ]}, {r, θ, φ}] / vol//Expand% == Curl[{f[r, θ, φ], g[r, θ, φ], h[r, θ, φ]}, {r, θ, φ}, "Spherical"]//Simplify関連するガイド
-
▪
- ベクトル解析
関連するテクニカルノート
-
▪
- 座標系の変換