改变坐标系统
改变坐标系统
| CoordinateTransformData[transf,"Mapping"] | 以纯函数在坐标系统之间进行映射 |
| CoordinateTransformData[transf,"Mapping",pt] | pt 的新坐标值 |
| CoordinateTransform[transf,pt] | pt 的新坐标值 |
CoordinateTransformData["Polar" -> "Cartesian", "Mapping", {r, θ}]CoordinateTransformData["Cartesian" -> "Spherical", "Mapping", {1, 1, 0}]映射函数可以从 CoordinateTransformData 中索要,并且存储起来将来使用:
mapping = CoordinateTransformData[{"Cartesian" -> "Hyperspherical", 3} , "Mapping"]mapping[{1, 1, 0}]使用 Map,它可以一次性用于几个点:
mapping /@ {{0, 1, 0}, {0, 0, 1}, {0, 1, 1}, {1, 1, 1}}函数 CoordinateTransform 提供了方便的机制,用于对一个或者几个点进行变换.
CoordinateTransform["Spherical" -> "Cylindrical", {1, π / 3, π / 4}]CoordinateTransform["Spherical" -> "Cartesian", {1, π / 3, π / 4}] === CoordinateTransform["Cylindrical" -> "Cartesian", {Sqrt[3] / 2, π / 4, 1 / 2}]CoordinateTransform[{{"ProlateSpheroidal", a} -> "Hyperspherical", 3}, {η, θ, ψ}]//SimplifyCoordinateTransform["Cartesian" -> "Polar", {{1, 1}, {1, -1}, {0, -2}}]当在两个坐标系统之间变换场时,以旧系统中的变量给出的场用新系统中的变量重新表示. 除了系统之间的映射,需要某些额外步骤:使用新变量求解旧变量,在这些表达式中替换,并且在向量和张量场的情况中,考虑两个坐标系统之间的基向量之间的不同. 所有这些步骤都由命令 TransformedField 执行.
| TransformedField[transf,f,{x1,x2,…,xn}->{y1,y2,…,yn}] | 将一个标量、向量或者张量场 f 从坐标 xi 转化为坐标 yi |
TransformedField["Cartesian" -> "Cylindrical", x ^ 2 + y ^ 2 + z ^ 2, {x, y, z} -> {r, θ, ζ}]//SimplifyCoordinateTransform["Cartesian" -> "Cylindrical", {x, y, z}]Solve[Thread[% == {r, θ, ζ}], {x, y, z}]//Simplifyx ^ 2 + y ^ 2 + z ^ 2 /. First[%]//SimplifyTransformedField[{"Cylindrical" -> {"ProlateSpheroidal", a}, 3}, Sinh[r]Sin[θ] Cos[z] , {r, θ, z} -> {η, Θ, ψ}]//FullSimplify由于需要考虑基向量的改变,向量和张量情况更加复杂. 所以,向量的变换不是分量的变换. 对于被解释为标准正交基中的分量的数组,联系两个基的旋转矩阵由 CoordinateTransformData 属性 "OrthonormalBasisRotation" 给出.
TransformedField["Cartesian" -> "Spherical", {x, y, z}, {x, y, z} -> {r, θ, φ}]//SimplifyCoordinateTransform["Cartesian" -> "Spherical", {x, y, z}]replacements = First@Solve[Thread[% == {r, θ, φ}], {x, y, z}]//Simplifyrotation = Transpose@CoordinateTransformData["Cartesian" -> "Spherical", "OrthonormalBasisRotation", {x, y, z}]Simplify[rotation. {x, y, z} /. replacements, CoordinateChartData["Spherical", "CoordinateRangeAssumptions", {r, θ, φ}]]使用 Map,标量场列表可以在坐标之间变换. 结果与使用相同分量的向量场的变换相当不同:
TransformedField["Cartesian" -> "Spherical", #, {x, y, z} -> {r, θ, φ}]& /@ {x, y, z}TransformedField["Cartesian" -> "Spherical", {x, y, z}, {x, y, z} -> {r, θ, φ}]//SimplifyTransformedField["Spherical" -> "Cartesian", {0, 0, r Sin[θ]}, {r, θ, φ} -> {x, y, z}]TransformedField["Hyperspherical" -> "Cartesian", {0, 0, r Sin[θ]}, {r, θ, φ} -> {x, y, z}]//SimplifyTransformedField[{"Cartesian" -> {"ProlateSpheroidal", a}, 3}, {1, 0, 0} , {x, y, z} -> {η, Θ, ψ}]matrix = {{x ^ 2 + y ^ 2, 0}, {0, x ^ 2y ^ 2}}TransformedField["Cartesian" -> "Polar", matrix, {x, y} -> {r, θ}]//Simplify使用 Map,可能将矩阵转化为两个向量组成的列表,或者四个标量场的矩阵. 结果在每种情况下相当不同:
Map[TransformedField[ "Cartesian" -> "Polar", #, {x, y} -> {r, θ}]&, matrix]//ExpandMap[TransformedField[ "Cartesian" -> "Polar", #, {x, y} -> {r, θ}]&, matrix, {2}]//Simplify| CoordinateTransformData[transf,prop,pt] | 计算点 pt 处变换的属性 |
| CoordinateChartData[chart,prop,pt] | 计算点 pt 处图表的属性 |
rot = CoordinateTransformData["Cartesian" -> "Spherical", "OrthonormalBasisRotation", {x, y, z}]rot. {1, 0, 0}rot. {0, 0, 1}若要计算旋转矩阵,需要定义正交系统中的标准正交基的比例因子. 注意, CoordinateTransform 用于确保两个比例因子集合在相同点计算:
cartScales = CoordinateChartData["Cartesian", "ScaleFactors", {x, y, z}]sphereScales = CoordinateChartData["Spherical", "ScaleFactors", CoordinateTransform["Cartesian" -> "Spherical", {x, y, z}]]jac = Transpose @ CoordinateTransformData["Cartesian" -> "Spherical", "MappingJacobian", {x, y, z}]Inverse@DiagonalMatrix[cartScales].jac.DiagonalMatrix[sphereScales] == rotrotC = CoordinateTransformData["Cylindrical" -> "Spherical", "OrthonormalBasisRotation", {r, θ, z}]//SimplifyrotC . {1, 0, 0}rotC . {0, 0, 1}cylScales = CoordinateChartData["Cylindrical", "ScaleFactors", {r, θ, z}]cylSphereScales = CoordinateChartData["Spherical", "ScaleFactors", CoordinateTransform["Cylindrical" -> "Spherical", {r, θ, z}]]jacC = Transpose[CoordinateTransformData["Cylindrical" -> "Spherical", "MappingJacobian", {r, θ, z}]]Inverse@DiagonalMatrix[cylScales].jacC.DiagonalMatrix[cylSphereScales] === rotC相关指南
-
▪
- 向量分析
相关技术笔记
-
▪
- 向量分析