Metodos Numericos para Ingenieros - Laboratorio
LAB N°8 - SOLUCION DE ECUACIONES DIFERENCIALES
Ordinarias (EDO)
Apellidos y Nombres: Cañazaca Suca Kevin Joseph
Grupo: 3
Fecha: 3/07/2024
III. PROCEDIMIENTO PRACTICO
3.0 Calcular la solucion paraticular de la EDO de primer orden :
con la condicion inicial y(0)=1
solucion:
%Graficando la solucón de la EDO de perimer orden
x=0:5/100:5; %valores de las abscisas X
y=((4/3)*x.^3+1).^(1/4);
plot(x,y)
grid on
grid minor
Algoritmo
1.- Introcir la funcion f(x,y); valor inicia en x,y; el ingreso del valor final y el número de pasos (n)
2.- Calcular el valor de h
3.- Iniciar con las iteraciones
4.- Inicializar el valor de X, Y
1
5.-Calcular
6.-Repetir hasta alcanzar el valor deseado
%solucion de 3.1-Metodo de euler
%Datos
fxy=@(x,y) x^2/y^3%Ingreso de la función f(x,y)
fxy = function_handle with value:
@(x,y)x^2/y^3
x0=0;%Ingreso del valor inicial de x, xe
y0=1;%Ingreso del valor Inicial de y, ye
xf=5;%Ingreso del valor final de x, xf
n=500; %Ingreso del numero de pasos.
%Metodo de Euler
h=(xf-x0)/n;%Calculo del valor de h
for i=0:n
X(i+1)=x0;
Y(i+1)=y0;
y0=y0+h*fxy(x0,y0);
x0=x0+h;
end
hold on
plot(X,Y)
Diagrama de flujo:
2
%Calculo del tamaño del paso
h=(xf-x0)/n;
%Inicializacion de los vectores de tiempo y solucion
x=x0:h:xf;
y=zeros(1,n+1);
y(1)=y0;
%Implementacion del metodo euler mejorado
for i=1:n
%paso euler
k1=fxy(x(i),y(i));
y_euler=y(i)+h*k1;
%paso de correcion
k2=fxy(x(i+1),y_euler);
y(i+1)=y(1)+(h/2)*(k1+k2);
end
%visualizacion
plot(x,y);
xlabel('x');
ylabel('y');
3
grid on;
3.2 Crear el algoritmo , diagrama de flujo y programa del metodo R-K de 2 orden para la solucion de Edo del
primer orden
4
% Método de Runge-Kutta de segundo orden
function [x, y] = rk2(F, x0, y0, h, xf)
n = (xf - x0) / h;
x = x0:h:xf;
y = zeros(1, length(x));
y(1) = y0;
for i = 1:n
k1 = F(x(i), y(i));
k2 = F(x(i) + h, y(i) + h * k1);
y(i+1) = y(i) + h / 2 * (k1 + k2);
end
end
% Ejemplo de uso
F = @(x, y) -2 * x * y; % Ejemplo de EDO
x0 = 0;
y0 = 1;
h = 0.1;
xf = 1;
[x, y] = rk2(F, x0, y0, h, xf);
plot(x, y);
Diagrama de flujo:
5
4.1 Implemente un programa (algoritmo, diagrama de flujo y código MATLAB) que permita la solución de EDO
de primer orden por el método de R-K de tercer orden.
6
% Método de Runge-Kutta de tercer orden
function [x, y] = rk3(F, x0, y0, h, xf)
n = (xf - x0) / h; % Número de pasos
x = x0:h:xf; % Vector de valores de x
y = zeros(1, length(x)); % Inicializar vector de valores de y
y(1) = y0; % Condición inicial
for i = 1:n
k1 = F(x(i), y(i)); % Pendiente inicial
k2 = F(x(i) + h / 2, y(i) + h / 2 * k1); % Pendiente intermedia
k3 = F(x(i) + h, y(i) - h * k1 + 2 * h * k2); % Pendiente final
y(i+1) = y(i) + h / 6 * (k1 + 4 * k2 + k3); % Nuevo valor de y
end
end
7
% Ejemplo de uso
F = @(x, y) -2 * x * y; % Ejemplo de EDO
x0 = 0;
y0 = 1;
h = 0.1;
xf = 1;
[x, y] = rk3(F, x0, y0, h, xf);
plot(x, y);
title('Método de Runge-Kutta de Tercer Orden');
xlabel('x');
ylabel('y');
grid on;
4.2 Indique según respuestas para un mismo problema cual es el grado de exactitud en el cálculo para cada
método.
El grado de exactitud de un método numérico se puede comparar resolviendo la misma EDO con diferentes
métodos y comparando los resultados con la solución analítica (si está disponible) o con una solución numérica
de alta precisió[Link] Comparativo:
• Método de Euler: Es un método de primer orden, y su error global es proporcional a hhh. Es menos
preciso que los métodos de orden superior.
8
• Método de Euler Mejorado: Es un método de segundo orden y generalmente proporciona una mejor
aproximación que el método de Euler simple.
• Método de Runge-Kutta de Tercer Orden: Es un método de tercer orden, y su error global es
proporcional . Es más preciso que los métodos de Euler y Euler Mejorado para el mismo tamaño
de paso h.
4.3 Investigue sobre la manera de determinar el nivel de exactitud de cada método (cálculo de error)
Para determinar el nivel de exactitud de cada método, se puede calcular el error global de truncamiento. El
error global de truncamiento mide la diferencia entre la solución numérica y la solución [Link] para
Calcular el Error:
1. Solución Analítica: Obtener la solución exacta de la EDO si es posible.
2. Error Local: Evaluar el error en cada paso, que es la diferencia entre el valor exacto y el valor numérico
calculado.
3. Error Global: Acumular el error local a lo largo del intervalo de integración.
Fórmulas de Error:
• Método de Euler: E≈O(h)
• Método de Euler Mejorado: E≈O(h^2)
• Método de Runge-Kutta de Tercer Orden: E≈O(h^3)
Implementación en MATLAB:
Para ilustrar el cálculo del error, se puede usar el siguiente código para comparar la solución numérica con la
solución exacta:
% Comparar errores de los métodos numéricos
F = @(x, y) -2 * x * y; % Ejemplo de EDO
sol_analitica = @(x) exp(-x.^2); % Solución analítica
x0 = 0;
y0 = 1;
h = 0.1;
xf = 1;
% Soluciones numéricas
[x_euler, y_euler] = euler(F, x0, y0, h, xf);
Incorrect number or types of inputs or outputs for function euler.
[x_euler_mejorado, y_euler_mejorado] = euler_mejorado(F, x0, y0, h, xf);
[x_rk3, y_rk3] = rk3(F, x0, y0, h, xf);
% Solución analítica
x_exacta = x0:h:xf;
y_exacta = sol_analitica(x_exacta);
9
% Calcular errores
error_euler = abs(y_exacta - y_euler);
error_euler_mejorado = abs(y_exacta - y_euler_mejorado);
error_rk3 = abs(y_exacta - y_rk3);
% Mostrar resultados
figure;
hold on;
plot(x_exacta, y_exacta, 'k-', 'DisplayName', 'Solución Exacta');
plot(x_euler, y_euler, 'b--', 'DisplayName', 'Euler');
plot(x_euler_mejorado, y_euler_mejorado, 'r--', 'DisplayName', 'Euler
Mejorado');
plot(x_rk3, y_rk3, 'g--', 'DisplayName', 'RK3');
legend;
title('Comparación de Métodos Numéricos');
xlabel('x');
ylabel('y');
grid on;
hold off;
% Mostrar errores
figure;
hold on;
plot(x_euler, error_euler, 'b--', 'DisplayName', 'Error Euler');
plot(x_euler_mejorado, error_euler_mejorado, 'r--', 'DisplayName', 'Error
Euler Mejorado');
plot(x_rk3, error_rk3, 'g--', 'DisplayName', 'Error RK3');
legend;
title('Errores de Métodos Numéricos');
xlabel('x');
ylabel('Error');
grid on;
hold off;
Conclusiones:
Conclusiones
1. Exactitud del Método de Euler: Es un método simple y rápido, pero tiene un error global proporcional a
hhh, lo que lo hace menos preciso para tamaños de paso grandes.
2. Exactitud del Método de Euler Mejorado: Al ser de segundo orden, ofrece una precisión mejorada con
un error global proporcional a h^2.
3. Exactitud del Método de Runge-Kutta de Tercer Orden: Ofrece la mejor precisión de los tres métodos
discutidos, con un error global proporcional a h^3
4. Cálculo del Error: La comparación de errores entre métodos permite evaluar la efectividad de cada uno
y seleccionar el más adecuado según los requisitos de precisión y eficiencia computacional.
Observaciones:
10
• Importancia de la Selección del Método:
• La selección del método numérico depende del equilibrio entre la precisión requerida y los recursos
computacionales disponibles. En situaciones críticas donde se requiere alta precisión, métodos como el
RK3 son preferibles, mientras que en casos donde la rapidez es crucial, el Método de Euler puede ser
suficiente.
• Errores Acumulativos:
• Todos los métodos numéricos introducen errores acumulativos a medida que se avanza en las
iteraciones. Métodos de orden superior como RK3 minimizan estos errores, pero no los eliminan por
completo. Es importante monitorear el error durante el proceso de solución.
• Condiciones Iniciales y Comportamiento del Problema:
• Las condiciones iniciales y la naturaleza del problema (lineal o no lineal) pueden influir significativamente
en la precisión y la estabilidad de los métodos numéricos. Métodos de orden superior generalmente
manejan mejor las no linealidades.
• Flexibilidad y Adaptabilidad:
• Métodos como RK3 son más flexibles y pueden ser adaptados para resolver problemas más complejos
y no lineales con mayor precisión, mientras que métodos más simples pueden requerir modificaciones o
ser inadecuados para tales problemas.
• Importancia del Análisis de Error:
• El análisis del error es esencial para evaluar la eficacia de un método numérico. Conocer el
comportamiento del error y cómo se propaga a lo largo de las iteraciones permite hacer ajustes
necesarios en el tamaño del paso y en la elección del método, garantizando soluciones más precisas y
fiables.
11