# Luento viikolla 7, kiintopisteiteraatio # V2 kevät 2000 HA # Määritellään kiintopisteiteraatiota havainnollistavia # apufunktioita. # Määrittelemme ensin funktion porras, joka palauttaa # grafiikkaobjektin, joka puolestaan edustaa "porrasta" # [x,x],[x,f(x)],[f(x),f(x)]. Annamme f:n olla yleinen, toistaiseksi # määrittelemätön globaali symboli. # # Tämän tyylin idea on peräisin Robert Israelilta. # > porras:=x->plot([[x,x],[x,f(x)],[f(x),f(x)]]): # Käyttöesimerkki, leikkaa/liimaa sovellukseesi. # Ensin funktiomäärittely ja alkupiste. > with(plots): > f:=x->3.0*x-x^2: x0:=1.4: > # Seuraavaksi muodostamme iteraatiojonon ja piirrämme koko prosessin. # Erityisesti seuraava solu kannattaa leikata/liimata > X:=[seq((f@@k)(x0),k=0..30)]; # Tämän voit synnyttää myös > for-silmukalla > fjaxkuva:=plot([x,f(x)],x=1.3 .. 2.6,color=[blue,black]): > display({fjaxkuva,seq(porras(X[i]),i=1..nops(X))}); > > display([seq(display([fjaxkuva,porras(X[i])]),i=1..nops(X))],insequenc > e=true); # Kiintopisteiteraatio # KRE EXA 1 s. 926-927 # > g1:=x->(1/3)*(x^2+1); > plot([x,g1(x)],x=0..5); > X:='X':f:='f': > porras:=x->plot([[x,x],[x,f(x)],[f(x),f(x)]]): > f:=g1: > X[0]:=1.0: > n:=10:for i to n do X[i]:=g1(X[i-1]) od: > fjaxkuva:=plot([x,f(x)],x=0 .. 1,color=[blue,black]): > display({fjaxkuva,seq(porras(X[i]),i=0..n)}); # Tässä vaiheessa voidaan muuttaa alkupistettä ja viedä kursori takaisin # (tai leikata/liimata) ja # laskea ja piirtää uudestaan. Muutetaan samalla x-skaala sopivaksi. > X[0]:=2.0; > n:=10:for i to n do X[i]:=f(X[i-1]) od: > fjaxkuva:=plot([x,f(x)],x=0 .. 4,color=[blue,black]): > display({fjaxkuva,seq(porras(X[i]),i=0..n)}); > X[0]:=3.0: > n:=3:for i to n do X[i]:=f(X[i-1]) od: > fjaxkuva:=plot([x,f(x)],x=0 .. 4,color=[blue,black]): > display({fjaxkuva,seq(porras(X[i]),i=0..n)}); # Suurempi n-arvo räjäyttää kuvan jo liian isoksi. # # Vaihdetaan iterointifunktiota (edelleen saman funktion nollakohdista # on kyse.) > g2:=x->3-1/x;f:=g2: > X[0]:=1.0: > n:=10:for i to n do X[i]:=f(X[i-1]) od: > fjaxkuva:=plot([x,f(x)],x=0 .. 5,color=[blue,black]): > display({fjaxkuva,seq(porras(X[i]),i=0..n)}); > > X[0]:=2.0;n:=10:for i to n do X[i]:=f(X[i-1]) od: > fjaxkuva:=plot([x,f(x)],x=0 .. 4,color=[blue,black]): > display({fjaxkuva,seq(porras(X[i]),i=0..n)}); > > X[0]:=3.0:n:=10:for i to n do X[i]:=f(X[i-1]) od: > fjaxkuva:=plot([x,f(x)],x=2.5 .. 4,color=[blue,black]): > display({fjaxkuva,seq(porras(X[i]),i=0..n)}); > > >