Métodos numéricos , Universidad de Medellín.
plotfacePráctica o problema30 de Septiembre de 2018
2.459 Palabras (10 Páginas)156 Visitas
(28 de Abril de 2017)
Métodos numéricos , Universidad de Medellín.
Práctica de Matlab.
Resumen— La siguiente práctica , contiene detalladamente la resolución de problemas numéricos que abarquen una diferenciación, integración o solución de ecuaciones diferencial. Se exponen cada uno de estos métodos y sus variantes. Con algoritmos hechos con el programa Matlab para ayudar y/o optimizar la resolución de dichos problemas.
- DIFERENCIACIÓN.
En muchos casos, cuando se conoce la función se puede obtener una derivada perfectamente, aplicando las formulas ya conocidas en cursos anteriores, para lograr resolverla. Pero, cuando tenemos un conjunto de datos; para lograr aproximar la derivada a un modelo que se ajuste a nuestros datos usamos, los siguientes métodos que se describen a continuación.
1.1 BASE TEORICA.
En los cursos de cálculo se define la derivada de ƒ en x0 como.
[pic 1]
Una manera razonable de aproximar la derivada es
[pic 2] (1).
Para el caso de una función lineal, ƒ(x) = ax + b, la aproximación dada por la expresión (1) resulta exacta para cualquier valor de h distinto de cero. Pero para cualquier función ƒ en general no siempre resulta exacta.
A continuación se hace una estimación del error asociado a la aproximación dada por (1) usando el teorema de Taylor con un polinomio de grado 1.
[pic 3]
si x = x0 + h, x - x0 = h, y reemplazando en (2) resulta:
[pic 4]
si se despeja ƒ’(x0) entonces:
[pic 5] (3).
e puede obtener otra fórmula para aproximar la derivada usando la ecuación (2),
[pic 6]
si x = x0 – h, x – x0 = -h, reemplazando el valor de x se tiene :
[pic 7]
si se despeja f ´(x0) resulta:
[pic 8] (4)
A la aproximación (1) se le llama fórmula de diferencia hacia delante y a la aproximación dada por (4) se le conoce como fórmula de diferencia hacia atrás, ambas fórmulas presentan el mismo error. Se puede obtener otra fórmula para aproximar la derivada con un error que involucre h2 usando un polinomio de grado 2 así:
[pic 9]
Si se reemplaza x = x0 + h y x = x0 – h en (5) resulta:
[pic 10]
Si se restan las anteriores ecuaciones, se tiene:
[pic 11]
Ahora se despeja f ´(x0) ,
[pic 12] (6)
[pic 13]
La anterior fórmula para aproximar la derivada de ƒ se la conoce como diferencia centrada.
De manera análoga a la interpolación polinómica, el uso de más puntos en la evaluación de la derivada producirá mayor exactitud; aunque esto implica mayor cantidad de evaluaciones funcionales y aumento de error de redondeo. A continuación se muestra una tabla con las formulas requeridas para el cálculo de primeras y segundas derivadas dado un número de puntos.
[pic 14](7)
Y sus correspondientes para la segunda derivada
[pic 15](8)
1.2 ALGORITMO EN MATLAB
clear all
clc
% % Esquemas de Diferencias Finitas Adelante, Atrás y Central para la Primera y segunda derivada
disp('*************************************************************************************');
disp('*******************************Calculo de diferencias finitas*******************************');
disp('*************************************************************************************');
syms x;
funcion=input('Ingrese la función F(x): ');
x0=input('Ingrese el punto x0 a calcular: ');
h=input('Ingrese tamaño de paso (h): ');
%% Convertimos la función escrita como texto a un modo que matlab la entienda
f=inline(char(funcion));
%% Derivamos la funcion
DerivadaF=diff(funcion,x);
DerivadaF2=diff(DerivadaF,x);
Df=inline(char(DerivadaF));%Primera Derivada
Df2=inline(char(DerivadaF2));% Segunda Derivada
%% Primera Derivada diferencias finitas progresivas.
Dfprimera2PuntosP=(f(x0+h)-f(x0))/h
Dfprimera3PuntosP=(-3*f(x0)+4*f(x0+h)-f(x0+2*h))/(2*h)
%% Primera Derivada diferencias finitas centradas.
Dfprimera2PuntosC=(f(x0+h)-f(x0-h))/(2*h)
Dfprimera4PuntosC=(f(x0-2*h)-8*f(x0-h)+8*f(x0+h)-f(x0+2*h))/(12*h)
%% Primera Derivada diferencias finitas regresivas.
Dfprimera2PuntosR=(f(x0)-f(x0-h))/(h)
Dfprimera3PuntosR=(f(x0-2*h)-4*f(x0-h)+3*f(x0))/(2*h)
%% Calculamos la derivada real.
DerivadaReal=Df(x0);
%% Errores
PrimeraDerivadaAproximada=[Dfprimera2PuntosP Dfprimera3PuntosP Dfprimera2PuntosC Dfprimera4PuntosC Dfprimera2PuntosR Dfprimera3PuntosR];
ErrorAbsoluto=abs(PrimeraDerivadaAproximada-DerivadaReal)
ErrorRelativo=(ErrorAbsoluto/DerivadaReal)*100;
%% Segunda derivada.
%% Segunda derivada-> diferencias finitas progresivas.
DfSegunda3PuntosP=(f(x0)-2*f(x0+h)+f(x0+2*h))/(h^2)
DfSegunda4PuntosP=(2*f(x0)-5*f(x0+h)+4*f(x0+2*h)-f(x0+3*h))/(h^2)
%% Segunda derivada-> diferencias finitas centradas.
DfSegunda3PuntosC=(f(x0-h)-2*f(x0)+f(x0+h))/(h^2)
DfSegunda5PuntosC=(-f(x0-2*h)+16*f(x0-h)-30*f(x0)+16*f(x0+h)-f(x0+2*h))/(12*h^2)
%% Segunda derivada-> diferencias finitas regresivas.
DfSegunda3PuntosR=(f(x0-2*h)-2*f(x0-h)+f(x0))/(h^2)
DfSegunda4PuntosR=(-f(x0-3*h)+4*f(x0-2*h)-5*f(x0-h)+2*f(x0))/(h^2)
%% Calculamos la derivada real.
DerivadaSegundaReal=Df2(x0)
En el programa anterior se ingresan, la función , el punto x0 y el tamaño de paso h para lograr obtener la fórmula de la derivada. Se escribieron las formulas vistas en (7) y (8) para aproximar la derivada. Además se obtiene la primera y segunda derivada real. De las función con el comando (diff)
IMPLEMENTACIÓN
Aproximar la primera derivada de la función f(x) = eˆ(2x) con todas las fórmulas que se encuentran en las tablas (7) y (8) para un x0 = 1.1 con un tamaño de paso h = 0.1.
[pic 16]
Se obtuvo
[pic 17]
Siendo DfPrimera , la primera derivada evaluada en el punto x0.
DfSegunda , la segunda derivada evaluada en el punto x0.
C , la derivada evaluada con la fórmula de diferencias centradas
P , la derivada evaluada con la fórmula de diferencias progresivas
R , la derivada evaluada con la fórmula de diferencias regresivas
Derivada real : eˆ(2x)
f’(x)= 2eˆ(2x)
f’(1.1)= 2eˆ(2*1.1)
[pic 18]
f”(x)= 4eˆ(2x)
f”(1.1) =4eˆ(2(1.1))
[pic 19]
Y sus errores.
[Dfprimera2PuntosP Dfprimera3PuntosP Dfprimera2PuntosC Dfprimera4PuntosC Dfprimera2PuntosR Dfprimera3PuntosR]
1,93160181 | 0,28039205 | 0,12057441 | 0,00096726 | 1,69045299 | 0,20770916 |
Como podemos observar las mejores aproximaciones las ofrecen las diferencias finitas centradas obteniendo un error más bajo frente a las diferencias regresivas o progresivas, o sea que en lo posible debemos usar las diferencias centradas para realizar cálculos de este tipo.
[DfSegunda3PuntosP DfSegunda4PuntosP DfSegunda3PuntosC DfSegunda5PuntosC DfSegunda3PuntosR DfSegunda4PuntosR]
8,13982332 | 1,65500754 | 0,12049407 | 0,00064408 | 6,4451774 | 1,06966025 |
...