load (draw)$ f(x, k) := k*x^2 + 4 * x $ assume (k>0); xbegin : -5; xend : 5; ybegin : -90; yend : 90; /* Extremumsfunktionen erstellen */ /* Achtung: Es wird nur die Minimums und Maximumsfunktion erstellt! */ df(x, k) := ''(diff (f(x, k), x, 1)); ddf(x, k) := ''(diff (f(x, k), x, 2)); ke : solve ( df(x, k) = 0, x ); /* 2. Kriterium */ extrem_2krit : maplist (lambda ([u], ev (ddf(x, k), u)), ke) ; /* Aufgrund der 2. Ableitung wird zwischen Minimum und Maximum entschieden */ minimumlist_ind : sublist_indices (extrem_2krit, lambda ([x], x > 0)); maximumlist_ind : sublist_indices (extrem_2krit, lambda ([x], x < 0)); /* Hier werden die x-Werte zugewiesen */ minimumlist_xpos : makelist (ke[i], i, minimumlist_ind); maximalist_xpos : makelist (ke[i], i, maximumlist_ind); /* Hier werden die y-Werte zugewiesen */ minimumlist_y : maplist (lambda ([u], ev (f(x, k), u)), minimumlist_xpos); maximalist_y : maplist (lambda ([u], ev (f(x, k), u)), maximalist_xpos); /* Die y-Werte der Minima sind in der Liste minimumlist_y gespeichert */ /* Die y-Werte der Maxima sind in der Liste maximalist_y gespeichert */ /* Vorausgesetzt, dass das 2. Kriterium immer angewendet werden konnte!! */ /* Um die Ortskurve zu erstellen muss jetzt das k durch das jeweilige x * ersetzt werden */ minimumlist_kx : solve (minimumlist_xpos, k); maximumlist_kx : solve (maximumlist_xpos, k); minimumlist_xy : maplist (lambda ([u, v], ev (u, v)), minimumlist_y, minimumlist_kx); maximmumlist_xy : maplist (lambda ([u, v], ev (u, v)), maximumlist_y, maximumlist_kx); /****************************************************************** * Hier wird beschlossen, welche Ortskurve gezeichnet werden soll * * * *****************************************************************/ stelle : 1; ye(x) := ''(minimumlist_xy[stelle]); my_gnuplot_preamble : [ "set noborder" ]$ set_draw_defaults( user_preamble = my_gnuplot_preamble, yrange = [ybegin, yend], xtics_axis = true, ytics_axis = true, xaxis = true, yaxis = true )$ funktionsname : concat ("f(x) = ", string (f(x,k))); efunktionsname : concat ("ye(x) = ", string (ye(x))); graph2 : [ label([funktionsname, 3.2, 80]), color = red, explicit ( ye(k), k, xbegin, xend), label([efunktionsname, 3.2, -80]), color = black, head_length = 0.1, vector ( [xbegin, 0], [(xend-xbegin), 0]), vector ( [0, ybegin], [0, (yend-ybegin)]) ]$ bild_erstellen (k) := block ([], ti : concat ("\"k=", k, "\""), gr2d ( title = ti, [explicit (f(x, k), x, xbegin, xend)], graph2 ) ); kwertelist : makelist (ev (i/5, numer), i, 1, 25); bilder_liste : map (bild_erstellen, [3.5]); bilder_liste : map (bild_erstellen, kwertelist); draw ( delay = 80, dimensions = [500, 500], file_name = "funktionenschar3", /* terminal = 'jpg, */ terminal = 'animated_gif, bilder_liste );