using System; using static System.Console; using static System.Math; using static System.Double; public partial class montecarlo{ public static double[] strata (Func f, double[] a, double[] b, double acc=1e-2, double eps=1e-2, Random RND=null, double old_N=0,double old_average=0) { if(RND==null)RND=new Random(1); int dim=a.Length; int N=16*dim; double volume=1; for(int i=0;i0){ aL[i]=sum_f_L[i]/nL[i]; vL[i]=sum_f2_L[i]/nL[i]-Pow(aL[i],2); } if(nR[i]>0){ aR[i]=sum_f_R[i]/nR[i]; vR[i]=sum_f2_R[i]/nR[i]-Pow(aR[i],2); } double measure=Abs(aL[i]-aR[i]); //double measure=vL[i]+vR[i]; //double measure=Max(vL[i],vR[i]); if(measure>vmax){vmax=measure;i_bisect=i;} } double average=(sum_f_L[i_bisect]+sum_f_R[i_bisect])/N; double integ=(average*N+old_average*old_N)/(N+old_N)*volume; double error=Abs(average-old_average)*volume; if(error