2017-06-01 7 views
1

J'ai des tableaux de X et Y. En utilisant Excel, j'ai pu obtenir certains ajustements polynomiaux d'ordres 3-5. J'ai décidé de faire un code qui va sélectionner l'ordre le plus bas de l'ajustement dans le chemin si GoodnessOfFit.RSquared(New)/GoodnessOfFit.RSquared(Previous)< 1.05 puis j'arrête de sélectionner les commandes en choisissant le modèle Previous. J'ai été surpris que R^2 soit passé de l'ordre 2 à l'ordre 3 (R^2 = 0,35 vs R^2 = 0,21). Vérifier les coefficients et tracer les données dans le même fichier Excel. A été surpris à quel point la ligne d'ajustement est. Vérifiez la solution "RosettaCode" pour polyfit et ne voyez pas que les résultats sont même proches de ce que Excel prédit.Ordre polynomial 3-5 avec Math.Net C#

Une solution au problème?

Exemple ensemble de données:

double[] Y = new double[] { 0.1599, 0.1585, 0.1499, 0.1506, 0.1494, 0.1494, 0.1494, 0.1494, 0.1619, 0.1619, 0.1604, 0.1604, 0.1479, 0.1479, 0.1604, 0.1738, 0.1623, 0.1553, 0.1431, 0.126, 0.1259, 0.1259, 0.1254, 0.1436 }; 
double[] X = new double[] { 1495981908, 1495983810, 1495985705, 1495987307, 1495987689, 1495988066, 1495988452, 1495988820, 1495989206, 1495989589, 1495989972, 1495990357, 1495990747, 1495991122, 1495991499, 1495991876, 1495992255, 1495992629, 1495993009, 1495993378, 1495993758, 1495994134, 1495994533, 1495994913 }; 

Répondre

1

résolu. Math.Net calcule bien les coefficients, mais dans mon cas X devrait être passé de UnixTimeStamp à un plus petit nombre e.g .:

_Min = X.Min(); 
_X = new double[X.Length]; 
for (int i = 0; i < X.Length; i++) 
    _X[i] = X[i] - _Min;