พื้นผิวที่เป็นอุปกรณ์โดยใช้ ParametricPlot

Oct 17 2020

ผมจึงพยายามวาดเส้นที่ฟังก์ชันต่อไปนี้เป็นค่าคงที่ $$ \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)

คำตอบ

5 cvgmt Oct 17 2020 at 21:17

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"}]

5 Natas Oct 17 2020 at 17:37

เกี่ยวกับคำถามของคุณเป็นไปทำไม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}
  ]

1 VTynianski Oct 17 2020 at 18:33

@Natas สิ่งนี้คือคำถามที่ว่า equipotentials ไม่ได้ถูกพล็อตในพิกัดเชิงขั้วพวกมันถูกพล็อตในพิกัดพิเศษบางอย่างที่คล้ายกับพิกัดเชิงขั้ว (ดูอาร์กิวเมนต์แรกใน ParametricPlot "ParametricPlot [{Sqrt [r ^ 2 + 0.99 ^ 2] * บาป [[เธต้า]], r คอส [[เธต้า]]}, ... "). นั่นคือเหตุผลที่ใช้วิธี ParametricPlot แทน ContourPlot ช่วยให้คุณสามารถใช้พิกัดที่กำหนดโดยผู้ใช้ที่ไม่ได้อยู่ใน Mathematica ด้วยพิกัดเชิงขั้วคุณสามารถทำการแปลงเป็นพิกัดคาร์ทีเซียน "โพลาร์" -> "คาร์ทีเซียน" ได้เนื่องจากมีอยู่ใน Mathematica แต่ไม่ใช่พิกัดที่ผู้ใช้กำหนดซึ่งเป็นกรณีนี้ ฉันไม่แน่ใจว่า ContourPlot รองรับพิกัดที่ผู้ใช้กำหนดหรือไม่