/*************************************************************************** * Copyright (c) 2023 Ondsel, Inc. * * * * This file is part of OndselSolver. * * * * See LICENSE file for details about copyright. * ***************************************************************************/ #pragma once #include #include "AnyGeneralSpline.h" namespace MbD { class GeneralSpline : public AnyGeneralSpline { //derivs degree index delta public: GeneralSpline() = default; GeneralSpline(Symsptr arg); double getValue() override; Symsptr differentiateWRTx() override; void arguments(Symsptr args) override; void initxdegreexsys(Symsptr arg, size_t order, std::shared_ptr> xarr, std::shared_ptr> yarr); void computeDerivatives(); bool isCyclic() const; double derivativeAt(size_t derivativeOrder, double arg); void calcIndexAndDeltaFor(double xxx); void calcCyclicIndexAndDelta(); void calcNonCyclicIndexAndDelta(); void calcIndexAndDelta(); void searchIndexFromto(size_t start, size_t end); Symsptr clonesptr() override; Symsptr copyWith(Symsptr arg) override; double y(double xxx); std::ostream& printOn(std::ostream& s) const override; FMatDsptr derivs; size_t degree = SIZE_MAX, index = SIZE_MAX; double delta = std::numeric_limits::min(); }; }