/* [einirv] - change main return type from void to int */ int main() { double a,b,epsabs,epsrel,abserr; double y; int irule,neval,ier,last; char buffer[40]; a = 0.0; b = 1.0; epsabs = 0.0; epsrel = 1e-8; printf("G/K rule (1-6) ?"); gets(buffer); sscanf(buffer,"%d",&irule); if ((irule < 1) || (irule > 6)) { printf("Invalid rule!\n"); return 0; } y=dqage(efunc,a,b,epsabs,epsrel,irule,&abserr,&neval,&ier,&last); printf("dqage integral = %.17lg\n",y); printf("abserr = %.17lg, neval = %d, ier = %d\n", abserr,neval,ier); return 0; }
/* DQAG - Approximation to definite integral. (From QUADPACK) * * Calls DQAGE with appropriate parameters assigned. * * PARAMETERS: * * f() - double precision function to be integrated. * * a - lower limit of integration. * * b - upper limit of integration. * * epsabs - absolute accuracy requested. * * epsrel - relative accuracy requested. * * irule - integration rule to be used as follows: * irule = 1 -- G_K 7-15 * irule = 2 -- G_K 10-21 * irule = 3 -- G_K 15-31 * irule = 4 -- G_K 20-41 * irule = 5 -- G_K 25-51 * irule = 6 -- G_K 30-61 */ double dqag(dq_function_type f,double a,double b,double epsabs, double epsrel,int irule,double *abserr,int *neval,int *ier, void* user_data) { double result; int last; result = dqage(f,a,b,epsabs,epsrel,irule,abserr,neval,ier,&last, user_data); return result; }
int main() { double a,b,epsabs,epsrel,abserr; double resabs,resasc; double y; int irule,neval,ier,last,i; char buffer[40]; a = 0.0; b = 1.0; epsabs = 0.0; epsrel = 1e-8; for (irule = 1; irule <= 6; ++irule) { y=dqage(efunc,a,b,epsabs,epsrel,irule,&abserr,&neval,&ier,&last,0); printf("G/K rule = %i\n", irule); printf("dqage integral = %.17lg\n",y); printf("abserr = %.17lg, neval = %d, ier = %d\n", abserr,neval,ier); printf("\n"); } return 0; }