using System; using static System.Math; using static System.Double; public static partial class quad{ public static double triov( Func f,double a,double b, double acc=1e-3, double eps=1e-3) { return adapt3o(t=>f(a+(b-a)*(3*t*t-2*t*t*t))*(b-a)*6*(t-t*t) ,0,1,acc,eps); } public static double adapt3o( Func f,double a,double b, double acc=1e-3, double eps=1e-3, int limit=99, double f2=NaN) { double f1=f(a+(b-a)/6), f3=f(a+5*(b-a)/6); if( IsNaN(f2) ) f2=f(a+3*(b-a)/6); double Q=(3*f1+2*f2+3*f3)/8*(b-a); double q=(f1+f2+f3)/3*(b-a); double err=Abs(Q-q)/2; if(limit==0){ Console.Error.WriteLine($"adapt: limit reached: a={a} b={b}"); return Q; } if(err