double Integration::stepRectangle(double eps) const { Derivator* derivator = new Derivator(f); Func g = derivator->derive(); double max = g.maxModulo(ab); delete derivator; return (2*eps / (max*(ab.end() - ab.begin()))); }
double Integration::stepSimpson(double eps) const { Derivator* derivator = new Derivator(f); Func g = derivator->derive(4); double max = g.maxModulo(ab); delete derivator; return pow(180*eps / (max*(ab.end() - ab.begin())), 0.25); }
double Integration::stepTrapezoid(double eps) const { Derivator* derivator = new Derivator(f); Func g = derivator->derive(2); double max = g.maxModulo(ab); delete derivator; return sqrt(12*eps / (max*(ab.end() - ab.begin()))); }
double Integration::errorSimpson() const { Derivator* derivator = new Derivator(f); Func g = derivator->derive(4); double max = g.maxModulo(ab); double h = (ab.end() - ab.begin()) / 4; delete derivator; return (max * pow(h, 4) * (ab.end() - ab.begin())) / 180; }
double Integration::errorRectangle() const { Derivator* derivator = new Derivator(f); Func g = derivator->derive(); double max = g.maxModulo(ab); double h = (ab.end() - ab.begin()) / 4; delete derivator; return (max * h * (ab.end() - ab.begin())) / 2; }