Está en la página 1de 13

DIFERENCIACIN NUMRICA

EJERCICIO 1: Hacer un programa que efecte la 1,2,3 y 4 derivada de un set de datos (X,
Y), con las frmulas de serie de Taylor.
INTRODUCCIN.
El programa realizado solicitar el ingreso de dos vectores de datos que contengan; uno, la
variable independiente y el otro, la variable dependiente; para encontrar las aproximaciones
de sus derivadas primera y mayores, utilizando la diferenciacin numrica hacia adelante,
centrada y hacia atrs. A continuacin las formulas Usadas:

Diferenciacin Hacia Adelante

Diferenciacin Hacia Atrs

Diferenciacin Centrada

Es importante decir, que debido a que el programa usa las frmulas de diferenciacin basadas
en la serie de Taylor, los datos ingresados deben ser regularmente espaciados, es decir debe
haber la misma distancia(tamao de paso) entre cada uno de los puntos de la variable
dependiente
EJECUCIN Y DESCRIPCIN DEL PROGRAMA
-

Al ejecutar el programa, se nos presenta un pequeo dialogo, que nos solicita ingresar
los datos de las variables dependiente e independiente:

Luego deberemos ingresar dos vectores, uno para cada variable:

El programa nos devolver las aproximaciones de las derivadas en todos los puntos

Como vemos el programa nos da como resultado cuatro vectores, el primero contiene
la primera derivada en todos los puntos ingresados, el segundo, las segundas
derivadas, tambin para todos los puntos y as sucesivamente.

Ahora verificaremos los resultados de la primera derivada con el comando


gradient,que nos ofrece Matlab, el cul puede calcular las aproximaciones de las
derivadas por medio de series de Taylor:

Como podemos ver los resultados obtenidos con nuestro programa, para la primera
derivada, son idnticos a los obtenidos por la funcin gradient de las libreras de
Matlab
-

El programa tiene algunos filtros intentando que el trabajo que realice sea ptimo, el
primero de ellos es verificar si el tamao de paso es del mismo tamao entre cada
punto de la variable dependiente(X), al no cumplirse esta condicin, el programa
imprimir un mensaje de error, saltara todas las instrucciones y terminar:

Como vemos, uno de los datos ingresados (5.5), genera un tamao de paso de 0.5 y
1.5 (entre 5 y 0.5 y entre 0.5 y 6, respectivamente), diferentes al del resto (1), el
programa se percata de este error.
-

Debido a las frmulas que se utilizan (mostradas en la primera parte del informe); se
puede ver que, para obtener una primera derivada solo son necesarios dos datos, para
una segunda se necesitan tres, y as sucesivamente. En el programa hay secciones de
cdigo que permite informar al usuario si es que no se puede calcular alguna derivada
por falta de datos o en cuales es posible calcularlas con solamente cierta cantidad de
datos ingresados. En la siguiente captura de pantalla mostramos esta caracterstica:

Esta vez solo ingresamos 4 pares de datos, el programa encuentra las primeras y
segundas derivadas sin ningn problema pero, debido a los datos necesarios para el
clculo de la tercera derivada, solo podemos efectuar las derivadas en los puntos
extremos. Esto se puede verificar analizando las frmulas para la tercera derivada por
Derivacin Hacia Adelante, Hacia Atrs y centrada; mostradas al inicio.
Para hallar la derivada en el primer punto, se puede utilizar solamente Derivacin
hacia Adelante, en el ltimo punto, solo podemos usar Derivacin hacia atrs, la
derivacin centrada no se puede usar para esta cantidad de datos.
Como podemos verificar en las formulas referidas, con solo 4 datos no podemos
obtener una derivada de cuarto grado.

ALGUNAS ACOTACIONES IMPORTANTES:


-

El programa, como se ha dicho en lneas anteriores, utiliza las tres variantes del
mtodo de diferenciacin numrica basado en series de Taylor. Por ejemplo, la
primera derivada en el primer punto se obtiene utilizando Diferenciacin Hacia
Adelante; las derivadas en los puntos siguientes se obtienen usando Diferenciacin
Centrada y la derivada en el ltimo dato, con Diferenciacin Hacia Atrs.

CODIGO DEL PROGRAMA:


clc; clear all;
fprintf('PROGRAMA PARA EFECTUAR LA DERIVACIN DE UN SET DE
DATOS\n\n');
fprintf('El programa le brindar la 1,2,3 y 4 derivada\n\n');
fprintf('Ingrese datos de variable independiente:\n');
fprintf('(RECUERDE QUE ESTOS DATOS DEBEN SER REGULARMENTE
ESPACIADOS\n');
x=input('Ej.[0 1 2 3 4 5 6 7 8 9 10])');
n=length(x);
e=0;
for i=1:n-3%este bucle verificar que el tamao de paso sea el mismo
if (x(1,i+1)-x(1,i))~=(x(1,i+2)-x(1,i+1))
e=e+1;
break;
end
end
if e>0,error ('Los datos deben ser igualmente espaciados');end
fprintf('Ingrese datos de la variable dependiente: \n');
y=input('(Ej.[1.4 2.1 3.3 4.8 6.8 6.6 8.6 7.5 8.9 10.9 10])');
h=x(1,2)-x(1,1);
n=length(x);
pridrv=zeros(1,n);
%.................................-------................................
%Realizamos la primera derivada de los datos ingresados por
diferencias
%finitas.
%primer dato, diferencias finitas hacia adelante
pridrv(1,1)=(y(1,2)-y(1))/h;
%Desde el segundo dato hasta el penltimo, Direncias finitas centradas
for i=2:n-1
pridrv(1,i)=(y(1,i+1)-y(1,i-1))/(2.*h);
end
%Para el ltimo dato, diferencias finitas hacia atras
pridrv(1,n)=(y(1,n)-y(1,n-1))/h;
fprintf('\n\nRESULTADOS!\n');
fprintf('Las primeras derivadas para los datos ingresados son,
respecticamente :\n');
disp(pridrv);
%Ahora Desarrollaremos la segunda derivada
segdrv=zeros(1,n);
if n<3
fprintf('No se puede calcular la segunda derivada con solo 2
datos\n');
else
segdrv(1,1)=(y(1,3)-2.*y(1,2)+y(1,1))/h.^2;
for i=2:n-1
segdrv(1,i)=(y(1,i+1)-2.*y(1,i)+y(1,i-1))/h.^2;
end
segdrv(1,n)=(y(1,n)-2.*y(1,n-1)+y(1,n-2))/h.^2;
fprintf('Las segundas derivadas para los datos ingresados son,
respectivamente: \n');
disp(segdrv);
end
%Tercera derivada:

if n<5
if n<4
fprintf('No se puede hallar la tercera derivada con menos de 4
datos\n');
else
fprintf('Con cuatro datos solo podemos hallar terceras
derivadas en los extremos');
fprintf('\n');
exterdrv=zeros(1,2);
exterdrv(1,1)=(y(1,4)-3.*y(1,3)+3.*y(1,2)-y(1,1))/h.^3;
exterdrv(1,2)=(y(1,n)-3.*y(1,n-1)+3.*y(1,n-2)-y(1,n-3))/h.^3;
fprintf('Estas son: ');
disp(exterdrv);
end
else
terdrv=zeros(1,n);
terdrv(1,1)=(y(1,4)-3.*y(1,3)+3.*y(1,2)-y(1,1))/h.^3;
terdrv(1,2)=(y(1,5)-3.*y(1,4)+3.*y(1,3)-y(1,2))/h.^3;
for i=3:n-2
terdrv(1,i)=(y(1,i+2)-2.*y(1,i+1)+2.*y(1,i-1)-y(1,i-2))/(2*h.^3);
end
terdrv(1,n-1)=(y(1,n-1)-3.*y(1,n-2)+3.*y(1,n-3)-y(1,n-4))/h.^3;
terdrv(1,n)=(y(1,n)-3.*y(1,n-1)+3.*y(1,n-2)-y(1,n-3))/h.^3;
fprintf('Las terceras derivadas para los datos ingresados son,
respectivamente: \n');
disp(terdrv);
end
%Cuarta derivada
if n<6
if n<5
fprintf('No se puede hallar la cuarta derivada con menos de 5
datos\n');
else
fprintf('Con cinco datos solo podemos hallar cuartas derivadas
en los extremos\n');
excuadrv(1,1)=(y(1,5)-4.*y(1,4)+6.*y(1,3)4.*y(1,2)+y(1))/h.^4;
excuadrv(1,2)=(y(1,n)-4.*y(1,n-1)+6.*y(1,n-2)-4.*y(1,n-3)+y(n4))/h.^4;
fprintf('Estas son:');
disp(excuadrv);
end
else
cuadrv=zeros(1,n);
cuadrv(1,1)=(y(1,5)-4.*y(1,4)+6.*y(1,3)-4.*y(1,2)+y(1))/h.^4;
cuadrv(1,2)=(y(1,6)-4.*y(1,5)+6.*y(1,4)-4.*y(1,3)+y(2))/h.^4;
for i=3:n-2
cuadrv(1,i)=(y(1,i+2)-4.*y(1,i+1)+6.*y(1,i)-4.*y(1,i-1)+y(1,i2))/h.^4;
end
cuadrv(1,n)=(y(1,n)-4.*y(1,n-1)+6.*y(1,n-2)-4.*y(1,n-3)+y(n-4))/h.^4;
cuadrv(1,n-1)=(y(1,n-1)-4.*y(1,n-2)+6.*y(1,n-3)-4.*y(1,n-4)+y(n5))/h.^4;
fprintf('Las cuartas derivadas para los datos ingresados son,
respectivamente: \n');
disp(cuadrv);
end

EJERCICIO 1: Hacer un programa que para derivar un set de datos utilizando el mtodo de
Lagrange
DERIVACION CON DATOS DESIGUALMENTE ESPACIADOS
Hasta aqu, todas las frmulas de derivacin numrica se han basado en datos igualmente
espaciados. Sin embargo, la informacin emprica (datos obtenidos experimentalmente) con
frecuencia se obtiene a intervalos desiguales.
Para calcular una derivada en datos irregularmente espaciados, se ajusta un polinomio de
interpolacin de Lagrange de segundo grado a cada conjunto de tres puntos adyacentes
Recordemos que los polinomios de interpolacin no requieren que los puntos estn
igualmente espaciados. Si se deriva analticamente el polinomio de segundo grado se obtiene:

f(x) = f(xi)

2x - xi+1 - xi+2
(xi - xi+1)(xi - xi+2)

+ f(xi+2)

+ f(xi+1)

2x - xi - xi+2
(xi+1 - xi)(xi+1 - xi+2)

2x - xi - xi+1
(xi+2 - xi) (xi+2 - xi+1)

Ejemplo: Dada la siguiente tabla


x

f(x)

0,45

0,96848

0,52

0,90640

0,62

0,80227

0,67

0,74278

0,74

0,65042

0,78

0,59260

0,84

0,49850

0,89

0,41296

Determinar la primera derivada en x = 0.7


Se procede de la siguiente manera: se seleccionan los tres puntos ms cercanos al valor que
necesitamos evaluar, los cuales son el punto inmediatamente anterior y los dos

inmediatamente siguientes {0.67, 0.74, 0.78} ya que nos dan un intervalo ms corto (0.11) en
contra del conjunto {0.62, 0.67, 0.74} que da un intervalo de 0.12. Para nuestro caso, seran:
0,67

0,74278

0,74

0,65042

0,78

0,59260

Y los etiquetamos para reemplazar en la frmula:


X(i)

0,67

0,74278

F[X(i)]

X(i+1)

0,74

0,65042

F[X(i+1)]

X(i+2)

0,78

0,59260

F[X(i+2)]

X es el valor a evaluar, para este ejemplo, X = 0.7


Al reemplazar, tenemos:

f(0.7) =

0.74278

+ 0.59260

f(0.7) =

2(0.7) 0.74 - 0.78


(0.67-0.74) (0.67-0.78)

+ 0.65042

2(0.7) 0.67 - 0.78


(0.74-0.67) (0.74-0.78)

2(0.7) 0.67 - 0.74


(0.78-0.67) (0.78-0.74)

0.74278

+ 0.59260

-0.12
(-0.07) (-0.11)

+ 0.65042

-0.05
(0.07) (-0.04)

-0.01
(0.11) (0.04)

f(0.7) = (0.74278*(-15.58442)) + (0.65042*17.85714) + (0.59260*(-2.27273))


f(0.7) = (-11.57586) + (11.61464) + (-1.34682)
f(0.7) = -1.30804
EJECUCIN Y DESCRIPCION DEL PROGRAMA
EL programa realizado para este ejercicio, calcula una aproximacin a la derivada de un set de
datos desigualmente espaciados en un punto deseado, usando el mtodo de Lagrange. La
frmula utilizada es la que se utiliz para resolver el ejemplo que hemos presentado lneas
anteriores.

Al ejecutar el archivo script, se nos presentar un pequeo dialogo que nos solicitar
ingresar un vector para la variable dependiente (X) y otro vector para la variable
independiente(Y)

Ingresamos los datos y el punto en el que queremos calcular la derivada:

EL programa nos devuelve la aproximacin a la derivada en dicho punto

Como vemos el resultado coincide con obtenido analticamente en el ejemplo anterior.


-

El diseo del programa permite elegir, de todos los intervalos que incluyen al dato
requerido, aquel que tenga el tamao de paso ms pequeo; de la misma manera q lo
elegimos nosotros en el ejemplo desarrollado en el marco terico presentado,
garantizando as la mejor aproximacin.

CODIGO DEL PROGRAMA


fprintf('PROGRAMA PARA EFECTUAR LA DERIVACIN DE UN SET DE DATOS
DESIGUALMENTE ESPACIADOS\n\n');
fprintf('Ingrese datos de variable independiente:\n');
x=input('(Ej.[0.45 0.52 0.62 0.67 0.74 0.78 0.84 0.89])\n-------->');
fprintf('Ingrese datos de la variable dependiente: \n');
y=input('(Ej.[0.96848 0.90640 0.80227 0.74278 0.65042 0.59260 0.49850
0.41296])\n-------->');
fprintf('\n');
xx=input('en que punto quiere calcular la derivada?
');
n=length(x);
if xx>x(1,n), error ('El dato solicitado debe estar dentro del
intervalo de datos muestreados'); end
posxi=zeros(1,n);
posint=zeros(1,n);
%Con el siguiente bucle seleccionamos el primer elemento de los
intervalos
%de tres datos adyascentes que incluyen al punto en donde se quiere
derivar.
j=1;
for i=1:n-2
if x(1,i)<=xx && x(1,i+2)>=xx
posxi(1,j)=x(1,i);
posint(1,j)=x(1,i+2)-x(1,i);
j=j+1;
end
end
k=j-1;%numero de elementos vector newposxi
%Ahora seleccionaremos de estos, el intervalo mas pequeo:
newposxi=zeros(1,k);
newposint=zeros(1,k);
for i=1:k
newposxi(1,i)=posxi(1,i);
newposint(i,i)=posint(1,i);
end
%disp(newposxi);
auxposint=newposint;
for i=1:k-1
if auxposint(1,i)<auxposint(1,i+1)
auxposint(1,i+1)=auxposint(1,i);
end
end
minint=auxposint(1,k);
%disp (minxi);
for r=1:k
if newposint(1,r)== minint
for t=1:n
if x(1,t)==newposxi(1,r)
i=t;
end
end
end
end
%disp(x(1,i));

der=y(1,i)*(2.*xx-x(1,i+1)-x(1,i+2))/((x(1,i)-x(1,i+1)).*(x(1,i)x(1,i+2)))+y(1,i+1).*(2.*xx-x(1,i)-x(1,i+2))/((x(1,i+1)x(1,i))*(x(1,i+1)-x(1,i+2)))+y(1,i+2).*(2.*xx-x(1,i)x(1,i+1))/((x(1,i+2)-x(1,i)).*(x(1,i+2)-x(1,i+1)));
fprintf('\n\n');
fprintf('la derivada en el punto solicitado es: ');
disp(der)

También podría gustarte