Tangenten und ihre Hüllkurve

Aufgabe:
Die Tangenten an y=x² im Bereich [-5,5] sind zu ermitteln und in einer Grafik darzustellen. Wenn man die Funktion auch einzeichnet, ergibt sich eine Hüllkurve für die Tangenten.
Die Lösung soll schrittweise entwickelt werden. Wo liegen die Schwächen der einzelnen Programmversionen? Es soll eine Anwendung auch auf andere Funktionen möglich werden.
Lösungsüberlegungen:
  1. Maxima Online: http://maxima-online.org/?inc=r-1294288297
  2. Mit Hüllkurve: http://maxima-online.org/?inc=r2099680601
  3. Mit Ermittlung der Tangentengleichung: http://maxima-online.org/?inc=r872193857
  4. Verbesserte Plot-Anweisung: http://maxima-online.org/?inc=r384379534
Programmcode:
p(x):=x^2;
ab:diff(p(x),x);
k:ab,x=a;
f:k*(x-a)+p(a);
a:makelist(i,i,-5,5);
f:2*a*(x-a)+a^2;
f:append(f,[p(x)]);plot2d(f, [x,-5,5]);

Die Ausführung mit Maxima-Online: http://maxima-online.org/?inc=r-857523419
Eine weitere Programmverbesserung: http://maxima-online.org/?inc=r-873546065 (es wäre noch interessant, wenn geeignete Bereichsgrenzen automatisch ermittelt werden könnten)

Programmcode mit Eingabe der Grenzen:
p(x):=-x^2;
D:[-20,20];
ab:diff(p(x),x);
k:ev(ab,x=a);
g:k*(x-a)+p(a);
a:makelist(i,i,D[1],D[2]);
f:''g;
f:append(f,[p(x)]);
plot2d(f, [x,D[1],D[2]]);

Ergebnis für p(x)=x² und D:[-5,5]:

parabel_tangenten

Wie man das besser macht, hat mir Richard Fateman von der Berkeley-Universität in Kalifornien mitgeteilt:

It would be more idiomatic and much smaller to write the code this way.  


/*better */

p(x):=-x^2; 
D:[-20,20];
ab:diff(p(x),x); 
define(f(z), at(ab,x=z)*x+p(z));  /* each f(z) is a straight line tangent equation in x */
plot2d(  makelist(f(v),v,D[1],D[2]),   [x,D[1],D[2]]);

/* I think the composition of functions illustrated here is an important
tool.  Also the use of    ''  and ev  should be avoided if
possible. */

RJF

Keine Kommentare: