Hilfsmittel Mathematik 1 SS09

Aus ProgrammingWiki
< AuK
Archivierte Version vom 2012-01-23T14:55:58+00:00. Aktuelle Version

Inhaltsverzeichnis

Autoren

Igor Geiger ,Ralf Bergmann

Exponentialfunktionen und Lineare Regression

Bei der Analyse von Algorithmen zur Bestimmung des Aufwandes ,für eine bestimmte Anzahl an Eingabegrößen,die von der Anwendung des Algorithmus abhängt,tritt eine Punktmenge im Kartesischen Koordinatesystem auf,die exponentiel beschrieben werden kann. In realen Meßungen ergibt sich aber meistens eine verworfene Punktmenge die einer Exponentialfunktion angenährt werden kann.Jedoch lässt sich anhand dieser Kurve der Aufwand des Algorithmus nicht exakt bestimmen da man dazu einen exakten Anstieg braucht bzw. eine exakte Funktion. Dazu würd die entstandene Punktmenge in ein Kartesiches Koordinatensystem mit einer logarithmischen y-Achse überführt.


Darstellung von T(n)=10*2^n im neuen System nach Gnuplot. Es entsteht folgende Gerade,Schnittpunkt bei y=10 mit der y-Achse:


Darstellung von T(n)=10*2^n im logarithmischen System:

Gnuplot-Diagramm


Dies entspricht,vom Aussehen,der Geraden im normalen kartesischen Koordinatensystem:

T(n)=log(T(n)) =log(2)*n+log(10)

Desweiteren hat sich gezeigt das es viel einfacher ist eine Gerade im dargestellten Logarithmischen Koordinatensystem anhand der eingetragenen Punkte zu verlegen als eine Exponentialfunktion im normalen Koordinatensystem zu bestimmen.

Die mathematische Methode zur Bestimmung einer Geraden im logarithmischen Koordinatensystem,anhand der verstreuten Messpunkte,nennt man Lineare Regression. Die Gerade f(n)=a*n+b soll so bestimmt werden das der maximale Abstand zwischen der Geraden und den Messpunkten möglichst klein wird.

Mathematische Vorgehensweise:

max|T(n)-(a*n+b)|->minimal

Da es für jeden Messpunkt gelten muß,würd die gesuchte Funktion als Summe der Abstände der einzelnen Messpunkte dargestellt:

\sum_{n}|T(n)-(a*n+b)|->minimal

Von der entstandenen Funktion wird aber zur Bestimmung des Minimums die erste Ableitung benötigt jedoch ist die Betragsfunktion an der Stelle x=0 nicht stetig differenzierbar. Dazu Quadriert man sie nach der Methode der kleinsten Fehlerquadrate von Gauss,dadurch wird sie Differenzierbar aber die Suche nach dem Minimum wird dadurch nicht beeinflußt.


\sum_{n}(T(n)-(a*n+b))^{2}->minimal

Für das Minimum muß die erste Ableitung der obigen Funktion Null gesetzt werden.

f'(x)=0

Da man aber das Minimum nach a und b haben will muß man auch jeweils nach a und b ableiten.

Ableitung nach a:

2*\sum_{i=1}^{r}(T(i)-a*i-b)(-i)->0

Ableitung nach b:

2*\sum_{i=1}^{r}(T(i)-a*i-b)(-1)->0

Durch Vereinfachung erhält man die sogennante Normalengleichung:


a*\sum_{i=1}^{r}i^{2}+b*\sum_{i=1}^{r}i=\sum_{i=1}^{r}i+T(i)


a*\sum_{i=1}^{r}i+r*b=\sum_{i=1}^{r}i=\sum_{i=1}^{r}T(i)

Durch weiteres Umstellen nach a bzw. b erhält man die gewünschten Parameter für die Regressionsgerade.

Umformung nach a:


a*\sum_{i=1}^{r}i+r*b=\sum_{i=1}^{r}i=\sum_{i=1}^{r}T(i)


r*b=\sum_{i=1}^{r}T(i)-a*\sum_{i=1}^{r}i


b=\frac{\sum_{i=1}^{r}T(i)-a*\sum_{i=1}^{r}i}{r}


a*\sum_{i=1}^{r}i^{2}+(\frac{\sum_{i=1}^{r}T(i)-a*\sum_{i=1}^{r}i}{r})\sum_{i=1}^{r}i =\sum_{i=1}^{r}i*T(i) \frac{r*a*\sum_{i=1}^{r}i^{2}+\sum_{i=1}^{r}i*(\sum_{i=1}^{r}T(i)-a\sum_{i=1}^{r}i)}{r}=\sum_{i=1}^{r}i*T(i) r*a*\sum_{i=1}^{r}i^{2}+\sum_{i=1}^{r}i*(\sum_{i=1}^{r}T(i)-a\sum_{i=1}^{r}i)=r\sum_{i=1}^{r}i*T(i)


a*(r*\sum_{i=1}^{r}i^{2}-(\sum_{i=1}^{r}i)^{2}))=r*\sum_{i=1}^{r}i*T(i)-\sum_{i=1}^{r}i*\sum_{i=1}^{r}T(i)


a=\frac{r*(\sum_{i=1}^{r}i*T(i))-(\sum_{i=1}^{r}i)*(\sum_{i=1}^{r}T(i))}{r*\sum_{i=1}^{r}i^{2}-(\sum_{i=1}^{r}i)^{2}}


b=\frac{(\sum_{i=1}^{r}i^{2})*(\sum_{i=1}^{r}T(i))-(\sum_{i=1}^{r}i*T(i))*\sum_{i=1}^{r}i}{r*\sum_{i=1}^{r}i^{2}-(\sum_{i=1}^{r}i)^{2}}


Somit erhält man die Parameter a und b für die Regressionsgerade:

Beispielrechnung:

folgende Meßwerte:

T(1)=3

T(2)=6

T(3)=7

T(4)=9

T(5)=11

In die Gleichung für a und b einsetzen!

\sum_{i=1}^{r}i*T(i)=127 \sum_{i=1}^{r}i=15 \sum_{i=1}^{r}T(i)=36 \sum_{i=1}^{r}i^{2}=55 (\sum_{i=1}^{r}i)^{2}=225


\frac{(5*127)-(15*36)}{(5*55)-15^{2}}=1.9


\frac{(36*55)-(127*15)}{(5*55)-15^{2}}=1.5


Parameter für die Regressionsgerade im kartesischen Koordinatensystem.


a=1.9 b=1.5


f(n)=1.9n+1.5


Würde man die folgenden Messpunkte im logarithmischen Koordinatensystem als ansteigende Gerade erkennen so wäre die Gleichung zur Exponentialfunktion dieser Geraden

T(n)=a*b^{n}

Wobei dan aber gelten muß : b=log (das a von der Regressionsgeraden oben)


dabei ergibt sich für unser Beispiel folgende Exponentialfunktion:

T(n)=1.5*0.278^{n}

Polynomfunktion

Ein Graph wird zur Gerade wenn beide Achsen logarithmisch eingestellt sind.
Bei Funtionen folgender Gestalt:

  • T(n) = c*n^k, k \geq 1

Diese Funtion kann weiter beschrieben werden als:

  • T(n) = c_1*n^{k_1} + c_2*n^{k_2} + ... + c_i*n^{k_i}

Daraus ergibt sich folgender Funktionsgraph mit normaler Achseneinteilung für:

  • 2*n^{12}+10*x^2+1234*x
Gnuplot-Diagramm

Dieser Graph ist keine Gerade, deshalb müssen wir die logarithmische Achseneinteilung wählen um auf das gewünschte Ergebnis zu kommen.
Funktionsgraph mit logarithmischer y-Achseneinteilung:

Gnuplot-Diagramm

Funktionsgraph mit logarithmischer x- und y-Achseneinteilung:

Gnuplot-Diagramm

Bei diesen Graphen handelt es sich um keine Gerade weil eine Summe gebildet wird.
Schließlich kann man davon ausgehen das nicht bei jeder Funktion eine Gerade ensteht.
Deshalb sind andere Untersuchungsmethoden notwendig um auf das gewünschte Ergebnis zu kommen.

Polynomfunktionen bestehen aus mehreren Basisfunktionen der folgenden Form:

  • f(x)=c_0*g_0(x)+c_1*g_1(x)+ ... +c_m*g_m(x)

Die Lösung des Problems ergibt sich durch Anwenden der Methode der kleinsten Fehlerquadrate auf die Polynomfunktion.
Die Methode der kleinsten Fehlerquadrate angewandt auf die Formel:

  • F(c_0,c_1,...,c_m)=\sum_{k=1}^{n}(\sum_{k=0}^{m}c_ig_i(x_k)-y_k)^2\rightarrow min

Das heißt die Summe der Abstände (n Messpaare, also n Abstände) zwischen der gesuchten Funktion und den Messwerten soll minimal werden. Dazu bildet man die Ableitung und setzt diese Null.

  • \frac{\delta F}{\delta c_i}=2\sum_{k=1}^{n}(\sum_{k=0}^{m}c_ig_i(x_k)-y_k)*g_i(x_k)=0

Dazu multipliziert man die Ableitung aus und bringt y_k auf die rechte Seite.

  • \sum_{i=0}^{m}(\sum_{k=1}^{n}g_i(x_k)*g_i(x_k))=\sum_{k=1}^{n}y_k*g_j(x_k)

Dabei ist g_j eine der Basisfunktionen zwischen 0 und m. Um eine Lösung für alle c zu erhalten, trägt man die Formeln in ein lineares Gleichungssystem ein. Um dieses dann zu lösen, werden für g_j alle Basisfunktionen angenommen. Um das besser repräsentieren zu können, wählt man eine Darstellung mit Hilfe von Matrizen

  • A=\begin{pmatrix} g_0(x_1) & g_1(x_1) & \cdots & g_m(x_1) \\ g_0(x_2) & g_1(x_2) & \cdots & g_m(x_2) \\ \vdots & \vdots & \cdots & \vdots \\ g_0(x_n) & g_1(x_n) & \cdots & g_m(x_n)\end{pmatrix}

Der Faktor g_j ist die Transpornierte der Matrix A. Daraus ergibt sich die Form

  • A^TA\vec c = A^T \vec y

Damit kann man dieses Gleichungssystem nach \vec c lösen und erhält die Faktoren für die einzelnen Polynome.

  • \vec c=(c_0,c_1,...,c_m)^T

Maple-Worksheet (Maple 11)

restart: 
with(linalg):
with(plots): 
x := [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; 
y := [0, 4, 9, 16, 25, 36, 49, 64, 81, 100];
g := x->x^0, x->x, x->x^2, x->x^3; 
n := nops(x); 
m := nops([g])-1; 
A := matrix(n, m+1, 0): 
c := vector(m, 0): 

for k to n do 
  for i to m+1 do 
    A[k, i] := g[i](x[k]);
  od:
od:
evalm(A); 
AT := transpose(A):
left := evalm(AT&*A): 
right := (AT&*y): 
c := evalf(linsolve(left, right));
                      x:=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
                  y:=[0, 4, 9, 16, 25, 36, 49, 64, 81, 100]
                                           2        3
                  g:=x -> 1, x -> x, x -> x , x -> x 
                                    n:=10
                                     m:=3
                c:=[0.1762237762,2.635198135,0.8671328671,0.008158508158]
h := 0:
for i from 0+1 to m+1 do h := h+c[i]*g[i] od:
pkt := [seq([x[i], y[i]], i = 1 .. n)]:
bild1 := plot(pkt, 0 .. x[n], 0 .. y[n], style = point, symbol = diamond); 
bild2 := plot(h(xx), xx = x[1] .. x[n], color = BLACK); 
display(bild1, bild2, labels = ['x', 'h(x)']);

Übungsaufgaben

Aufgaben

Folien

  • Hier sind die Folien zur Vorlesung
Hilfsmittel_Mathematik1_v1.pdf