Sembei Norimaki a fait un bon travail d'expliquer votre première question, je vais donc regarder votre question secondaire = est polyfit la bonne fonction?
La ligne de meilleur ajustement est définie comme la ligne ayant une erreur moyenne de zéro.
S'il s'agit d'une "ligne", nous pourrions utiliser polyfit, qui s'adaptera à un polynôme. Bien sûr, une "ligne" peut être définie comme un polynôme du premier degré, mais les polynômes du premier degré ont des propriétés qui facilitent la gestion. La première équation que vous cherchez devrait venir sous cette forme polynomiale d'ordre (ou linéaire):
y = mx + b
où y est la variable dépendante et X est la variable indépendante. Le défi est donc le suivant: trouver le m et le b tels que le y modélisé soit aussi proche que possible du y réel. Comme il s'avère, l'erreur associée à un ajustement linéaire est convexe, ce qui signifie qu'il a une valeur minimale. Pour calculer cette valeur minimale, il est plus simple de combiner le biais et les vecteurs x comme suit:
Xcombined = [x.' ones(length(x),1)];
ensuite utilisé l'équation normale, dérivée de la minimisation de l'erreur
beta = inv(Xcombined.'*Xcombined)*(Xcombined.')*(y.')
grand, maintenant notre ligne est définie comme Y = Xcombined * beta. de tracer une ligne, il suffit de l'échantillon une gamme de x et ajouter le b terme
Xplot = [[0:.1:5].' ones(length([0:.1:5].'),1)];
Yplot = Xplot*beta;
plot(Xplot, Yplot);
Alors, pourquoi fonctionne-t-polyfit si mal? bien, je ne peux pas dire avec certitude, mais mon hypothèse est que vous avez besoin de transposer vos matrices x et y. Je suppose que cela vous donnerait une ligne beaucoup plus raisonnable.
x = x.';
y = y.';
puis essayez
p = polyfit(x,y,n)
J'espère que cela aide. Un homme sage m'a dit une fois (et comme j'apprends tous les jours), ne faites pas confiance à un algorithme que vous ne comprenez pas!
'x' et' y' sont des vecteurs, leur transposition n'aura aucun effet. L'exemple de la question a de très mauvais résultats de régression car, comme vous pouvez le voir, la corrélation des données est très faible. La régression ne peut pas faire de magie, donc si vous voulez insérer une ligne dans une donnée faiblement corrélée, vous devriez vous attendre à une grosse erreur. Quoi qu'il en soit, un bon conseil du sage. –