Mathematica-Neigungsfelder

  • Ich möchte ein Gefällefeld erstellen. Hier ist der Code

     slopefield = 
     VectorPlot[{1, .005 * p*(10 - p) }, {t, -1.5, 20}, {p, -10, 16}, 
      Ticks -> None, AxesLabel -> {t, p},  Axes -> True, 
      VectorScale -> {Tiny, Automatic, None}, VectorPoints -> 15]
     

    Ich löste die Differentialgleichungen und zeichnete die Kurven manuell auf. Drei Fragen:

    1. Gibt es eine einfachere Möglichkeit, dies zu tun?
    2. Ticks - & gt; Keiner scheint zu funktionieren. Ich bekomme immer noch Labels für die Markierungen.
    3. Ich möchte 2 Markierungen selektiv beschriften.
    22 April 2012
    Michael PryorUnknown user
3 answers
  • Ich gehe hier davon aus, dass die von Ihnen erwähnten Kurven Stromlinien des Vektorfeldes sind. Sie können diese automatisch darstellen, ohne dass Sie Differentialgleichungen lösen müssen, indem Sie die Optionen StreamPoints verwenden, um beispielsweise die Stromlinien, die durch die Punkte gehen,

     points =  Transpose@ArrayPad[{Range[-10, 16, 2]}, {{1, 0}, {0, 0}}]
    
    (* ==> {{0, -10}, {0, -8}, {0, -6}, {0, -4}, {0, -2}, {0, 0}, {0, 2}, {0, 4}, 
            {0, 6}, {0, 8}, {0, 10}, {0, 12}, {0, 14}, {0, 16}} *)
     

    Sie können

     slopefield = 
     VectorPlot[{1, .005*p*(10 - p)}, {t, -1.5, 20}, {p, -10, 16}, 
      FrameTicks -> None, AxesLabel -> {t, p}, Axes -> True, 
      VectorScale -> {Tiny, Automatic, None}, VectorPoints -> 15, 
      StreamPoints -> points,
      StreamStyle -> {Red, "Line"}]
     

    Mathematica-Neigungsfelder

    21 April 2012
    EAMannAndrew
  • Um das Vektorfeld und die Stromlinien (Kurven) zusammen zu zeichnen, gibt es zwei weitere Diagrammfunktionen, die auf diesen Zweck spezialisiert sind:

    Der Unterschied zu VectorPlot besteht darin, dass Mathematica automatisch einen Satz von Kurven für Sie auswählen kann. Sie können die Startpunkte für die Kurven angeben, müssen jedoch nicht:

     StreamPlot[{1, .005*p*(10 - p)}, {t, -1.5, 20}, {p, -10, 16}, 
     AxesLabel -> {t, p}, Axes -> True, 
     VectorScale -> {Tiny, Automatic, None}, VectorPoints -> 15,
     StreamStyle -> Red, FrameTicks -> {{5, 10}, {-10, 10}, {}, {}}]
     

    Mathematica-Neigungsfelder

    Hier habe ich auch eine FrameTicks Spezifikation hinzugefügt, die mehrere spezielle Punkte auf der horizontalen und vertikalen Achse beschriftet.

    Die andere Alternative, die zusätzliche visuelle Informationen enthält, lautet:

     LineIntegralConvolutionPlot[{1, .005*p*(10 - p)}, {t, -1.5, 
      20}, {p, -10, 16}, Ticks -> None, AxesLabel -> {t, p}, Axes -> True,
      VectorScale -> {Tiny, Automatic, None}, VectorPoints -> 15, 
     VectorStyle -> LightGray, ColorFunction -> ColorData["Rainbow"], 
     FrameTicks -> {{5, 10}, {-10, 10}, {}, {}}, Background -> Black, 
     BaseStyle -> White, FrameTicksStyle -> Yellow, ImageMargins -> 5]
     

    Mathematica-Neigungsfelder

    Das letzte Diagramm kann durch Hinzufügen der aktuellen Stromlinien mit der Option StreamPoints (siehe Dokumentation) angepasst werden, der farbige Hintergrund wird jedoch verwendet der gleiche Zweck. Die Idee ist, dass das Hintergrundmuster physisch mit dem Muster identisch ist, das Sie (z. B.) aus Grassamen in einem elektrischen Feld oder aus Eisenablagerung in einem Magnetfeld usw. erhalten. Und natürlich kodiert die Farbe Informationen über die Feldstärke.

    22 April 2012
    Michael PryorUnknown user
  • Beispiel:

     VectorPlot[{1, .005*p*(10 - p)}, {t, -1.5, 20}, {p, -10, 16}, 
              FrameTicks -> {
                  Join[{{0, "ZERO", {0, .1}, Red}}, Table[{i, ""}, {i, -1.5, 20, 3}]], 
                                                    Table[{i, ""}, {i, -10, 16, 3}]}, 
              AxesLabel -> {t, p}, 
              Frame     -> True, 
              VectorScale -> {Tiny, Automatic, None}, 
              VectorPoints -> 15]
     

    Mathematica-Neigungsfelder

    21 April 2012
    Dr. belisarius