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);

-1/4*x^4+1/3*x^3+1/2*x^2+1/4*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);

[Maple Plot]

>