Está en la página 1de 4

DERIVACIN NUMRICA

El clculo de derivadas por ordenador se tiene que realizar de manera numrica, y dentro de la
relativa sencillez es un proceso complejo, que dependiendo de cada caso no se podr saber si est
bien condicionado.

El clculo por ordenador se puede hacer aplicando la definicin en forma de limite de derivada, y
trabajando con nmeros pequeos (pero no tan pequeos como nos premita el ordenador puesto
que esto derivar en errores enormes). Mediante el polinomio de Taylor se pueden obtener otras
expresiones capaces de obtener un valor mejor de la derivada en un punto, trabajando
con nmeros mayores, y por lo tanto, ms aconsejable.

Aqui les dejo un documento interesante (pero que se salta los pasos de como llegar a las
expresiones finales) a cerca de la derivacin numrica:
http://mmc2.geofisica.unam.mx/anum/Ejemplitos/DerivadaIntegral/derivacion.pdf

A continuacin se muestran dos programas que calculan la derivada de una funcin(En este
caso polinmica, pero basta con cambiar la funcin en el cdigo fuente para usar otra). El primero
trabaja con variables de tipo float, y el segundo con variables de tipo double:

(Las funciones D1,D2 y D3 muestran los direntes mtodos para obtener la derivada, y H representa
el valor lmite que idealemente debera ser 0)

CON FLOAT:

#include <stdio.h>
#include <math.h>

const float pre=0.1;

float funcion(float x);


float D1(float x, float h);
float D2(float x, float h);
float D3(float x, float h);

int main(void)
{
int i;
float precision;
float val;

printf("\n Programa para calcular derivadas por WWW.CYPASCAL.BLOGSPOT.COM");


printf("\n\n\n Introducir en punto en el que calcular la derivada:");
scanf("%f",&val);
printf("\n\n\n VALOR DE H TIPO D1 TIPO D2 TIPO D3\n\n");

precision=pre;
for(i=1;i<=10;i++)
{
printf("%10e %12f %12f %12f \n\n",precision,D1(val,precision),
D2(val,precision),D3(val,precision));

precision=precision*pre;
}
}
float funcion(float x)
{
float a;

a=x*x*x*x*x*x;//x^6
return(a);
}

float D1(float x, float h)


{
float a;

a=(funcion(x+h)-funcion(x))/h;

return(a);
}

float D2(float x, float h)


{
float a;

a=(-3*funcion(x)+4*funcion(x+h)-funcion(x+2*h))/(2*h);

return(a);
}

float D3(float x, float h)


{
float a;

a=(funcion(x-2*h)-8*funcion(x-h)+8*funcion(x+h)-funcion(x+2*h))/(12*h);

return(a);
}

CON DOUBLE:

#include <stdio.h>
#include <math.h>

const double pre=0.1;

double funcion(double x);


double D1(double x, double h);
double D2(double x, double h);
double D3(double x, double h);
int main(void)
{
int i;
double precision;
float val;

printf("\n Programa para calcular derivadas por WWW.CYPASCAL.BLOGSPOT.COM");


printf("\n\n\n Introducir en punto en el que calcular la derivada:");
scanf("%f",&val);
printf("\n\n\n VALOR DE H TIPO D1 TIPO D2 TIPO D3\n\n");

precision=pre;
for(i=1;i<=20;i++)
{
printf("%10e %12f %12f %12f \n\n",precision,D1(val,precision),
D2(val,precision),D3(val,precision));

precision=precision*pre;
}
}

double funcion(double x)
{
double a;

a=x*x*x*x*x*x;
return(a);
}

double D1(double x, double h)


{
double a;

a=(funcion(x+h)-funcion(x))/h;

return(a);
}

double D2(double x, double h)


{
double a;

a=(-3*funcion(x)+4*funcion(x+h)-funcion(x+2*h))/(2*h);

return(a);
}

double D3(double x, double h)


{
float a;

a=(funcion(x-2*h)-8*funcion(x-h)+8*funcion(x+h)-funcion(x+2*h))/(12*h);

return(a);
}
Aqu les dejo otros artculos interesantes sobre derivacin numrica:

-Codigos en C, relacionados con derivacin numrica (Ingls).


-Biblioteca (librera) para derivacin numrica (GNU).
-PDF de introduccin a la derivacin numrica (Programado en MATLAB).

Un saludo.