Tangenten-Lineal
Nach Vorgabe der Funktionsgleichung mit passenden Zeichenparametern berechnet
das Arbeitsblatt einen Ausschnitt der lokalen Kurventangente mit der Länge 1 und lässt dieses
Lineal im Zeichenintervall den Funktionsgraphen entlang wandern. Die Lineal-Länge ist variabel.
Das Vorzeichen der Tangentensteigung wird farblich gekennzeichnet :durch:
f´(x)>0 in grün, f´(x)<0 in rot und f´(x)=0 in blau.
Bei dieser Version werden vorab die Extremstellen berechnet und in die Partition einsortiert, damit
das Tangenten-Lineal auf jeden Fall die Extremstelle trifft und dort horizontal (blau) verläuft.
Bisher getestet an Polynomfunktionen und einigen trigonometrischen Funktionen.
Aktivieren Sie nur das jeweilige Beispiel, indem Sie die Raute # setzen bzw. entfernen.
Autor: Reggentin
letzte Modifikation: 08.03.2006
Version: 1.4.4
CAS: Maple 8
| > | restart:with(plots): |
Warning, the name changecoords has been redefined
Bsp. 1
| > | # f:=x->1/80*x^3-x^2/10-x/2: xmin:=-8:xmax:=14: ymin:=-10: ymax:=10: |
Bsp. 2
| > | # f:=x->1/10*x^4-x^2/2+3: xmin:=-4:xmax:=4: ymin:=0: ymax:=10: |
Bsp. 3
| > | # f:=x->1/1000*x^6+1/80*x^4-x^2/5+2: xmin:=-5:xmax:=5: ymin:=0: ymax:=6: |
Bsp. 4
| > | # f:=x->1/1000*x^6-1/40*x^4+x^2/10+1: xmin:=-5:xmax:=5: ymin:=0: ymax:=5: |
Bsp. 5
| > | # f:=x->sin(x): xmin:=-2*Pi:xmax:=2*Pi: ymin:=-1.1: ymax:=1.1: |
Bsp. 6
| > | # f:=x->x*sin(x): xmin:=-3*Pi:xmax:=3*Pi: ymin:=-8: ymax:=8: |
Bsp. 7
| > | # f:=x->(x+7)*(x+4)*(2*x-15)*(x-3)*(5-x)/1000: xmin:=-10:xmax:=10: ymin:=-10: ymax:=10: |
Bsp. 8
| > | # f:=x->sum((-2/5)^(k)*x^(k)/(10^(1/2*k)),k=0..4): xmin:=-15: xmax:=15: ymin:=-10: ymax:=10: |
Bsp. 9
| > | # f:=x->(x^4-6*x^2)/5: xmin:=-3: xmax:=3: ymin:=-2: ymax:=4: |
Bsp. 10
| > | f:=x->-x^4/4+x^3/3+x^2/2+x/4: xmin:=-3: xmax:=3: ymin:=-2: ymax:=4: |
| > | f(x); |
Benötigte Prozeduren (Unterprogramme)
Filtert aus einer Liste L die komplexen Daten heraus
| > | ReFilter:=proc(L::list) |
| > | local R::list, nr::integer,i::integer: R:={}: # leere Hilfsmenge, wird später zur rein reellen Liste |
| > | nr:=nops(L): # Anzahl der Elemente der übergebenen Liste L |
| > | for i from 1 to nr do if (Im(L[i])=0) then R:=R union {L[i]}: end if: end do: |
| > | R:=[op(R)]: # In der obigen Schleife wird mengenweise vereinigt, |
| > | end proc: # dann wird R wieder zur Liste umgewandelt |
Sortiert exakte Listenwerte aufsteigend anstatt mit gerundeten Werten zu arbeiten, wird im Befehl sort() als Sortier-Relation verwendet.
| > | sortiere:=proc(z1,z2) # z1,z2 beinhalten exakte Werte |
| > | if evalf(z1)<=evalf(z2) then true else false end if: # gerundete Werte werden verglichen |
| > | end proc: |
Es wird ein Farbschalter aufgebaut, der bei positiver Steigung das Lineal grün einfärbt bzw. bei negativer Steigung das Lineal rot darstellt. Ist die Steigung exakt 0 , so wird die Farbe auf blau eingestellt. Für die Farbe Blau müssen die Partitionsstellen so gewählt sein, dass die Stelle mit der Steigung 0 genau getroffen wird. Die Partiton muss also die exakte Extremstelle (oder: Sattelpunktstelle) bereits enthalten (siehe oben).
Kann keine exakte Nullstelle berechnet werden, so wird die Tangente nicht blau gefärbt (s. Beispiel 6)!
Es werden exakte Vergleiche mit der Funktion is() verwendet.
| > | Farbe:=proc (w1,w2) # exakter Vergleich |
| > | if is(w1<w2) then color=green else if is(w1>w2) then color=red else color=blue end if end if |
| > | end proc: |
Zeichenparameter
| > | ZB:=x=xmin..xmax,y=ymin..ymax: |
| > | PStil:=style=point,symbol=circle,symbolsize=24: |
| > | LStil:=style=line,thickness=3: |
| > | Anzahl:=50: # Anzahl der Intervallstellen |
| > | Länge:=(xmax-xmin)/Anzahl: |
Intervallstellenberechnung
| > | Part:={seq(xmin+i*(xmax-xmin)/Anzahl,i=1..Anzahl)}: |
| > | Lsg:=[solve(D(f)(x)=0,x)]: # Stellen mit Horizontaltangenten berechnen und .. |
| > | Lsg:={op(ReFilter(Lsg))}: # .. komplexe Lösungen herausfiltern und .. |
| > | Partition:=[op(Part union Lsg)]: # ..in die Partitonsliste einfügen, dann sortieren. |
| > | Partition:=sort(Partition,sortiere): # Fertige sortierte Liste mit exakten Extremstellen |
Lokale Tangente
| > | t:=unapply(D(f)(xmitte)*(x-xmitte)+f(xmitte),[x,xmitte]): |
Linealpunkte links und rechts
| > | LTL:=1: # Länge des Tangenten-Lineals |
| > | right:=(x0,f)->x0+LTL/sqrt(1+(D(f)(x0))^2): # hier werden die entscheidenden Daten erzeugt |
| > | left:=(x0,f)->x0-LTL/sqrt(1+(D(f)(x0))^2): # dto. |
| > | Links:=x0->[left(x0,f),t(left(x0,f),x0)]: # linker Linealpunkt |
| > | Rechts:=x0->[right(x0,f),t(right(x0,f),x0)]: # rechter Linealpunkt |
| > | Mitte:=x0->[x0,f(x0)]: # Punkt in der Linealmitte |
Zeichnung erstellen
| > | Graf:=plot(f(x),ZB,LStil,color=brown): |
| > | Punkte:=seq(plot([Links(Partition[i]),Mitte(Partition[i]),Rechts(Partition[i])],ZB,PStil,color=[navy,red,navy]),i=1..Anzahl): |
| > | Lineal:=seq(plot([Links(Partition[i]),Rechts(Partition[i])],ZB,thickness=5,Farbe(Links(Partition[i])[2],Rechts(Partition[i])[2])),i=1..Anzahl): |
| > | Film1:=display(Punkte,insequence=true): |
| > | Film2:=display(Lineal,insequence=true): |
| > | Hintergrund:=display(Graf): |
| > | display(Hintergrund,Film1,Film2,scaling=constrained); |
| > |