xxxxxxxxxx
#(c) Vincenz Busch
# [edit] Jens Kwasniok May 2016
from sage.plot.plot3d.plot3d import axes
from sage.calculus.calculus import symbolic_expression_from_maxima_string
var('x,y')
# Hilfsfunktion: gibt die Funktion aus und plottet dessen Graphen
def plot_func(f):
pretty_print(html("$f(x,y) = " + latex(f(x=x,y=y)) + "$"))
image = plot3d(f,(x,-2,2),(y,-2,2), adaptive=True, color=['red','white'])
image.show()
#Hauptfunktion
def _(f_choice = selector([sin(x)*cos(y), sin(x^2-y^3), x*y, exp(x)/exp(y), 'eigene Funktion verwenden'], label="$f(x,y)=$ ")):
# Soll eine eigene Funktion verwendet werden?
if f_choice == 'eigene Funktion verwenden':
def _(f_user_str = input_box(default="sin(x)*cos(y)", type=str, label="$f(x,y)=$ ")):
# versuche den als Text eingegebenen Audruck in Abhaenigkeit von n zu interpretieren
try:
# definiere die Funktion mithilfe des eingegebenen Ausdrucks
# sage_eval: interpretiert den String als Audruck mit den Variablen x und y
# SR: konvertiert den Ausdruck zu einem als Funktion verwendbaren Objekt (symbolischer Ring)
f = SR(sage_eval(f_user_str, locals={'x':x, 'y':y}))
except (NameError, SyntaxError, TypeError), msg:
# zeige eine Felermeldung, falls dies fehlschlaegt
pretty_print(html('Es ist nicht moeglich $f(x,y)$ als Ausdruck (in Abhaenigkeit von $x$ und $y$) zu interpretieren. <p> Bitte achten Sie darauf nur x und y als Variablen und explizite Operatoren zu verwenden. z.B. 2*x+y^2 anstelle von 2a.<p>'))
return
plot_func(f)
else:
plot_func(f_choice)
Diese Animation wurde von Vincenz Busch im Rahmen eines Projekts zur Verbesserung der Lehre im Lehrlabor des Universitätskollegs der Universität Hamburg erarbeitet. Hamburg, Januar 2013. (überarbeitet Mai 2016)
Dieses Vorhaben wird innerhalb des gemeinsamen Bund-Länder-Programms für bessere Studienbedingungen und mehr Qualität in der Lehre aus Mitteln des Bundesministerium für Bildung und Forschung unter dem Förderkennzeichen 01PL12033 gefördert. Die Verantwortung für den Inhalt dieser Veröffentlichung liegt bei den Autor/-innen.