6 #ifndef DERIVATION_THEORETICA_H
7 #define DERIVATION_THEORETICA_H
9 #include "../core/function.h"
10 #include "../polynomial/polynomial.h"
20 template<
typename Field = real>
23 if (p.coeff.size() == 0) {
28 if (p.coeff.size() == 1)
32 Dp.coeff.resize(p.coeff.size() - 1);
34 for (
unsigned int i = 1; i < p.size(); ++i)
35 Dp.coeff[i - 1] = p[i] * i;
49 typename RealFunction = std::function<
real(
real)>,
50 enable_real_func<RealFunction> =
true
53 return (f(x + h) - f(x - h)) / (2.0 * h);
65 typename RealFunction = std::function<
real(
real)>,
66 enable_real_func<RealFunction> =
true
69 return (f(x + h) - f(x)) / h;
81 typename RealFunction = std::function<
real(
real)>,
82 enable_real_func<RealFunction> =
true
85 return (f(x) - f(x - h)) / h;
97 typename RealFunction = std::function<
real(
real)>,
98 enable_real_func<RealFunction> =
true
114 typename RealFunction = std::function<
real(
real)>,
115 enable_real_func<RealFunction> =
true
119 real A[degree][degree];
121 for (
unsigned int i = 0; i < degree; ++i) {
123 for (
unsigned int n = 0; n <= i; ++n) {
125 unsigned int m = i - n;
131 A[n][m] = (coeff * A[n - 1][m + 1] - A[n - 1][m]) / (coeff - 1);
137 return A[degree - 1][0];
149 typename RealFunction = std::function<
real(
real)>,
150 enable_real_func<RealFunction> =
true
165 typename RealFunction = std::function<
real(
real)>,
166 enable_real_func<RealFunction> =
true
169 return (f(x + h) - (2 * f(x)) + f(x - h)) / (h * h);
A polynomial of arbitrary order.
Definition: polynomial.h:25
#define TH_MATH_ERROR(F_NAME, VALUE, EXCEPTION)
TH_MATH_ERROR is a macro which throws exceptions or modifies errno (depending on which compiling opti...
Definition: error.h:219
Main namespace of the library which contains all functions and objects.
Definition: algebra.h:27
double real
A real number, defined as a floating point type.
Definition: constants.h:188
real deriv_forward(RealFunction f, real x, real h=CALCULUS_DERIV_STEP)
Approximate the first derivative of a real function using the forward method.
Definition: deriv.h:68
constexpr real CALCULUS_DERIV_STEP
Default variation for derivative approximation.
Definition: constants.h:302
real deriv_ridders(RealFunction f, real x, real h=0.01, unsigned int degree=3)
Approximate the first derivative of a real function using Ridder's method of arbitrary degree.
Definition: deriv.h:117
real deriv_ridders2(RealFunction f, real x, real h=CALCULUS_DERIV_STEP)
Approximate the first derivative of a real function using Ridder's method of second degree.
Definition: deriv.h:100
real deriv_central(RealFunction f, real x, real h=CALCULUS_DERIV_STEP)
Approximate the first derivative of a real function using the central method.
Definition: deriv.h:52
real deriv2(RealFunction f, real x, real h=CALCULUS_DERIV_STEP)
Approximate the second derivative of a real function using the best available algorithm.
Definition: deriv.h:168
real deriv_backward(RealFunction f, real x, real h=CALCULUS_DERIV_STEP)
Approximate the first derivative of a real function using the backward method.
Definition: deriv.h:84
polynomial< Field > deriv(const polynomial< Field > &p)
Compute the exact derivative of a polynomial function.
Definition: deriv.h:21
dual2 square(dual2 x)
Return the square of a second order dual number.
Definition: dual2_functions.h:23
real nan()
Return a quiet NaN number in floating point representation.
Definition: error.h:54