コード例 #1
0
ファイル: HW3.cpp プロジェクト: aaronmyers/ML
double wnorm(std::vector<int> y, std::vector<double> alpha, std::vector<std::vector<double>> traindata, int maxn, std::vector<double> w, std::vector<std::vector<int>> feattrain) {
	std::vector<double> wtemp(w.size());
	std::fill(wtemp.begin(),wtemp.end(),0);
	for(int i=0;i<y.size();i++) {
		int h=feattrain[i].size();
		for(int j=0;j<h;j++){
			wtemp[feattrain[i][j]]+=alpha[i]*y[i]*traindata[i][j];
		}	
	}
	double norm=0;
	for(int k=0;k<w.size();k++) {
		wtemp[k] -= w[k];
	}
	for(int k=0;k<w.size();k++) {
		norm+= wtemp[k]*wtemp[k];
}
return norm;
}
コード例 #2
0
/*************************************************************************
Rational barycentric interpolation without poles

The subroutine constructs the rational interpolating function without real
poles. It should be noted that the barycentric weights of the  interpolant
constructed are independent of the values of the given function.

Input parameters:
    X   -   interpolation nodes, array[0..N-1].
    N   -   number of nodes, N>0.
    D   -   order of the interpolation scheme, 0 <= D <= N-1.

Output parameters:
    W   -   array of the barycentric weights which  can  be  used  in  the
            BarycentricInterpolate subroutine. Array[0..N-1]

Note:
    this algorithm always succeeds and calculates the weights  with  close
    to machine precision.

  -- ALGLIB PROJECT --
     Copyright 17.06.2007 by Bochkanov Sergey
*************************************************************************/
void buildfloaterhormannrationalinterpolant(ap::real_1d_array x,
     int n,
     int d,
     ap::real_1d_array& w)
{
    double s0;
    double s;
    double v;
    int i;
    int j;
    int k;
    ap::integer_1d_array perm;
    ap::real_1d_array wtemp;

    ap::ap_error::make_assertion(n>0, "BuildRationalInterpolantWithoutPoles: N<=0!");
    ap::ap_error::make_assertion(d>=0&&d<=n, "BuildRationalInterpolantWithoutPoles: incorrect D!");
    
    //
    // Prepare
    //
    w.setbounds(0, n-1);
    s0 = 1;
    for(k = 1; k <= d; k++)
    {
        s0 = -s0;
    }
    perm.setbounds(0, n-1);
    for(i = 0; i <= n-1; i++)
    {
        perm(i) = i;
    }
    tagsortfasti(x, perm, n);
    
    //
    // Calculate Wk
    //
    for(k = 0; k <= n-1; k++)
    {
        
        //
        // Wk
        //
        s = 0;
        for(i = ap::maxint(k-d, 0); i <= ap::minint(k, n-1-d); i++)
        {
            v = 1;
            for(j = i; j <= i+d; j++)
            {
                if( j!=k )
                {
                    v = v/fabs(x(k)-x(j));
                }
            }
            s = s+v;
        }
        w(k) = s0*s;
        
        //
        // Next S0
        //
        s0 = -s0;
    }
    
    //
    // Reorder W
    //
    wtemp.setbounds(0, n-1);
    ap::vmove(&wtemp(0), &w(0), ap::vlen(0,n-1));
    for(i = 0; i <= n-1; i++)
    {
        w(perm(i)) = wtemp(i);
    }
}