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