(* Methode der kleinsten Fehlerquadrate *)

(* Testdaten in (x,y) Paaren *)
Daten = {{0.5,2.1}, {1.0,3.3}, {2.2,4.8},
         {2.9,5.5}, {4.0,5.9}, {5.0,5.4}, 
         {6.1,5.1}, {7.0,4.1}, {8.1,4.3}, {9.5,4.0}};

(* Zuerst versuchen wir die Loesung in Teilschritten: *)

(* Hoechste Ordnung des Fitpolynoms: *)
Npol = 3;

(* Berechne <1>, <x>, <x^2>, .. <x^(2 Npol)>, <y>,..etc. *)

Mean[n_] := N[Sum[Daten[[i,1]]^n,{i,1,Length[Daten]}]];
Meany[n_] := N[Sum[Daten[[i,1]]^n Daten[[i,2]],{i,1,Length[Daten]}]];

(* Die Kovarianzamatrix A und der inhomogene Vektor B *)
A = Table[Mean[i + j],{i,0,Npol},{j,0,Npol}]
B = Table[Meany[i],{i,0,Npol}]

(* Loesung des LGS: *)
Parameters = Inverse[A].B

(* Das gleiche Ergebnis sollte man erhalten, wenn man
   die vorgesehene Funktion verwendet : *)
Result[x_] = Fit[Daten,{1, x, x^2, x^3}, x]

(* Zum Abschluss folgen Plots der Daten und des Fits *)

DatPlot = ListPlot[Daten,Prolog->PointSize[0.02]];
ResPlot = Plot[Result[x],{x,0,10}];
Show[{ResPlot,DatPlot},Prolog->PointSize[0.02]]

(* Stimmen die Daten mit dem Fitpolynom gut ueberein? 
   Was passiert, wenn die Ordnung des Fitpolynoms geaendert 
   wird? *)
