예제 #1
0
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;
  
} 
예제 #2
0
double l1norm(VEC x){
    double sum = 0.0;
    for (int i = 0; i < x.len(); i++){
	sum += std::abs(x[i]);
    }
    return sum;
}
예제 #3
0
double l2norm(VEC x){
    double sum = 0.0;
    for(int i = 0; i< x.len(); i++){
	sum += (x[i]*x[i]);
    }
    
    return sqrt(sum);
}
예제 #4
0
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];
}
예제 #5
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;
    }