함수에 대한 빈 그래프 [중복]

Sep 24 2020

간단한 명령을 사용하여 다음 함수의 동적 플롯을 얻으려고했습니다.

g[x_, y_, z_] := (x^3 y^5 E^(-2*z*n))/(x^2 + y^2)

Manipulate[
  Plot[g[x, y, z], {x, -10, 10}, PlotRange -> Automatic], 
  {n, -7, 7}]

그러나 나는 빈 플롯을 얻습니다. 이 명령에 무엇이 잘못 되었습니까?

답변

4 BobHanlon Sep 24 2020 at 16:51
Clear["Global`*"]

g[x_, y_, z_, n_] := (x^3 y^5 Exp[-2*z*n])/(x^2 + y^2)

Manipulate[
 Module[{x, func, t, var},
  If[plt == 1,
   var = "z"; func = g @@ Rationalize[{x, y, t, n}],
   var = "y"; func = g @@ Rationalize[{x, t, z, n}]];
  Plot3D[func, {x, -10, 10}, {t, -10, 10},
   WorkingPrecision -> 20,
   MaxRecursion -> 5,
   AxesLabel -> (Style[#, 14, Italic, Bold] & /@ {"x", var, "g "}),
   ClippingStyle -> None,
   PlotLabel -> Style[StringForm["g = ``", 
      g["x", "y", "z", "n"]], Italic, 14]]],
 {{n, 0}, -7, 7, 0.2, Appearance -> "Labeled"},
 {{y, 1}, -10, 10, 0.2, Appearance -> "Labeled"},
 {{z, 1}, -10, 10, 0.2, Appearance -> "Labeled"},
 {{plt, 2, "Plot"}, {
   1 -> "Fixed value of y",
   2 -> "Fixed value of z"}},
 LabelStyle -> Medium]

그러나 고정 된 값 z과 상대적으로 큰 양의 곱의 n * z경우 플롯이 오류 메시지없이 예기치 않게 어두워집니다. 예를 들면

3 cvgmt Sep 24 2020 at 16:19

SliceContourPlot3D레벨 세트를 표시 하는 데 사용하는 g[x,y,z,n]것이 쉽고 빠릅니다.

Clear["`*"];
g[x_, y_, z_, n_] := (x^3 y^5 E^(-2*z*n))/(x^2 + y^2);
Manipulate[
 SliceContourPlot3D[
  g[x, y, z, n], {"CenterPlanes"}, {x, -10, 10}, {y, -10, 
   10}, {z, -10, 10}, Contours -> 50, PerformanceGoal -> "Quality", 
  ColorFunction -> "BrightBands", PlotTheme -> "Detailed"], {n, -7, 7,
   1}]

SteffenJaeschke Sep 24 2020 at 20:24

질문을 읽는 것부터 시작하겠습니다.

주어진 기능은

 (x^3 y^5 E^(-2*z*n))/(x^2 + y^2)

이것은 x, y, z 및 n에 따라 다릅니다. 따라서 함수는 다음 네 가지 매개 변수를 반영해야합니다.

g[x_,y_,z_,n_]:=(x^3 y^5 E^(-2*z*n))/(x^2 + y^2)

분모의 다항식에는에 0이 없습니다 Reals. 지정자의 다항식은 양의 1 사분면에서 n <0의 경우, 3 사분면의 n> 0에서 우세한 계수 함수를 갖습니다. 따라서 AbsReal @ x> 1 && AbsReal @ y >> 1에 대한이 사분면의 플롯을 시각화하는 것은 현명하지 않습니다.

그물이 더 좋은지 윤곽이 좋은지 여부는 취향의 문제입니다.

첫 번째 대답은 플롯 표면에 문제를 일으 킵니다

..

내 통찰력에 관한 한 {-10,10} 범위는 이것을 주요 목표로 처리합니다. WorkingPrecision 및 MaxRecursion은 모든 매개 변수 조합에 대한 문제를 해결하지 않기 때문에 최대 한계가 필요합니다. 표면의 경계는 {0,2} x {0,2}에 대해 매우 견고해질 수도 있습니다.

이러한 실현은 매끄럽게 보이고 통찰력을 허용합니다.

Manipulate[
 Module[{x, func, t, var}, 
  If[plt == 1, var = "z"; func = g @@ Rationalize[{x, y, t, n}], 
   var = "y"; func = g @@ Rationalize[{x, t, z, n}]];
  Plot3D[Table[func /. n -> m, {m, -4, 4, 2}], {x, -1, 1}, {t, -1, 1},
    WorkingPrecision -> 20, MaxRecursion -> 5, 
   AxesLabel -> (Style[#, 14, Italic, Bold] & /@ {"x", var, "g "}), 
   ClippingStyle -> None, 
   PlotLabel -> 
    Style[StringForm["g = ``", g["x", "y", "z", "n"]], Italic, 14], 
   ImageSize -> 600]], {{y, 1}, -1, 1, 0.2, 
  Appearance -> "Labeled"}, {{z, 1}, -1, 1, 0.2, 
  Appearance -> "Labeled"}, {{plt, 2, 
   "Plot"}, {1 -> "Fixed value of y", 2 -> "Fixed value of z"}}, 
 LabelStyle -> Medium]

전체 기능 세트가 단위 큐브의 하위 영역에 적합하다는 아이디어에 기반합니다. 그리고 그것은 용감합니다.

Plot[Table[g[x, 1, t, -1], {t, -2, 2, 1}], {x, -5, 5}, 
 PlotRange -> {All, {-25, 25}}]

Table[Plot[Table[g[x, y, t, -1], {t, -2, 2, 1}], {x, -5, 5}, 
  PlotRange -> {All, {-25, 25}}], {y, -8, 8, 2}]

포스트 프로세싱으로 3D 윤곽을 부드럽게하는 이 질문 에는 흥미로운 대답이 있습니다.

일반 플로팅으로 돌아가려면 PlotPlots@ bob-hanlon이 제공하는 예제를 사용 하고 vary n. 혼란 스럽지만 전혀 도움이되지 않습니다. 지표면에 내장 된 그리드는 잊어 버리고 다음 아이디어에 따라 개인 선택을 사용하십시오 . 지표면에 2D 벡터 경로 플로팅 . 이 질문은 3d 플롯의 인공물에 관한 것 입니다. 더 좋은 아이디어가 있습니다.

나중에 다시 올게요.