Skip to content
Snippets Groups Projects
Commit ec82816e authored by Frederic Weidling's avatar Frederic Weidling
Browse files

Blatt6 Lsg und Blatt 7 Bsp.

parent c093826f
No related branches found
No related tags found
No related merge requests found
%% Cell type:markdown id: tags:
# Aufgabe 23 (Nichtlineare Iterationen)
## Aufgabe:
Für welche $c$ divergiert $z_{n+1}=z_n^2+c$?
%% Cell type:code id: tags:
``` python
# Erschaffung eines Gitters
from numpy import ogrid,zeros
n=100 # Anzahl Unterteilungen eines Einheitsintervalls
x,y=ogrid[-2:1:(3*n+1)*1j,-1:1:(2*n+1)*1j]
c=x-1j*y # Punkte gewünschter Form
c=c.T # Das transponieren und das Minus in der Zeile darüber sind um sicherzustellen, dass c die gewünschte Orientierung hat
# Iterieren
z=zeros(c.shape)
for j in range(100):
z=z**2+c
# Auswertung des Ergebnis
# Ein genauer Blick hinein zeigt, dass z sehr oft NaN enthält, daher auch die Warnungen.
Z=zeros(c.shape)
Z[abs(z)<100]=1
# Erstellen des Plots
import matplotlib.pyplot as pyplot
pyplot.spy(Z)
pyplot.show()
# man erhält die Mandelbrotmenge/das Apfelmännchen
```
%% Output
/opt/anaconda/lib/python3.5/site-packages/ipykernel/__main__.py:13: RuntimeWarning: overflow encountered in square
/opt/anaconda/lib/python3.5/site-packages/ipykernel/__main__.py:13: RuntimeWarning: invalid value encountered in square
/opt/anaconda/lib/python3.5/site-packages/ipykernel/__main__.py:18: RuntimeWarning: invalid value encountered in less
%% Cell type:code id: tags:
``` python
```
%% Cell type:markdown id: tags:
# Beispiel: Übergabe von Funktionen
An Hand des Fixpunktiteration wird gezeigt, wie man Funktionen als Argumente an Funktionen übergibt und aufruft. Zunächst die Fixpunktiteration:
%% Cell type:code id: tags:
``` python
def fixpoint_iteration(phi,x0,tol):
k=1
x=phi(x0)
x_old=x0
q=0
while True:
k=k+1
x_new=phi(x)
q=max(q,abs((x_new-x)/(x-x_old)))
if q>=1:
print('Funktion ist nicht kontraktiv!')
return
if q/(1-q)*abs(x_new-x)<=tol:
return x_new,k
else:
x_old=x.copy()
x=x_new.copy()
```
%% Cell type:markdown id: tags:
Jetzt ein Beispiel mit der übergebenen Funktion $\phi(x)=e^{-x}$
%% Cell type:code id: tags:
``` python
from numpy import exp
def negativ_exp(x):
return exp(-x)
x,k=fixpoint_iteration(negativ_exp,0,1e-3)
print('Differenz: {0:1.3e}, Iterationen: {1}'.format(x-negativ_exp(x),k))
```
%% Output
Differenz: 2.083e-04, Iterationen: 15
%% Cell type:markdown id: tags:
Für solch einfache Beispiele möchte man natürlich nicht immer eine neue Funktion definieren, da Sie eigentlich nur einmal verwendet wird und die Defintion nicht sonderlich schwierig ist. Dafür gibt es _anonyme Funktionen_ in python durch __lambda__ gekennzeichnet. An Hand der selben Funktion wie oben:
%% Cell type:code id: tags:
``` python
x,k=fixpoint_iteration((lambda x: exp(-x)),0,1e-3)
print('Fixpunkt: {0:1.3e}, Iterationen: {1}'.format(x,k))
```
%% Output
Fixpunkt: 5.673e-01, Iterationen: 15
%% Cell type:markdown id: tags:
Insbesondere könnte man jetzt nicht erneut auf die für die Iteration verwendete Funktion zurückgreifen um den Fehler im Fixpunkt zu bestimmen. Aber indem man anonymen Funktionen einen Namhen zuweist geht auch dies. In diesem Fall ist es nur eine schnellere Art eine Funktion zu definieren.
%% Cell type:code id: tags:
``` python
f=(lambda x: exp(-x))
x,k=fixpoint_iteration(f,0,1e-3)
print('Fixpunkt: {0:1.3e}, Iterationen: {1}'.format(x-f(x),k))
```
%% Output
Fixpunkt: 2.083e-04, Iterationen: 15
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment