2010-12-01 2 views
2

Ich habe mit den zwei Möglichkeiten der Implementierung eines LSF-Algorithmus (Least-Squares-Fit) experimentiert here gezeigt.Akkurate Least-Squares-Fit-Algorithmus benötigt

Der erste Code ist einfach der Lehrbuch Ansatz, wie von Wolfram Seite auf LSF beschrieben. Der zweite Code ordnet die Gleichung neu an, um Maschinenfehler zu minimieren. Beide Codes erzeugen ähnliche Ergebnisse für meine Daten. Ich habe diese Ergebnisse mit Matlabs p = polyfit (x, y, 1) -Funktion verglichen, indem ich Korrelationskoeffizienten verwendet habe, um die "Güte" der Anpassung zu messen und jede der 3 Routinen zu vergleichen. Ich stellte fest, dass, während alle drei Methoden zumindest für meine Daten gute Ergebnisse lieferten, Matlabs Routine am besten passte (die anderen beiden Routinen hatten ähnliche Ergebnisse).

Matlabs Funktion p = polyfit (x, y, 1) verwendet eine Vandermonde-Matrix, V (n x 2-Matrix) und QR-Faktorisierung, um das Problem der kleinsten Quadrate zu lösen. In Matlab-Code, es sieht aus wie:

V = [x1,1; x2,1; x3,1; ... xn,1] % this line is pseudo-code 
[Q,R] = qr(V,0); 
p = R\(Q'*y);  % performs same as p = V\y 

ich kein Mathematiker bin, so dass ich nicht verstehen, warum es wäre genauer. Obwohl der Unterschied gering ist, muss ich in meinem Fall die Steigung von der LSF erhalten und sie mit einer großen Zahl multiplizieren, so dass eine Verbesserung der Genauigkeit in meinen Ergebnissen angezeigt wird.

Aus Gründen, auf die ich nicht eingehen kann, kann ich Matlabs Routine nicht in meiner Arbeit verwenden. Also, ich frage mich, ob jemand eine genauere Gleichungs-basierte Ansatzempfehlung hätte, die ich verwenden könnte, das ist eine Verbesserung gegenüber den beiden oben genannten Ansätzen, in Bezug auf Rundungsfehler/Maschinengenauigkeit/etc.

Alle Kommentare geschätzt! Danke im Voraus.

+0

QR ist ein stabiler Weg, um Gleichungssysteme zu lösen. Wenn Ihre Daten kurz vor der Entartung stehen, ist SVD wahrscheinlich ein besserer Weg (wenn auch rechenintensiver). Kleinste Probleme sollten niemals naiv behandelt werden, wie Sie gezeigt haben. –

Antwort

0

Für eine Polynomanpassung können Sie eine Vandermonde Matrix erstellen und das lineare System lösen, wie Sie bereits getan haben.

Eine andere Lösung verwendet Methoden wie Gauss-Newton, um die Daten anzupassen (da das System linear ist, sollte eine Iteration gut funktionieren). Es gibt Unterschiede zwischen den Methoden. Ein möglicher Grund ist die Runge's phenomenon.

+0

http://www.jstor.org/pss/2004623 scheint beide Ansätze zu kombinieren. –

+0

Danke, wäre Gauss-Newton genauer als die Methode der kleinsten Quadrate? Ich würde nicht glauben, dass ich Runges Phänomen sehen würde, da ich nur als y = mx + b (1. Ordnung) modelliere. – ggkmath

+0

Ich habe die erste Bestellung nicht gesehen, sorry. Aber wie messen Sie die Genauigkeit? Vergleichen Sie einfach die Ergebnisse mit Matlab? – Kknd