taylor
Computes the first and second derivatives of a function using the Taylor formula.
You're viewing an older version of this page (#5641). View the current version.
Interface
#include <codecogs/maths/calculus/differential/taylor.h>
using namespace Maths::Calculus::Differential;
Overview
This module computes the first or second numerical derivatives of a function at a particular point using the Taylor formula. The advantage is that the interval used in computing the numerical derivative need not be symmetrical around the given point.
References
Mihai Postolache - "Metode Numerice", Editura Sirius
FUNCTION
taylor1
Consider a function $f:[a,b] \rightarrow \mathbb{R}$ that is three times differentiable on its domain, and three abscissas $x_1, x_*, x_2 \in [a,b]$ such that
where $h, \gamma$ are real positive constants. Then the approximate value of the first derivative $\displaystyle \frac{df}{dx}$ at the abscissa $x_*$ is given by:
or
In the case $\gamma = 1$ we have an error bound of:
while in the case when $\gamma \neq 1$ the error is given by:
where $\xi_1 \in (x_1, x_*)$ and $\xi_2 \in (x_*, x_2)$. The error estimate for $\gamma \neq 1$ comes from the Taylor formula applied to the given function $f$ at point $x_*$.
On account of the above relations you may notice that the error approaches zero as $h$ approaches zero for $\gamma \neq 1$, and as $h^2$ approaches zero for $\gamma = 1$.
Example 1
Below we give an example of how to compute the first numerical derivative of $\cos x$ at point $x = 1$, considering $\gamma = 1$ (equally spaced abscissas). The absolute error from the actual value of the derivative at that point is also displayed.
#include <codecogs/maths/calculus/differential/taylor.h>
#include <stdio.h>
#include <math.h>
// precision constant
#define H 0.001
// function to differentiate
double f(double x)
{
return cos(x);
}
// the derivative of the function, to estimate errors
double df(double x)
{
return -sin(x);
}
int main()
{
// display precision
printf(" h = %.3lf\n\n", H);
// compute the numerical derivative
double fh = Maths::Calculus::Differential::taylor1(f, 1, H);
// display the result and error estimate
printf(" f(x) = cos(x)\n");
printf(" f`(1) = %.15lf\n", fh);
printf("real value = %.15lf\n", df(1));
printf(" error = %.15lf\n\n", fabs(fh - df(1)));
return 0;
}Output
h = 0.001
f(x) = cos(x)
f`(1) = -0.841470844562695
real value = -0.841470984807897
error = 0.000000140245202Parameters
Returns
FUNCTION
taylor2
Consider a function $f:[a,b] \rightarrow \mathbb{R}$ that is four times differentiable on its domain, and three abscissas $x_1, x_*, x_2 \in [a,b]$ such that
where $h, \gamma$ are real positive constants. Then the approximate value of the second derivative $\displaystyle \frac{d^2f}{dx^2}$ at the abscissa $x_*$ is given by:
or
In the case $\gamma = 1$ we have an error bound of:
while in the case when $\gamma \neq 1$ the error is given by:
where $\xi_1 \in (x_1, x_*)$ and $\xi_2 \in (x_*, x_2)$. The error estimate for $\gamma \neq 1$ comes from the Taylor formula applied to the given function $f$ at point $x_*$.
On account of the above relations you may notice that the error approaches zero as $h$ approaches zero for $\gamma \neq 1$, and as $h^2$ approaches zero for $\gamma = 1$.
Example 1
Below we give an example of how to compute the second numerical derivative of $\cos x$ at $x = 1$, considering $\gamma = 1$ (equally spaced abscissas). The absolute error from the actual value of the derivative at that point is also displayed.
#include <codecogs/maths/calculus/differential/taylor.h>
#include <stdio.h>
#include <math.h>
// precision constant
#define H 0.0001
// function to differentiate
double f(double x)
{
return cos(x);
}
// the second derivative of the function, to estimate errors
double d2f(double x)
{
return -cos(x);
}
int main()
{
// display precision
printf(" h = %.4lf\n\n", H);
// compute the numerical derivative
double fh = Maths::Calculus::Differential::taylor2(f, 1, H);
// display the result and error estimate
printf(" f(x) = cos(x)\n");
printf(" f``(1) = %.15lf\n", fh);
printf("real value = %.15lf\n", d2f(1));
printf(" error = %.15lf\n\n", fabs(fh - d2f(1)));
return 0;
}Output
h = 0.0001
f(x) = cos(x)
f``(1) = -0.540302319866019
real value = -0.540302305868140
error = 0.000000013997879