#include #include #define EXIT_SUCCESS 0 #define EXIT_FAILURE -9 double integrand(long nDOF, double x); /* Usiamo la regola di Simpson */ /*********************************/ int main(void) { FILE *fTableTwo, *fTableThree; long numberDegreesOfFreedom, numDOF, numBins, i, j, k, factor, numProb; long maximumTrials = 1000; double chiSquared, integral, dx; double cSMin, cSMax; double oldIntegral, newIntegral, acceptableTolerance = 1.e-6; double targetProbability, acceptableProbabilityTolerance = 1.e-6; double vTargetProbability[10] = {0.995, 0.99, 0.975, 0.95, 0.9, 0.1, 0.05, 0.025, 0.01, 0.005}; fTableTwo = fopen("t_dueb.tex","w"); fTableThree = fopen("t_treb.tex","w"); oldIntegral = -9999.0; newIntegral = -9999.0; for(numDOF = 2; numDOF < 101; numDOF++){ fprintf(fTableTwo,"%ld & ",numDOF); fprintf(fTableThree,"%ld & ",numDOF); fflush(fTableTwo); fflush(fTableThree); for(numProb = 9; numProb >= 0; numProb--){ targetProbability = vTargetProbability[numProb]; numberDegreesOfFreedom = numDOF; chiSquared = 1.0; cSMin = 0.0; cSMax = 500.0; fprintf(stderr, "%lg\n", targetProbability); for(k = 0; k < maximumTrials; k++){ numBins = 100000; dx = 1.0 / (double)numBins; for(j=0;jacceptableProbabilityTolerance){ printf("A\n"); cSMax = chiSquared; chiSquared = 0.5 * (chiSquared + cSMin); } else if((integral-targetProbability)<-acceptableProbabilityTolerance){ printf("B\n"); cSMin = chiSquared; chiSquared = 0.5 * (chiSquared + cSMax); }else{ break; } } // printf("DOF %ld chi2 %.3lf dx %.3le P %.3lf\n", // numberDegreesOfFreedom, chiSquared, dx, integral); fprintf(fTableThree," %.3lf & ", chiSquared); fprintf(fTableTwo," %.2lf & ", chiSquared); fflush(fTableTwo); fflush(fTableThree); } fprintf(fTableTwo,"\n"); fprintf(fTableThree,"\n"); fflush(fTableTwo); fflush(fTableThree); } fclose(fTableTwo); fclose(fTableThree); } /*************************************************************/ double integrand(long nDOF, double x) { return pow(x, (double)nDOF * 0.5 - 1.0) * exp(- 0.5 * x); }