Universidad Nacional Autónoma de México
Facultad de Ingeniería
División de Ciencias Básicas
Semestre 2023-2
Análisis Numérico
Grupo:4
Profesora: Maritza Liliana Arganis Juárez
Equipo 9
Integrantes:
Correa Alcántara Mauro Andrés
García Prudencio Amairani
López Guadarrama Diana
Trabajo 4 Análisis Numérico
El programa desarrollado en este trabajo permite resolver problemas con los diferentes
métodos numéricos vistos a lo largo del curso de Análisis Numérico. A continuación, se muestra
el funcionamiento de cada uno de ellos.
Ecuaciones algebraicas y trascendentes
Bisección
• El programa implementa el método de bisección para encontrar una aproximación de la
raíz de una función en un intervalo dado.
• Solicita al usuario ingresar la función objetivo, los límites inferior y superior del intervalo,
la tolerancia y el número máximo de iteraciones.
• Itera mediante el proceso de particionar el intervalo y determinar en qué subintervalo se
encuentra la raíz.
• Muestra la solución encontrada y el número de iteraciones realizadas.
Falsa Posición
• El método de falsa posición es un método numérico para encontrar una aproximación de la
raíz de una función en un intervalo dado.
• El programa solicita al usuario ingresar la función objetivo, los límites inferior y superior
del intervalo, la tolerancia y el número máximo de iteraciones.
• Itera mediante la aproximación de la raíz utilizando una interpolación lineal entre dos
puntos extremos.
• Muestra la solución encontrada y el número de iteraciones realizadas.
Newton Raphson
• El programa implementa el método de Newton-Raphson para encontrar una raíz de una
función mediante aproximaciones sucesivas.
• Solicita al usuario ingresar la función objetivo y su derivada, el valor inicial, la tolerancia y
el número máximo de iteraciones.
• Itera mediante el cálculo de las aproximaciones sucesivas basadas en la tangente a la curva
en el punto actual.
• Muestra la solución encontrada y el número de iteraciones realizadas.
Secante
• El método de la secante se utiliza para encontrar una aproximación de la raíz de una
función.
• El programa solicita al usuario ingresar la función objetivo, los valores iniciales x0 y x1, la
tolerancia y el número máximo de iteraciones.
• Itera mediante la aproximación de la raíz basada en la recta secante que pasa por dos
puntos.
• Muestra la solución encontrada y el número de iteraciones realizadas.
Sistemas de ecuaciones lineales
Método de Gauss-Seidel
• El programa implementa el método de Gauss-Seidel para resolver sistemas de ecuaciones
lineales.
• Solicita al usuario ingresar la matriz de coeficientes y el vector de términos independientes.
• Itera mediante la actualización de las incógnitas en cada ecuación basada en las
aproximaciones anteriores.
• Muestra la solución del sistema de ecuaciones.
Integración Numérica
Trapecial
• El método de integración trapezoidal se utiliza para aproximar el valor de una integral
definida.
• El programa solicita al usuario ingresar la función a integrar, el límite inferior y superior de
integración, y el número de subintervalos.
• Divide el intervalo de integración en subintervalos y aplica la fórmula del trapecio para cada
subintervalo.
• Suma las áreas de los trapecios para obtener una aproximación de la integral.
• Muestra el resultado de la aproximación de la integral
Simpson 1/3
• El método de integración Simpson 1/3 es otro método para aproximar el valor de una
integral definida.
• El programa solicita al usuario ingresar la función a integrar, el límite inferior y superior de
integración, y el número de subintervalos (debe ser par).
• Divide el intervalo de integración en subintervalos y aplica la fórmula de Simpson 1/3 para
cada par de subintervalos.
• Suma las áreas de los segmentos de Simpson para obtener una aproximación de la integral.
• Muestra el resultado de la aproximación de la integral.
Simpson 3/8
• El método de integración Simpson 3/8 es una extensión del método de Simpson 1/3 para
aproximar el valor de una integral definida.
• El programa solicita al usuario ingresar la función a integrar, el límite inferior y superior de
integración, y el número de subintervalos (debe ser múltiplo de 3).
• Divide el intervalo de integración en subintervalos y aplica la fórmula de Simpson 3/8 para
cada conjunto de tres subintervalos.
• Suma las áreas de los segmentos de Simpson 3/8 para obtener una aproximación de la
integral.
• Muestra el resultado de la aproximación de la integral.
Ecuaciones diferenciales
Método de Euler
• El programa implementa el método de Euler para aproximar la solución de una ecuación
diferencial ordinaria de primer orden.
• Solicita al usuario ingresar la función diferencial, el límite inferior y superior, el valor inicial
y el tamaño del paso.
• Itera mediante la aproximación sucesiva de la solución en puntos discretos.
• Muestra los resultados en forma de tabla, mostrando los valores de la variable
independiente y la solución correspondiente.
Método de Euler Gauss
• El método de Euler-Gauss es una variante mejorada del método de Euler para aproximar la
solución de una ecuación diferencial ordinaria.
• El programa solicita al usuario ingresar la función diferencial, el límite inferior y superior,
el valor inicial y el tamaño del paso.
• Utiliza la fórmula de Euler-Gauss para calcular las aproximaciones sucesivas de la solución.
• Muestra los resultados en forma de tabla, mostrando los valores de la variable
independiente y la solución correspondiente.
Método de Runge Kutta de 4° Orden
• El programa implementa el método de Runge-Kutta de cuarto orden para aproximar la
solución de una ecuación diferencial ordinaria de primer orden.
• Solicita al usuario ingresar la función diferencial, el límite inferior y superior, el valor inicial
y el número de pasos.
• Itera mediante el cálculo de aproximaciones sucesivas utilizando una combinación
ponderada de pendientes.
• Muestra los resultados en forma de tabla, mostrando los valores de la variable
independiente y la solución correspondiente.
Código del Trabajo
while true
clc; % Limpiar la ventana de comandos
% Mostrar el menú
disp("Menú:");
disp("1. Ecuaciones algebraicas y trascendentes");
disp("2. Sistemas de ecuaciones lineales");
disp("3. Integración Numérica");
disp("4. Ecuaciones Diferenciales");
disp("5. Salir");
% Leer la opción seleccionada por el usuario
opcion = input("Seleccione una opción: ");
if opcion == 1
% Resolver ecuaciones algebraicas y trascendentes
disp("Elija un método:");
disp("1. Bisección");
disp("2. Falsa posición");
disp("3. Newton-Raphson");
disp("4. Secante");
metodo = input("Seleccione un método: ");
if metodo == 1
% Bisección
f = input("Ingrese la función f(x): ", 's');
a = input("Ingrese el valor de a: ");
b = input("Ingrese el valor de b: ");
tol = input("Ingrese la tolerancia: ");
max_iter = input("Ingrese el número máximo de iteraciones: ");
% Convertir la función ingresada en una función anónima
f = str2func(['@(x)' f]);
% Llamar a la función de bisección
[solucion, iteraciones] = biseccion(f, a, b, tol, max_iter);
% Mostrar los resultados
disp("La solución es:");
disp(solucion);
disp("Número de iteraciones realizadas:");
disp(iteraciones);
% Pausar la ejecución para ver los resultados antes de volver al
menú
pause;
elseif metodo == 2
% Falsa posición
f = input("Ingrese la función f(x): ", 's');
a = input("Ingrese el valor de a: ");
b = input("Ingrese el valor de b: ");
tol = input("Ingrese la tolerancia: ");
max_iter = input("Ingrese el número máximo de iteraciones: ");
% Convertir la función ingresada en una función anónima
f = str2func(['@(x)' f]);
% Llamar a la función de falsa posición
[solucion, iteraciones] = falsa_posicion(f, a, b, tol, max_iter);
% Mostrar los resultados
disp("La solución es:");
disp(solucion);
disp("Número de iteraciones realizadas:");
disp(iteraciones);
% Pausar la ejecución para ver los resultados antes de volver al
menú
pause;
elseif metodo == 3
% Newton-Raphson
syms x;
f=input ('Digite la funión deseada (con variable x): ');
df=diff(f); %derivada de la funcion
x0=input('Digite el valor inicial: ');
n=input ('Digite el numero de iteraciones: ');
tol=input ('Digite el error máximo permitido: ');
for k=1:n
x1=x0-subs(f, x0)/subs (df,x0);
if (abs(x1-x0)<tol )
fprintf('\nx%d= %f Es una aproximacion de una raiz\n ', k,
x1)
return
end
fprintf('x%d=%f\n', k, x1)
x0=x1;
end
elseif metodo == 4
% Secante
f = input("Ingrese la función f(x): ", 's');
x0 = input("Ingrese el valor inicial x0: ");
x1 = input("Ingrese el valor inicial x1: ");
tol = input("Ingrese la tolerancia: ");
max_iter = input("Ingrese el número máximo de iteraciones: ");
% Convertir la función ingresada en una función anónima
f = str2func(['@(x)' f]);
% Llamar a la función de la secante
[solucion, iteraciones] = secante(f, x0, x1, tol, max_iter);
% Mostrar los resultados
disp("La solución es:");
disp(solucion);
disp("Número de iteraciones realizadas:");
disp(iteraciones);
% Pausar la ejecución para ver los resultados antes de volver al
menú
pause(15);
end
elseif opcion == 2
% Método de Gauss-Seidel
disp("Seleccionó el Método de Gauss-Seidel");
% Pedir la matriz A
disp("Ingrese la matriz A:");
A = input("A = ");
% Pedir el vector b
disp("Ingrese el vector b:");
b = input("b = ");
% Pedir el vector inicial x0
disp("Ingrese el vector inicial x0:");
x0 = input("x0 = ");
% Pedir la tolerancia
tol = input("Ingrese la tolerancia: ");
% Pedir el número máximo de iteraciones
max_iter = input("Ingrese el número máximo de iteraciones: ");
% Llamar a la función gauss_seidel
[x, iter] = gauss_seidel(A, b, x0, tol, max_iter);
% Mostrar los resultados
disp("La solución es:");
disp(x);
disp("Número de iteraciones realizadas:");
disp(iter);
% Pausar la ejecución para ver los resultados antes de volver al menú
pause;
elseif opcion == 3
% Resolver integración numérica
disp("Elija un método:");
disp("a. Trapecial");
disp("b. Simpson 1/3");
disp("c. Simpson 3/8");
metodo = input("Seleccione un método: ", 's');
if metodo == 'a'
% Trapecial
f = input("Ingrese la función f(x): ", 's');
a = input("Ingrese el límite inferior a: ");
b = input("Ingrese el límite superior b: ");
n = input("Ingrese el número de intervalos (debe ser par): ");
% Convertir la función ingresada en una función anónima
f = str2func(['@(x)' f]);
% Llamar a la función de trapecial
resultado = trapecial(f, a, b, n);
% Mostrar el resultado
disp("El resultado de la integración es:");
disp(resultado);
% Pausar la ejecución para ver los resultados antes de volver al
menú
pause;
elseif metodo == 'b'
% Simpson 1/3
f = input("Ingrese la función f(x): ", 's');
a = input("Ingrese el límite inferior a: ");
b = input("Ingrese el límite superior b: ");
n = input("Ingrese el número de intervalos (debe ser divisible por
2): ");
% Convertir la función ingresada en una función anónima
f = str2func(['@(x)' f]);
% Llamar a la función de Simpson 1/3
resultado = simpson13(f, a, b, n);
% Mostrar el resultado
disp("El resultado de la integración es:");
disp(resultado);
% Pausar la ejecución para ver los resultados antes de volver al
menú
pause;
elseif metodo == 'c'
% Simpson 3/8
f = input("Ingrese la función f(x): ", 's');
a = input("Ingrese el límite inferior a: ");
b = input("Ingrese el límite superior b: ");
n = input("Ingrese el número de intervalos (debe ser divisible por
3): ");
% Convertir la función ingresada en una función anónima
f = str2func(['@(x)' f]);
% Llamar a la función de Simpson 3/8
resultado = simpson38(f, a, b, n);
% Mostrar el resultado
disp("El resultado de la integración es:");
disp(resultado);
% Pausar la ejecución para ver los resultados antes de volver al
menú
pause;
end
elseif opcion == 4
% Resolver ecuaciones diferenciales
disp("Elija un método:");
disp("a. Método de Euler");
disp("b. Método de Euler-Gauss");
disp("c. Método de Runge-Kutta de 4° Orden");
metodo = input("Seleccione un método: ", 's');
if metodo == 'a'
% Método de Euler
% Pedir la función f(t, y)
f = input("Ingrese la función f(t, y): ", 's');
y0 = input("Ingrese el valor inicial y0: ");
h = input("Ingrese el tamaño del paso h: ");
n = input("Ingrese el número de pasos n: ");
% Convertir la función ingresada en una función anónima
f = str2func(['@(t, y)' f]);
% Definir el intervalo de tiempo
t0 = 0; % Límite inferior del intervalo
tf = h * n; % Límite superior del intervalo
% Calcular los valores de t y y utilizando el método de Euler
[t, y] = euler(f, t0, y0, h, n);
% Mostrar los resultados en una tabla
disp("Resultados del método de Euler:");
disp("----------------------------");
disp("| t | y |");
disp("|-------|-------|");
for i = 1:length(t)
disp(['| ' num2str(t(i)) ' | ' num2str(y(i)) ' |']);
end
disp("----------------------------");
% Pausar la ejecución para ver los resultados antes de volver al
menú
pause;
elseif metodo == 'b'
% Método de Euler-Gauss
f = input("Ingrese la función f(t, y): ", 's');
y0 = input("Ingrese el valor inicial y0: ");
h = input("Ingrese el tamaño del paso h: ");
n = input("Ingrese el número de pasos: ");
% Convertir la función ingresada en una función anónima
f = str2func(['@(t, y)' f]);
% Llamar a la función del método de Euler-Gauss
[t, y] = euler_gauss(f, y0, h, n);
% Mostrar los resultados
disp("Los resultados son:");
disp("t y");
disp([t y]);
% Pausar la ejecución para ver los resultados antes de volver al
menú
pause;
elseif metodo == 'c'
% Método de Runge-Kutta de cuarto orden
f = input("Ingrese la función f(t, y): ", 's');
t0 = input("Ingrese el valor inicial t0: ");
y0 = input("Ingrese el valor inicial y0: ");
h = input("Ingrese el tamaño del paso h: ");
N = input("Ingrese el número de pasos N: ");
% Convertir la función ingresada en una función anónima
f = str2func(['@(t, y)' f]);
% Llamar a la función del método de Runge-Kutta de cuarto orden
[t, y] = runge_kutta(f, t0, y0, h, N);
% Mostrar los resultados en columnas
disp("Los resultados son:");
disp(" t y");
disp([t' y']);
% Pausar la ejecución para ver los resultados antes de volver al
menú
pause;
end
elseif opcion == 5
% Salir del programa
disp("Gracias por utilizar el programa.");
break;
else
disp("Opción inválida. Por favor, seleccione una opción válida.");
pause;
end
end
Referencias Bibliográficas
I. Chapra, S. (2007). Métodos Numéricos Para Ingenieros. Quinta Edición. Editorial Mc
GrawHill.
II. Iriarte, R., Borras, H. & Durán, R. (1989). Apuntes de métodos numéricos. URL: chrome-
extension://efaidnbmnnnibpcajpcglclefindmkaj/[Link]
content/themes/tempera-
child/CoordinacionesAcademicas/CA/AN/MaterialDigital/[Link]
III. Seminario, R. (s.f). Métodos numéricos para ingeniería. URL: chrome-
extension://efaidnbmnnnibpcajpcglclefindmkaj/[Link]
um/[Link]