12.12 Fourierreihen

Ziel:
In dieser Übungseinheit soll nochmals die Erstellung von Unterprogrammen und der Umgang mit diesen erlernt werden. Darüber hinaus benötigt man inline-Funktionen und die Integrationsroutine quadl. Abzugeben sind die Unterprogramme fouriercoeff.m, fourierexpansion.m und das Skript fouriertest.m.
Voraussetzung:
Voraussetzung für die Übung ist das Kapitel über Programmeinheiten 7.

Eine $ 2\pi $-periodische Funktion $ f(x)$ kann mit Hilfe einer Fourierreihe approximiert werden. Diese Reihe konvergiert unter gewissen Bedingungen gegen die Funktion $ f(x)$ und spielt in der Physik eine wichtige Rolle (Wellenlehre, Wärmeleitung, Quantenmechanik, lineare Differentialgleichungen).

Die $ n$-te Teilsumme der Fourierreihe einer Funktion $ f(x)$ lautet

$\displaystyle s_n(x) = m + \sum_{k=1}^n \Big(a_k \cos(kx)+b_k \sin(kx)\Big)\;.$ (12.44)

Die Information über die Funktion $ f(x)$ ist in den Koeffizienten $ m,
\vec{a}$ und $ \vec b$ enthalten. Diese erhält man aus der Funktion $ f(x)$ durch Berechnung von Integralen. Der Koeffizient $ m$ ist durch den Mittelwert

$\displaystyle m= \frac{1}{2\pi}\int_{-\pi}^{\pi} {\mathrm d} x  f(x)
$

der Funktion gegeben. Die Koeffizienten $ a_k$ und $ b_k$ ergeben sich aus den Formeln

\begin{displaymath}
\begin{array}{ll}
\displaystyle a_k = &\displaystyle
\frac...
...n(kx)\big)
\end{array}\qquad \textrm{mit}\quad k=1,\ldots,n\;.
\end{displaymath}

  1. Schreiben Sie eine MATLAB-Funktion [m,a,b]=fouriercoeff(fun,n), die die Fourierkoeffizienten der Funktion fun berechnet und in den Variablen m,a,b zurückgibt. Der Funktion fouriercoeff soll die zu entwickelnde Funktion als inline-Funktion im Argument fun übergeben werden. Weiters braucht fouriercoeff noch die Ordnung $ n$, bis zu der die Fourierkoeffizienten berechnet werden sollen.

    Die Integrale können mit quadl ausgeführt werden. Für die sin/cos-Integrale müssen inline-Funktionen funccos und funcsin definiert werden, die die Integranden bilden.

    Tipp: Bei inline-Funktionen kann man mit den Befehlen formula und argnames die Funktion und ihre Argumente als String bzw. Zelle erhalten

      f1   = inline('exp((x-x0).^2)','x','x0')
      form = formula(f1)    ->   'exp((x-x0).^2)'
      args = argnames(f1)   ->   {'x','x0'}
    
    und bekommt damit die benötigten Informationen. Bei der Definition der inline-Funktionen verwendet man als erstes Argument eine Zeichenkette, die jeweils die zu integrierende Funktion enthält. Für die sin/cos-Integrale muss diese Zeichenkette sinnvoll aus form, args und sin/cos zusammengesetzt werden. Teilbereiche aus Zellen bekommt man mit args{1} oder args{2:end}. Das Zusammensetzen von Zeichenketten erfolgt wie bei Vektoren mit [], z.B. liefert ['sin','(x)'] den String 'sin(x)'. Bedenken Sie auch, dass der Integrand neben $ x$ eine weitere Inputvariable $ k$ benötigt. Diese muss über quadl an die Routine für den Integranden ``durchgeschleust'' werden.

    Probieren Sie am Anfang des Skripts fouriertest
    [m,a,b]=fouriercoeff(f1,4) mit der inline-Funktion für f1=sin(x) aus. Funktioniert es und ist das Ergebnis sinnvoll? Warum bekommt man für die Koeffizienten, die eigentlich 0 sein müssten, sehr kleine Werte? Wie kann man das in fouriercoeff beheben?

    Probieren Sie ihr Programm mit den inline-Funktionen für $ \sin^{2}(x)$ oder $ \cos^{2}(x)$ aus. Wie schaut es jetzt mit den Fourier-Koeffizienten aus?

  2. Schreiben Sie eine Funktion s=fourierexpansion(x,m,a,b), die aus den Koeffizienten $ m,a,b$ die Werte der Summe (12.44) an den Stellen $ x$ ausrechnet und in $ s$ zurückgibt.

  3. Zeigen Sie im MATLAB-Skript fouriertest.m die Entwicklung von zwei der im Bild 12.2 gezeichneten Funktionen in eine Fourierreihe und stellen das Ergebnis für verschiedene Ordnungen $ n$ dar. Dazu müssen Sie die (blau) gezeichneten Funktionen als inline-Funktionen programmieren. Denken Sie dabei an die Verwendung von Absolutbetrag und Signum-Funktion.

  4. Entwickeln Sie weiters im Skript fouriertest.m die $ 2\pi $-periodischen Funktionen

    $\displaystyle \begin{aligned}
f(x) &= e^{-\vert\hat x\vert} & \textrm{ (Exponen...
...funktion)}\\
f(x) &= e^{-4 \hat x^2} & \textrm{ (Gaußglocke)}\\
\end{aligned}$

    mit $ \hat x = (x+\pi) \textrm{ mod } 2\pi - \pi $ in Fourierreihen und stellen Sie die Ergebnisse für verschiedene Ordnungen $ n$ und $ x \in
[-3\pi,3\pi]$ grafisch dar. Dafür müssen Sie wieder inline-Funktionen schreiben. Für die graphische Ausgabe obiger Funktionen muss man diese periodisch fortsetzen. Das gelingt am Besten mit Hilfe der Modulofunktion mod und obiger Formel für $ \hat x$. Die Entwicklung der periodischen Halbellipsen und der Lorentzfunktion ist in Abbildung 12.3 zu sehen.

    Figure 12.2: Verschiedene $ 2\pi $-periodische Funktionen (blau) und deren Fourierentwicklung 2. Ordnung (grün) und 8. Ordnung (rot)
    Image fourier_bsp

    Figure 12.3: Periodische Halbellipsen (blau, oben) und Lorentz-Peaks (blau, unten) und deren Fourier-Approximationen der Ordnungen 2 (dunkelrot), 4, 6 und 8 (hellrot).
    Image fourier_halbei Image fourier_lorentz

In der Folge finden sich einige Übungsbeispiele, die momentan nicht verwendet werden.

Winfried Kernbichler 2005-04-26