2017-06-01 87 views
1

我有X和Y的數組。使用Excel,我可以獲得3-5階的多項式擬合。我決定創建一個代碼,以便在選擇GoodnessOfFit.RSquared(New)/GoodnessOfFit.RSquared(Previous)< 1.05時選擇適合度最低的訂單,然後我將停止選擇訂單Previous模型。我驚訝地發現R^2從階數2下降到階數3(R^2 = 0.35對R^2 = 0.21)。檢查係數和繪圖數據到同一個excel文件。驚訝的是如何脫離健康線。檢查用於polyfit的「RosettaCode」解決方案,也沒有看到結果甚至接近Excel預測的結果。Math.Net中的多項式階數3-5 C#

該問題的任何解決方案?

實施例設置的數據:

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 }; 

回答

1

解決。 Math.Net可以很好地計算係數,但是在我的情況下,X應該從UnixTimeStamp過渡到更小的數字。例如:

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