/* * LEAST SQUARES FITTING OF EXPERIMENTAL DATA * * Peter Signell, 3/02 */ #include"lib351.h" void main(){ // output initialization ofstream dataOutStr; outFileMaker("m359p1c.out", &dataOutStr); ifstream dataInStr; inputFileFinder("m359p1c.dat", &dataInStr); // program variable definitions const int wPage = 61; const double xScale = 6.; // write header dataOutStr<<"m359p1c.out: Least Squares Straight Line Fit"<< endl< 0){ sig = pow(deltaY[0], 2); } else{ sig = 1; } s1 = 1./sig; sX = x[0]/sig; sXX = pow(x[0], 2)/sig; sY = y[0]/sig; sXY = x[0]*y[0]/sig; xMax = x[0]; xMin = x[0]; yMax = y[0]; yMin = y[0]; for(int i = 1; i < N; i++){ if(deltaY[i] > 0){ sig = pow(deltaY[i], 2); } else{ sig = 1; } s1 += 1./sig; sX += x[i]/sig; sXX += pow(x[i], 2)/sig; sY += y[i]/sig; sXY += x[i]*y[i]/sig; if(x[i] < xMin){ xMin = x[i]; } if(x[i] > xMax){ xMax = x[i]; } if(y[i] < yMin){ yMin = y[i]; } if(y[i] > yMax){ yMax = y[i]; } } a1 = (sXX * sY - sX * sXY)/(s1 * sXX - sX * sX); a2 = (sX * sY - s1 * sXY)/(sX * sX - sXX * s1); chi = 0; for(int j = 0; j < N; j++){ y1 = a1 + a2 * x[j]; residual = y[j] - y1; if(deltaY[j] > 0){ sig = pow(deltaY[j], 2); } else{ sig = 1; } chi += residual*residual/sig; dataOutStr<= 1 && m1 < wPage){ imageLine[m1] = '*'; } setm = 0; for(int j = 0; j < N; j++){ if(fabs(x1 - x[j]) <= deltaX/2){ m2 = int((y[j] - yMin)/deltaY1 + xScale + 0.5); imageLine[m2] = '0'; setm = 1; } } dataOutStr<= 1 && m1 < wPage){ imageLine[m1] = ' '; } if(setm == 1){ imageLine[m2] = ' '; } x1 += deltaX; } dataOutStr<<" "; lineOutput(58, '~', &dataOutStr); dataOutStr<