using System; using static System.Math; public static partial class math{ public delegate double integrand (double x); public static double integrate (integrand f, double a, double b, double acc, double eps){ double f2=f(a+(b-a)/3), f3=f(a+2*(b-a)/3); double result=adapto(f,a,b,acc,eps,f2,f3); //double f1=f(a), f3=f(b); //double result=adapt3c(f,a,b,acc,eps,f1,f3); //double f1=f(a), f3=((a+b)/2), f5=f(b); //double result=adapt5c(f,a,b,acc,eps,f1,f3,f5); //double h=b-a; //double f1=f(a), f3=(a+2*h/6), f5=f(a+4*h/6), f7=f(b); //double result=adapt7c(f,a,b,acc,eps,f1,f3,f5,f7); return result; } private static double adapt (integrand f,double a,double b,double acc,double eps,double f2,double f3){ double h=b-a, f1=f(a+h/6), f4=f(a+5*h/6); double Q=(f1+f4)*h/3+(f2+f3)*h/6; double q=(f1+f2+f3+f4)*h/4; double tol=acc+eps*Abs(Q); double err=Abs(Q-q)/2; if(err