Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Diferenciación Numérica
Diferenciación Numérica
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 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:
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.
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.
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.
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)
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
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
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)]
f(0.7) =
0.74278
+ 0.59260
f(0.7) =
+ 0.65042
0.74278
+ 0.59260
-0.12
(-0.07) (-0.11)
+ 0.65042
-0.05
(0.07) (-0.04)
-0.01
(0.11) (0.04)
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)
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.
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)