//this is actually autocovariance
float autocovariance(vector <vector<float> > &G, int h, float avg) {
float ss = 0;
//loop through the paths
for(int i=0; i< G.size()-h; i++) {
for(int j=0; j<G[i].size(); j++) {
//ss = ss + (G[i][h+t] - avg) * (G[i][h] - avg);
//cout << j << endl;
//cout << (G[i+h][j] - avg) << endl;
ss = ss + (G[i+h][j] - avg) * (G[i][j] - avg);
}
}
ss = ss/(float)( (G.size()-h) * G[0].size() );
return ss;
}
float error(vector< vector<float> > &G, float avg) {
float ss=0;
/*
for(int h=1; h<G.size(); h++) {
ss = ss + autocorrelation(G, h, avg);
}
ss = 2*ss + autocorrelation(G, 0, avg);
*/
ss = autocovariance(G, 0, avg);
//sqrt( abs(ss)/(float)(G.size() * G[0].size()) );
ss = sqrt(autocovariance(G, 0, avg));
return ss;
}