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.
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. –