0% encontró este documento útil (0 votos)
36 vistas16 páginas

Métodos Numéricos en Análisis Matemático

El programa desarrollado permite resolver problemas con métodos numéricos como bisección, falsa posición, Newton-Raphson, secante, Gauss-Seidel, trapecio, Simpson 1/3 y 3/8, Euler, Euler-Gauss y Runge-Kutta de cuarto orden para ecuaciones, sistemas, integrales y ecuaciones diferenciales.

Cargado por

Deyvid Hernandez
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
36 vistas16 páginas

Métodos Numéricos en Análisis Matemático

El programa desarrollado permite resolver problemas con métodos numéricos como bisección, falsa posición, Newton-Raphson, secante, Gauss-Seidel, trapecio, Simpson 1/3 y 3/8, Euler, Euler-Gauss y Runge-Kutta de cuarto orden para ecuaciones, sistemas, integrales y ecuaciones diferenciales.

Cargado por

Deyvid Hernandez
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

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]

También podría gustarte