double integ(VEC &X,VEC &Y,int n){ // composite nth order Newton-Cotes integral int iter = (X.len()-1)/n; //printf("iter : %d\n",iter); double space = X[X.len()] - X[0]; double h = space/(X.len()-1); double sum = 0.0; VEC w(n+1); if(n == 1) w[0] = w[1] = 0.5; else if (n == 2) w[0] = w[2] = 1./3. , w[1] = 4./3.; else if (n == 3) w[0] = w[3] = 3./8. , w[1] = w[2] = 9./8.; else if (n == 4) w[0] = w[4] = 14./45. , w[1] = w[3] = 64./45. , w[2] = 24./45.; else if (n == 5) w[0] = w[5] = 95./288. , w[1] = w[4] = 375./288. , w[2] = w[3] = 250./288.; else if (n == 6) w[0] = w[6] = 41./140. , w[1] = w[5] = 216./140. , w[2] = w[4] = 27./140. , w[3] = 272./140.; /*for(int i = 0; i<=n;i++) printf("w%d = %f\n",i,w[i]); printf("space = %f\n h = %f\n",space,h);*/ for(int i = 0; i< iter; i++){ for(int j = 0; j<= n; j++){ sum += (w[j] * Y[ n*i + j ]); //printf("%d\n",n*i+j); } } return sum * h; }
double l1norm(VEC x){ double sum = 0.0; for (int i = 0; i < x.len(); i++){ sum += std::abs(x[i]); } return sum; }
double l2norm(VEC x){ double sum = 0.0; for(int i = 0; i< x.len(); i++){ sum += (x[i]*x[i]); } return sqrt(sum); }
double Lagrange(double x,VEC &XDATA,VEC &YDATA){ int n = XDATA.len(); double NS[n]; int i,j,k; for (i=0; i<n; i++) NS[i]=YDATA[i]; for (k=1; k<n; k++) { for (j=0; j<n-k; j++) { NS[j]=((x-XDATA[j])*NS[j+1]-(x-XDATA[k+j])*NS[j]) /(XDATA[j+k]-XDATA[j]); } } return NS[0]; }
double linfnorm(VEC x){ double max=0.0; for (int i = 0 ;i< x.len();i++) max = std::max(std::abs(x[i]),max); return max; }