Plotten - Sage Tutorial

Skip to content
Back to top
View this page
Edit this page

# Plotten

Sage kann zwei- und dreidimensionale Plots erzeugen.

## Zweidimensionale Plots

Sage kann in zwei Dimensionen Kreise, Linien und Polygone zeichnen, sowie Plots von Funktionen in kartesischen Koordinaten und Plots in Polarkoordinaten, Konturplots und Plots von Vektorfeldern. Wir geben davon im Folgenden einige Beispiele an. Für weitere Beispiele zum Plotten mit Sage lesen Sie Lösen von Differentialgleichungen und Maxima, sowie die Sage Constructions Dokumentation.

Dieser Befehl erstellt einen gelben Kreis vom Radius 1 mit dem Ursprung als Zentrum:

Sage

    sage: circle((0,0), 1, rgbcolor=(1,1,0))
    Graphics object consisting of 1 graphics primitive

Python

    >>> from sage.all import *
    >>> circle((Integer(0),Integer(0)), Integer(1), rgbcolor=(Integer(1),Integer(1),Integer(0)))
    Graphics object consisting of 1 graphics primitive

Sie können auch einen ausgefüllten Kreis erzeugen:

Sage

    sage: circle((0,0), 1, rgbcolor=(1,1,0), fill=True)
    Graphics object consisting of 1 graphics primitive

[Python]

    >>> from sage.all import *
    >>> circle((Integer(0),Integer(0)), Integer(1), rgbcolor=(Integer(1),Integer(1),Integer(0)), fill=True)
    Graphics object consisting of 1 graphics primitive

Sie können einen Kreis auch erstellen, indem Sie ihn einer Variable zuweisen; so wird kein Plot gezeigt.

Sage

    sage: c = circle((0,0), 1, rgbcolor=(1,1,0))

Python

    >>> from sage.all import *
    >>> c = circle((Integer(0),Integer(0)), Integer(1), rgbcolor=(Integer(1),Integer(1),Integer(0)))

Um den Plot zu zeigen, benutzen Sie `c.show()` oder `show(c)` wie folgt:

Sage

    sage: c.show()

[Python]

    >>> from sage.all import *
    >>> c.show()

Alternativ führt das Auswerten von `c.save('filename.png')` dazu, dass der Plot in der angegebenen Datei gespeichert wird.

Noch sehen diese ‚Kreise‘ jedoch eher wie Ellipsen aus, da die Achsen unterschiedlich skaliert sind. Sie können dies korrigieren:

Sage

    sage: c.show(aspect_ratio=1)

Python

    >>> from sage.all import *
    >>> c.show(aspect_ratio=Integer(1))

Der Befehl `show(c, aspect_ratio=1)` erreicht das Gleiche. Sie können das Bild auch speichern, indem Sie `c.save('filename.png', aspect_ratio=1)` benutzen.

Es ist einfach elementare Funktionen zu plotten:

Sage

    sage: plot(cos, (-5,5))
    Graphics object consisting of 1 graphics primitive

[Python]

    >>> from sage.all import *
    >>> plot(cos, (-Integer(5),Integer(5)))
    Graphics object consisting of 1 graphics primitive

Sobald Sie einen Variablennamen angegeben haben, können Sie parametrische Plots erzeugen:

Sage

    sage: x = var('x')
    sage: parametric_plot((cos(x),sin(x)^3),(x,0,2*pi),rgbcolor=hue(0.6))
    Graphics object consisting of 1 graphics primitive

Python

    >>> from sage.all import *
    >>> x = var('x')
    >>> parametric_plot((cos(x),sin(x)**Integer(3)),(x,Integer(0),Integer(2)*pi),rgbcolor=hue(RealNumber('0.6')))
    Graphics object consisting of 1 graphics primitive

Es ist wichtig zu beachten, dass sich die Achsen eines Plots nur schneiden, wenn sich der Ursprung im angezeigten Bildbereich des Graphen befindet und ab einer bestimmten Größe der Werte wird die wissenschaftliche Notation benutzt:

Sage

    sage: plot(x^2,(x,300,500))
    Graphics object consisting of 1 graphics primitive

[Python]

    >>> from sage.all import *
    >>> plot(x**Integer(2),(x,Integer(300),Integer(500)))
    Graphics object consisting of 1 graphics primitive

Sie können mehrere Plots zusammenfügen indem Sie diese addieren:

Sage

    sage: x = var('x')
    sage: p1 = parametric_plot((cos(x),sin(x)),(x,0,2*pi),rgbcolor=hue(0.2))
    sage: p2 = parametric_plot((cos(x),sin(x)^2),(x,0,2*pi),rgbcolor=hue(0.4))
    sage: p3 = parametric_plot((cos(x),sin(x)^3),(x,0,2*pi),rgbcolor=hue(0.6))
    sage: show(p1+p2+p3, axes=false)

Python

    >>> from sage.all import *
    >>> x = var('x')
    >>> p1 = parametric_plot((cos(x),sin(x)),(x,Integer(0),Integer(2)*pi),rgbcolor=hue(RealNumber('0.2')))
    >>> p2 = parametric_plot((cos(x),sin(x)**Integer(2)),(x,Integer(0),Integer(2)*pi),rgbcolor=hue(RealNumber('0.4')))
    >>> p3 = parametric_plot((cos(x),sin(x)**Integer(3)),(x,Integer(0),Integer(2)*pi),rgbcolor=hue(RealNumber('0.6')))
    >>> show(p1+p2+p3, axes=false)

Eine gute Möglichkeit ausgefüllte Figuren zu erstellen ist, eine Liste von Punkten zu erzeugen (`L` im folgenden Beispiel) und dann den `polygon` Befehl zu verwenden um die Figur mit dem, durch die Punkte bestimmten, Rand zu zeichnen. Zum Beispiel ist hier ein grünes Deltoid:

Sage

    sage: L = [[-1+cos(pi*i/100)*(1+cos(pi*i/100)),
    ....:     2*sin(pi*i/100)*(1-cos(pi*i/100))] for i in range(200)]
    sage: p = polygon(L, rgbcolor=(1/8,3/4,1/2))
    sage: p
    Graphics object consisting of 1 graphics primitive

[Python]

    >>> from sage.all import *
    >>> L = [[-Integer(1)+cos(pi*i/Integer(100))*(Integer(1)+cos(pi*i/Integer(100))),
    ...     Integer(2)*sin(pi*i/Integer(100))*(Integer(1)-cos(pi*i/Integer(100)))] for i in range(Integer(200))]
    >>> p = polygon(L, rgbcolor=(Integer(1)/Integer(8),Integer(3)/Integer(4),Integer(1)/Integer(2)))
    >>> p
    Graphics object consisting of 1 graphics primitive

Geben Sie `show(p, axes=false)` ein, um dies ohne Achsen zu sehen.

Sie können auch Text zu einem Plot hinzufügen:

Sage

    sage: L = [[6*cos(pi*i/100)+5*cos((6/2)*pi*i/100),
    ....:     6*sin(pi*i/100)-5*sin((6/2)*pi*i/100)] for i in range(200)]
    sage: p = polygon(L, rgbcolor=(1/8,1/4,1/2))
    sage: t = text("hypotrochoid", (5,4), rgbcolor=(1,0,0))
    sage: show(p+t)

Python

    >>> from sage.all import *
    >>> L = [[Integer(6)*cos(pi*i/Integer(100))+Integer(5)*cos((Integer(6)/Integer(2))*pi*i/Integer(100)),
    ...     Integer(6)*sin(pi*i/Integer(100))-Integer(5)*sin((Integer(6)/Integer(2))*pi*i/Integer(100))] for i in range(Integer(200))]
    >>> p = polygon(L, rgbcolor=(Integer(1)/Integer(8),Integer(1)/Integer(4),Integer(1)/Integer(2)))
    >>> t = text("hypotrochoid", (Integer(5),Integer(4)), rgbcolor=(Integer(1),Integer(0),Integer(0)))
    >>> show(p+t)

Analysis Lehrer zeichnen häufig den folgenden Plot an die Tafel: nicht nur einen Zweig von der arcsin Funktion, sondern mehrere, also den Plot von \(y=\sin(x)\) für \(x\) zwischen \(-2\pi\) und \(2\pi\), an der 45 Grad Linie gespiegelt. Der folgende Sage Befehl erzeugt dies:

Sage

    sage: v = [(sin(x),x) for x in srange(-2*float(pi),2*float(pi),0.1)]
    sage: line(v)
    Graphics object consisting of 1 graphics primitive

[Python]

    >>> from sage.all import *
    >>> v = [(sin(x),x) for x in srange(-Integer(2)*float(pi),Integer(2)*float(pi),RealNumber('0.1'))]
    >>> line(v)
    Graphics object consisting of 1 graphics primitive

Da die Tangensfunktion einen größeren Wertebereich als die Sinusfunktion besitzt, sollten Sie, falls Sie den gleichen Trick anwenden um die Inverse der Tangensfunktion zu plotten, das Minimum und Maximum der Koordinaten für die x-Achse ändern:

Sage

    sage: v = [(tan(x),x) for x in srange(-2*float(pi),2*float(pi),0.01)]
    sage: show(line(v), xmin=-20, xmax=20)

Python

    >>> from sage.all import *
    >>> v = [(tan(x),x) for x in srange(-Integer(2)*float(pi),Integer(2)*float(pi),RealNumber('0.01'))]
    >>> show(line(v), xmin=-Integer(20), xmax=Integer(20))

Sage berechnet auch Plots in Polarkoordinaten, Konturplots, Plots von Vektorfeldern (für besondere Arten von Funktionen). Hier ist ein Beispiel eines Konturplots:

Sage

    sage: f = lambda x,y: cos(x*y)
    sage: contour_plot(f, (-4, 4), (-4, 4))
    Graphics object consisting of 1 graphics primitive

[Python]

    >>> from sage.all import *
    >>> f = lambda x,y: cos(x*y)
    >>> contour_plot(f, (-Integer(4), Integer(4)), (-Integer(4), Integer(4)))
    Graphics object consisting of 1 graphics primitive

## Dreidimensionale Plots

Sage kann auch dazu verwendet werden dreidimensionale Plots zu zeichnen. Sowohl im Notebook, als auch von der Kommandozeile aus werden diese Plots standardmäßig mit den Open-Source-Paket [ThreeJS] angezeigt, welches interaktives Drehen und Zoomen der Grafik mit Hilfe der Maus unterstützt.

Benutzen Sie `plot3d` um eine Funktion der Form \(f(x, y) = z\) zu zeichnen:

Sage

    sage: x, y = var('x,y')
    sage: plot3d(x^2 + y^2, (x,-2,2), (y,-2,2))
    Graphics3d Object

Python

    >>> from sage.all import *
    >>> x, y = var('x,y')
    >>> plot3d(x**Integer(2) + y**Integer(2), (x,-Integer(2),Integer(2)), (y,-Integer(2),Integer(2)))
    Graphics3d Object

Alternativ können Sie auch `parametric_plot3d` verwenden um eine parametrisierte Fläche zu zeichnen, wobei jede der Variablen \(x, y, z\) durch eine Funktion einer oder zweier Variablen bestimmt ist. (Die Argumente sind typischerweise \(u\) und \(v\)). Der vorherige Plot kann wie folgt parametrisiert angegeben werden:

Sage

    sage: u, v = var('u, v')
    sage: f_x(u, v) = u
    sage: f_y(u, v) = v
    sage: f_z(u, v) = u^2 + v^2
    sage: parametric_plot3d([f_x, f_y, f_z], (u, -2, 2), (v, -2, 2))
    Graphics3d Object

[Python]

    >>> from sage.all import *
    >>> u, v = var('u, v')
    >>> __tmp__=var("u,v"); f_x = symbolic_expression(u).function(u,v)
    >>> __tmp__=var("u,v"); f_y = symbolic_expression(v).function(u,v)
    >>> __tmp__=var("u,v"); f_z = symbolic_expression(u**Integer(2) + v**Integer(2)).function(u,v)
    >>> parametric_plot3d([f_x, f_y, f_z], (u, -Integer(2), Integer(2)), (v, -Integer(2), Integer(2)))
    Graphics3d Object

Die dritte Möglichkeit eine 3D Oberfläche zuplotten ist `implicit_plot3d`, dies zeichnet eine Kontur einer Funktion mit \(f(x, y, z) = 0\) (so wird eine Punktmenge definiert). Wir können die Sphäre mithilfe einer klassischen Formel zeichnen:

Sage

    sage: x, y, z = var('x, y, z')
    sage: implicit_plot3d(x^2 + y^2 + z^2 - 4, (x,-2, 2), (y,-2, 2), (z,-2, 2))
    Graphics3d Object

Python

    >>> from sage.all import *
    >>> x, y, z = var('x, y, z')
    >>> implicit_plot3d(x**Integer(2) + y**Integer(2) + z**Integer(2) - Integer(4), (x,-Integer(2), Integer(2)), (y,-Integer(2), Integer(2)), (z,-Integer(2), Integer(2)))
    Graphics3d Object

Hier sind noch ein paar Beispiele:

Whitneys Regenschirm:

Sage

    sage: u, v = var('u,v')
    sage: fx = u*v
    sage: fy = u
    sage: fz = v^2
    sage: parametric_plot3d([fx, fy, fz], (u, -1, 1), (v, -1, 1),
    ....:   frame=False, color="yellow")
    Graphics3d Object

[Python]

    >>> from sage.all import *
    >>> u, v = var('u,v')
    >>> fx = u*v
    >>> fy = u
    >>> fz = v**Integer(2)
    >>> parametric_plot3d([fx, fy, fz], (u, -Integer(1), Integer(1)), (v, -Integer(1), Integer(1)),
    ...   frame=False, color="yellow")
    Graphics3d Object

Die Kreuz-Kappe:

Sage

    sage: u, v = var('u,v')
    sage: fx = (1+cos(v))*cos(u)
    sage: fy = (1+cos(v))*sin(u)
    sage: fz = -tanh((2/3)*(u-pi))*sin(v)
    sage: parametric_plot3d([fx, fy, fz], (u, 0, 2*pi), (v, 0, 2*pi),
    ....:   frame=False, color="red")
    Graphics3d Object

Python

    >>> from sage.all import *
    >>> u, v = var('u,v')
    >>> fx = (Integer(1)+cos(v))*cos(u)
    >>> fy = (Integer(1)+cos(v))*sin(u)
    >>> fz = -tanh((Integer(2)/Integer(3))*(u-pi))*sin(v)
    >>> parametric_plot3d([fx, fy, fz], (u, Integer(0), Integer(2)*pi), (v, Integer(0), Integer(2)*pi),
    ...   frame=False, color="red")
    Graphics3d Object

Ein gedrehter Torus:

Sage

    sage: u, v = var('u,v')
    sage: fx = (3+sin(v)+cos(u))*cos(2*v)
    sage: fy = (3+sin(v)+cos(u))*sin(2*v)
    sage: fz = sin(u)+2*cos(v)
    sage: parametric_plot3d([fx, fy, fz], (u, 0, 2*pi), (v, 0, 2*pi),
    ....:   frame=False, color="red")
    Graphics3d Object

[Python]

    >>> from sage.all import *
    >>> u, v = var('u,v')
    >>> fx = (Integer(3)+sin(v)+cos(u))*cos(Integer(2)*v)
    >>> fy = (Integer(3)+sin(v)+cos(u))*sin(Integer(2)*v)
    >>> fz = sin(u)+Integer(2)*cos(v)
    >>> parametric_plot3d([fx, fy, fz], (u, Integer(0), Integer(2)*pi), (v, Integer(0), Integer(2)*pi),
    ...   frame=False, color="red")
    Graphics3d Object

Die Lemniskate:

Sage

    sage: x, y, z = var('x,y,z')
    sage: f(x, y, z) = 4*x^2 * (x^2 + y^2 + z^2 + z) + y^2 * (y^2 + z^2 - 1)
    sage: implicit_plot3d(f, (x, -0.5, 0.5), (y, -1, 1), (z, -1, 1))
    Graphics3d Object

Python

    >>> from sage.all import *
    >>> x, y, z = var('x,y,z')
    >>> __tmp__=var("x,y,z"); f = symbolic_expression(Integer(4)*x**Integer(2) * (x**Integer(2) + y**Integer(2) + z**Integer(2) + z) + y**Integer(2) * (y**Integer(2) + z**Integer(2) - Integer(1))).function(x,y,z)
    >>> implicit_plot3d(f, (x, -RealNumber('0.5'), RealNumber('0.5')), (y, -Integer(1), Integer(1)), (z, -Integer(1), Integer(1)))
    Graphics3d Object