พื้นผิวที่เป็นอุปกรณ์โดยใช้ ParametricPlot
ผมจึงพยายามวาดเส้นที่ฟังก์ชันต่อไปนี้เป็นค่าคงที่ $$ \frac{\left(-\Sigma (r,0.99,\theta )+2 r^2-0.99^2 r \sin ^2(\theta )\right)^2}{\Delta (r,1,0.99) \Sigma (r,0.99,\theta )^3}+\frac{0.99^4 \sin ^2(\theta ) \cos ^2(\theta ) \Delta (r,1,0.99)}{\Sigma (r,0.99,\theta )^4} $$ ที่ไหน $$\Delta (r,M,a):=a^2-2 M r+r^2\quad\text{and}\quad\Sigma (r,a,\theta):=a^2 \cos ^2(\theta )+r^2. $$ฉันใช้รหัสต่อไปนี้ซึ่งได้รับแรงบันดาลใจจากความคิดเห็นที่สองในโพสต์นี้
Σ[r_, a_, θ_] := r^2 + a^2*Cos[θ]^2;
Δ[r_, M_, a_] := r^2 - 2 M r + a^2;
cValues =
{0.01, 0.1, 0.08, 0.06, 0.003, 0.005, 0.12, 0.14, 0.2, 0.15, 0.02, 0.04,
0.03, 0.18, 0.22, 1.5, 2.3, 0.002, 0.0025, 0.003, 0.0015, 0.0018, 0.0023,
0.0011, 0.0009, 0.0008, 0.0007, 0.0006, 0.0005};
trajectories =
Function[{x, y, r, θ},
Σ[r, 0.99, θ]^(-3)*Δ[r, 1, 0.99]^(-1)*(2 r^2 -
Σ[r, 0.99, θ] - 0.99^2 r Sin[θ]^2)^2 +
Δ[r, 1, 0.99]*0.99^4*Σ[r, 0.99, θ]^(-4) Sin[θ]^2 Cos[θ]^2];
ParametricPlot[{Sqrt[r^2 + 0.99^2]*Sin[θ], r Cos[θ]}, {r, 0, 5}, {θ, 0, Pi/2},
PlotStyle -> {Green}, MeshFunctions -> {trajectories}, Mesh -> {cValues}]
และให้ผลลัพธ์ดังที่แสดงไว้ที่นี่ (อันที่สองคือรุ่นที่ซูมออกของรุ่นแรก)
อย่างที่คุณเห็นมุมล่างซ้ายมีพฤติกรรมแปลก ๆ และฉันไม่แน่ใจว่าทำไม ฉันยังไม่เข้าใจว่าtrajectoriesส่วนหนึ่งของโค้ดนี้กำลังทำอะไรอยู่อย่างแม่นยำยิ่งขึ้นทำไมจึงFunctionมีอาร์กิวเมนต์ 4 ตัวในตอนต้น กรุณาช่วย.
(บริบท: ฉันกำลังพยายามพล็อตเส้นของการเร่งความเร็วคงที่ในกาลอวกาศ Kerr)
คำตอบ
MeshFunctionsเป็นวิธีการที่มีประสิทธิภาพซึ่งฉันมักจะใช้
ที่นี่เราดูMeshจาก 3D ดังนั้นเราจึงวาดไฟล์ParametricPlot3D $$\begin{cases}x=\sqrt{r^2+0.9801} \sin (\theta ),\\ y=r \cos (\theta ),\\ z=f(r,\theta)\end{cases}$$
เราตั้งค่าViewPoint={0,0,Infinity}และใช้งานViewProjection -> "Orthographic"
Clear["`*"];
Σ[r_, a_, θ_] = r^2 + a^2*Cos[θ]^2;
Δ[r_, M_, a_] = r^2 - 2 M r + a^2;
f[r_, θ_] = Σ[r,
0.99, θ]^(-3)*Δ[r, 1,
0.99]^(-1)*(2 r^2 - Σ[r, 0.99, θ] -
0.99^2 r Sin[θ]^2)^2 + Δ[r, 1,
0.99]*0.99^4*Σ[r,
0.99, θ]^(-4) Sin[θ]^2 Cos[θ]^2;
cValues = {0.01, 0.1, 0.08, 0.06, 0.003, 0.005, 0.12, 0.14, 0.2, 0.15,
0.02, 0.04, 0.03, 0.18, 0.22, 1.5, 2.3, 0.002, 0.0025, 0.003,
0.0015, 0.0018, 0.0023, 0.0011, 0.0009, 0.0008, 0.0007, 0.0006,
0.0005};
ParametricPlot3D[{Sqrt[r^2 + 0.99^2]*Sin[θ], r Cos[θ],
f[r, θ]}, {r, 0, 5}, {θ, 0, π/2},
PlotPoints -> 150, MeshFunctions -> (#3 &), Mesh -> {cValues},
PlotStyle -> Green, ViewProjection -> "Orthographic",
ViewPoint -> {0, 0, ∞}, Lighting -> {White, "Neutral"}]
เกี่ยวกับคำถามของคุณเป็นไปทำไมtrajectoriesมีสี่ข้อโต้แย้ง: MeshFunctionsสำหรับParametricPlotความจำเป็นใน 3-4 ข้อโต้แย้ง สองตัวแรกตรงกับพิกัดของพล็อตสองตัวสุดท้าย (หรือหนึ่ง) กับพารามิเตอร์ของParametricPlot.
เพื่อให้สิ่งนี้ดีขึ้นให้พิจารณาตัวอย่างต่อไปนี้:
funs = {
Function[{x, y, u, v}, x],
Function[{x, y, u, v}, y],
Function[{x, y, u, v}, u],
Function[{x, y, u, v}, v]
};
Row@Table[ParametricPlot[
{r Cos[\[Theta]], r Sin[\[Theta]]},
{r, 0, 1}, {\[Theta], 0, \[Pi]/2},
MeshFunctions -> fun,
Mesh -> 10,
ImageSize -> Small
], {fun, funs}
]
@Natas สิ่งนี้คือคำถามที่ว่า equipotentials ไม่ได้ถูกพล็อตในพิกัดเชิงขั้วพวกมันถูกพล็อตในพิกัดพิเศษบางอย่างที่คล้ายกับพิกัดเชิงขั้ว (ดูอาร์กิวเมนต์แรกใน ParametricPlot "ParametricPlot [{Sqrt [r ^ 2 + 0.99 ^ 2] * บาป [[เธต้า]], r คอส [[เธต้า]]}, ... "). นั่นคือเหตุผลที่ใช้วิธี ParametricPlot แทน ContourPlot ช่วยให้คุณสามารถใช้พิกัดที่กำหนดโดยผู้ใช้ที่ไม่ได้อยู่ใน Mathematica ด้วยพิกัดเชิงขั้วคุณสามารถทำการแปลงเป็นพิกัดคาร์ทีเซียน "โพลาร์" -> "คาร์ทีเซียน" ได้เนื่องจากมีอยู่ใน Mathematica แต่ไม่ใช่พิกัดที่ผู้ใช้กำหนดซึ่งเป็นกรณีนี้ ฉันไม่แน่ใจว่า ContourPlot รองรับพิกัดที่ผู้ใช้กำหนดหรือไม่