2010-12-01 4 views
2

J'ai expérimenté les deux façons d'implémenter un algorithme d'ajustement des moindres carrés (LSF) illustré here.Algorithme d'ajustement des moindres carrés précis nécessaire

Le premier code est simplement l'approche de manuel, comme décrit par la page de Wolfram sur LSF. Le deuxième code réorganise l'équation pour minimiser les erreurs de la machine. Les deux codes produisent des résultats similaires pour mes données. J'ai comparé ces résultats avec la fonction p = polyfit (x, y, 1) de Matlab, en utilisant des coefficients de corrélation pour mesurer la «qualité» de l'ajustement et comparer chacune des trois routines. J'ai observé que bien que les trois méthodes aient produit de bons résultats, au moins pour mes données, la routine de Matlab avait la meilleure correspondance (les deux autres routines avaient des résultats similaires).

La fonction p = polyfit (x, y, 1) de Matlab utilise une matrice de Vandermonde, une matrice V (n x 2) et une factorisation QR pour résoudre le problème des moindres carrés. Dans le code Matlab, il ressemble à:

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 

Je ne suis pas un mathématicien, donc je ne comprends pas pourquoi il serait plus exact. Bien que la différence soit faible, dans mon cas, j'ai besoin d'obtenir la pente de la LSF et de la multiplier par un grand nombre, de sorte que toute amélioration de la précision se manifeste dans mes résultats.

Pour des raisons que je ne peux pas comprendre, je ne peux pas utiliser la routine de Matlab dans mon travail. Donc, je me demande si quelqu'un a une recommandation d'approche basée sur l'équation plus précise que je pourrais utiliser qui est une amélioration par rapport aux deux approches ci-dessus, en termes d'erreurs d'arrondi/précision de la machine/etc.

Tout commentaire apprécié! Merci d'avance.

+0

QR est un moyen stable de résoudre des systèmes d'équations. Si vos données sont proches de dégénérer, SVD est probablement un meilleur moyen d'aller (bien que plus coûteux en termes de calcul). Les problèmes de moindre carré ne devraient jamais être traités avec naïveté, comme vous l'avez montré. –

Répondre

0

Pour un ajustement polynomial, vous pouvez créer une matrice Vandermonde et résoudre le système linéaire, comme vous l'avez déjà fait.

Une autre solution consiste à utiliser des méthodes comme Gauss-Newton pour s'adapter aux données (puisque le système est linéaire, une itération devrait faire l'affaire). Il y a des différences entre les méthodes. Une raison possible est le Runge's phenomenon.

+0

http://www.jstor.org/pss/2004623 semble combiner vos deux approches. –

+0

Merci, Gauss-Newton serait-il plus précis que la méthode des moindres carrés? Je ne pense pas que je verrais le phénomène de Runge puisque je modélise seulement comme y = mx + b (1er ordre). – ggkmath

+0

Je n'ai pas vu le premier ordre, désolé. Mais comment mesurez-vous la précision? Juste en comparant les résultats avec Matlab? – Kknd

Questions connexes