Si la función f y sus primeras n+1
derivadas son continuas, en un intervalo que contiene a y x, entonces el valor
de la función esta dado por:
Con frecuencia es conveniente simplificar la
serie de Taylor definiendo un paso h = xi+1
- xi expresando la serie de Taylor como:
Uso de la expansión en
serie de Taylor para aproximar una función con un número infinito de derivadas.
Utilizar los términos de la serie de Taylor con
n= 0 hasta 6 para aproximar la función f(x) = cos(x) en xi+1 = p/3 y sus derivadas en xi = p/4. Esto significa que h = p/3- p/4 = p/12, los
valores de las derivadas y el error de aproximación se presenta en la siguiente
tabla.
Orden n |
fn(x) |
fn(p/4) |
error (%) |
0 |
cos(x) |
0.707106781 |
-41.4 |
1 |
-sen(x) |
0.521986659 |
-4.4 |
2 |
-cos(x) |
0.497754491 |
0.449 |
3 |
sen(x) |
0.499869147 |
2.62x10-2 |
4 |
cos(x) |
0.500007551 |
-1.51x10-3 |
5 |
-sen(x) |
0.500000304 |
-6.08x10-5 |
6 |
-cos(x) |
0.499999988 |
2.40x10-6 |
Note, que a medida que se introducen más términos,
la aproximación se vuelve más exacta y el porcentaje de error disminuye. En
general podemos tener una aproximación polinomial de la función coseno, con sus
derivadas en cero dada por
Orden n |
fn(x) |
fn(0) |
0 |
cos(x) |
1 |
1 |
-sen(x) |
0 |
2 |
-cos(x) |
-1 |
3 |
sen(x) |
0 |
4 |
cos(x) |
1 |
5 |
-sen(x) |
0 |
6 |
-cos(x) |
-1 |
7 |
sen(x) |
0 |
8 |
cos(x) |
1 |
9 |
-sen(x) |
0 |
10 |
-cos(x) |
-1 |
La aproximación polinomial final queda:
La implementación en Java es:
class
funciones
{
public static double coseno(double x)
{
int i;
double s = 0;
int signo = 1;
for(i=0; i<10; i+=2)
{
s += signo*pow(x, i) / factorial(i);
signo *= -1;
}
return s;
}
public static double seno(double x)
{
int i;
double s = 0;
int signo = 1;
for(i=1; i<10; i+=2)
{
s += signo*pow(x, i) / factorial(i);
signo *= -1;
}
return s;
}
public static double factorial(int x)
{
int i;
double fact = 1;
for(i=1; i<=x; i++)
fact *= i;
return fact;
}
public static double pow(double x, int n)
{
int i;
double pow =1;
if(x==0) return 0;
for(i=1; i<=n; i++)
pow = pow*x;
return pow;
}
}
El programa principal para realizar el llamado
es:
public
class ej053 {
public static void main(String[] args) {
int i,N;
double inicio =
-3.1416, fin = 3.1416, incremento = 0.1;
N = (int)((fin - inicio)/incremento) + 1;
double x[] = new
double [N];
double y[] = new double [N];
double z[] = new double [N];
for(i=0;
i<N; i++)
{
x[i] = inicio + incremento *i;
y[i] = funciones.seno(x[i]);
z[i] = funciones.coseno(x[i]);
}
grafica g = new grafica("Funcion
seno");
g.Datos(x,y);
g.Datos(x,z);
g.show();
}
}
Note en este último código, el uso de la función
gráfica que permite desplegar una función dada como dos arreglos de datos.
La serie de Taylor es muy útil para hacer la
estimación de errores de truncamiento. Esta estimación ya la realizamos en los
ejemplos anteriores. Recordemos que la serie de Taylor la podemos representar
como:
Ahora, truncando la serie después del término
con la primera derivada, se obtiene:
Despejando el valor de v’, tenemos:
El primer término de la ecuación represente la
aproximación de la derivada y el segundo el error de truncamiento. Note que el error de truncamiento se hace
más pequeño a medida que ti+1 –
ti (incremento) se hace pequeño. Así que podemos hacer una buena
aproximación de derivadas utilizando el primer término, siempre y cuando se
utilicen incrementos pequeños.