Example #1
0
Point OjaData::oja_rank(const Point& x) const
{
	errif(x.dim() != dim(), "OjaData::oja_rank: Illegal dimension on point " << x);

	if (plane)
		return plane->oja_rank(x);

	Point Gr(dim());
	Simplex S;
	double sgn;
	double k = 0;

	for (Index I(dim(), size()); I; I++, k++)
	{
		S.get(*this, I, x);
		sgn = S.sign();
		for (int j = 0; j<dim(); j++)
			Gr[j] += S.row_cof(j + 1) * sgn;
	}

	for (int i = 0; i < dim(); i++)
		Gr[i] /= k;

	return Gr;
}
Example #2
0
void OjaData::get_oja_and_gradient(const Point& x,double& oja
  ,Point& grad) const
{
    errif(x.dim() != dim(),"OjaData::get_oja_and_gradient: point " << x
	  << " has illegal dimension");

 	if(plane)
 	{
 		plane->oja_and_gradient(x,oja,grad);
 		return;
 	}
			
    double sum = 0.0;
    double sgn;
    double k = 1.0 / double(fact(dim()));
    Simplex S;
    Point Gr(dim());
	
    for(Index I(dim(),size()); I; I++)
    {
		S.get(*this,I,x);
		sum += S.size();
		sgn = S.sign();
		for(int j=0; j<dim(); j++)
			Gr[j] +=  S.row_cof(j+1) * sgn * k;
    }
    
    oja = sum;
    grad = Gr;
}
Example #3
0
double OjaData::oja(const Point& x) const
{
	if (size() == 0) return -1;
    errif(x.dim() != dim(),"OjaData::oja: Illegal dimension on point " << x);
	
    if(plane)
		return plane->oja(x);
	
    double sum = 0.0;
    Simplex S;
	
    for(Index I(dim(),size()); I; I++)
    {
		S.get(*this,I,x);
		sum += S.size();
    }
    
    return sum;
}
Example #4
0
Point OjaData::gradient(const Point& x) const
{
    errif(x.dim() != dim(),"OjaData::gradient: Illegal dimension on point " << x);

 	if(plane)
 		return plane->gradient(x);

    Point Gr(dim());
    Simplex S;
    double sgn;
    double k = 1.0 / double(fact(dim()));
	
    for(Index I(dim(),size()); I; I++)
    {
		S.get(*this,I,x);
		sgn =  S.sign();
		for(int j=0; j<dim(); j++)
			Gr[j] +=  S.row_cof(j+1) * sgn * k;
    }
    
    
    return Gr;
}