bool OjaData::derivative(const Point& x,const Point& direction,double& Dpos ,double& Dneg) const { Point d=direction; d.normalize(); Index I(dim(),size()); Hyperplane H; double D; // Apumuuttuja yhden termi laskemiseen double sum=0.0; // Summa positiiviseen suuntaan double sum_=0.0; // Summa negatiiviseen suuntaan double k=1.0 / double(fact(dim())); double sgn; for(int i=0; i<hyperplanes(); i++) { if(planes) H=hyperplane(i); else { H.get(*this,I); I++; } H.normalize(); D = k * (H|d); sgn = H.side(x); if(sgn > 0) // Piste ei ole hypertasolla sum += D, sum_ -= D; else if (sgn < 0) sum -= D, sum_ += D; else // Piste on hypertasolla sum += fabs(D), sum_ += fabs(D); } Dpos = sum; Dneg = sum_; return Dpos >= 0.0 && Dneg >= 0.0; }