0% encontró este documento útil (0 votos)
38 vistas6 páginas

Biseccion Falsa

Cargado por

Alexis Urcuango
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 DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
38 vistas6 páginas

Biseccion Falsa

Cargado por

Alexis Urcuango
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 DOCX, PDF, TXT o lee en línea desde Scribd

ESCUELA POLITÉCNICA

NACIONAL FACULTAD DE
INGENIERÍA MECÁNICA
CARRERA EN MECÁNICA
MÉTODOS NUMÉRICOS
(GR3)
2024B

Nombre: David Urcuango

Implementación sistema de ecuaciones Laplace:

a) En la figura 1 se muestra la solución del sistema mediante el método de Gauss.

Figura 1. Resolución por método de Gauss

b) En la figura 2 se muestra la solución del sistema mediante el método de Gauss-Seidel.


Figura 2. Resolución por método de Gauss-Seidel, con número de iteraciones y error L2.
Anexo: Implementación del código.

a) Gauss

clc; clear; close all;

% Tamaño de la matriz
p = 1; % Fila inicial
A = -[-4 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ;
1 -4 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
0 1 -4 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 -4 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 1 -4 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 -4 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 1 0 0 0 1 -4 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 1 -4 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 1 0 0 0 1 -4 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 1 0 0 0 1 -4 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 1 0 0 0 0 -4 1 0 0 0 1 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 1 0 0 0 1 -4 1 0 0 0 1 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1 0 0 0 1 -4 1 0 0 0 1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 1 0 0 0 1 -4 1 0 0 0 1 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 1 0 0 0 1 -4 0 0 0 0 1 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 -4 1 0 0 0 1 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 -4 1 0 0 0 1 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 -4 1 0 0 0 1 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 -4 1 0 0 0 1 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 -4 0 0 0 0 1
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 -4 1 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 -4 1 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 -4 1 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 -4 1
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 -4]; % Matriz A
b = -[-75; 0; 0; 0; -50; -75; 0; 0; 0; -50; -75; 0; 0; 0; -50; -75; 0;
0; 0; -50; -175; -100; -100; -100; -150; ]; % Vector b
M = [A, b]; % Matriz aumentada
n = size(A, 1); % Número de filas de la matriz A

% Eliminación hacia adelante (método de Gauss)


for jj = 1:n-1 % Bucle sobre cada columna (pivote)
for ii = jj+1:n % Bucle sobre las filas debajo de la diagonal
M(ii, :) = M(ii, :) - (M(ii, jj) / M(jj, jj)) * M(p, :); %
Reducción
end
p=p+1;
end

% Extraer las matrices A y b de la matriz aumentada


An = M(:, 1:n); % Parte de la matriz A
bn = M(:, n+1); % Parte del vector b

% Resolución hacia atrás


x = zeros(n, 1); % Inicializar el vector solución

for i = n:-1:1 % Empezar desde la última fila y avanzar hacia arriba


if i == n
x(n) = bn(n) / An(n, n); % Resolución del último valor (x_n)
elseif i ~= n && n > 1
% Resolución hacia atrás para las filas anteriores
x(i) = (bn(i) - An(i, i+1:n) * x(i+1:n)) / An(i, i);
else
% Resolución del primer valor (x_1)
x(1) = (bn(1) - An(1, 2:end) * x(2:end)) / An(1, 1);
end
end
%Mostrar Matriz Triangular superior
disp('Matriz triangular superior:')
disp(M)
% Mostrar la solución
disp('La solución del sistema es:')
disp(x)

b)Gauss-Seidel

clc; clear; close all;

% Definición de la matriz A y el vector b


A = -[-4 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ;
1 -4 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
0 1 -4 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 -4 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 1 -4 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 -4 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 1 0 0 0 1 -4 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 1 -4 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 1 0 0 0 1 -4 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 1 0 0 0 1 -4 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 1 0 0 0 0 -4 1 0 0 0 1 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 1 0 0 0 1 -4 1 0 0 0 1 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1 0 0 0 1 -4 1 0 0 0 1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 1 0 0 0 1 -4 1 0 0 0 1 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 1 0 0 0 1 -4 0 0 0 0 1 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 -4 1 0 0 0 1 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 -4 1 0 0 0 1 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 -4 1 0 0 0 1 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 -4 1 0 0 0 1 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 -4 0 0 0 0 1
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 -4 1 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 -4 1 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 -4 1 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 -4 1
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 -4]; % Matriz A
b = -[-75; 0; 0; 0; -50; -75; 0; 0; 0; -50; -75; 0; 0; 0; -50; -75; 0;
0; 0; -50; -175; -100; -100; -100; -150; ]; % Vector b
n = size(A, 1); % Número de filas de la matriz A
m = 50; % Número máximo de iteraciones
es = 0.00001; % Criterio de parada (error relativo L2)
x = zeros(n, 1); % Vector de incógnitas inicializadas a cero

% Prealocar el vector de errores L2 y el vector de soluciones


errores = zeros(m, 1);
soluciones = zeros(m, n);
contador_it = 0; % Contador de iteraciones

% Método de Gauss-Seidel con control de error


for k = 1:m
x_old = x; % Guardar el valor anterior de x

% Iterar sobre cada fila (incógnita)


for i = 1:n
% Sumar los términos de la fila i, excluyendo el término que
corresponde a xi
suma = 0;
for j = 1:n
if j ~= i
suma = suma + A(i,j) * x(j);
end
end

% Actualizar el valor de la incógnita xi


x(i) = (b(i) - suma) / A(i,i);
end

% Calcular el error relativo L2 entre x y x_old


error_vector = x - x_old; % Diferencia entre la solución actual y
la anterior
errores(k) = norm(error_vector, 2) / norm(x, 2); % Error relativo
L2

% Guardar las soluciones en cada iteración


soluciones(k, :) = x';

% Incrementar el contador de iteraciones


contador_it = contador_it + 1;

% Verificar el criterio de parada (error relativo menor que es)


if errores(k) <= es
fprintf('Criterio de convergencia alcanzado en la iteración
%d.\n', k);
break;
end
end

% Mostrar la tabla de resultados


disp('Tabla de resultados:');

% Crear la tabla con las soluciones, errores y número de iteración


numero_iteraciones = (0:contador_it)'; % Números de iteración,
comenzando desde 0

% Componer la tabla con las iteraciones y resultados


% La primera fila será el vector inicial x0 = [0, 0, 0] para la
iteración 0
solucion_con_inicial = [zeros(1, n); soluciones(1:contador_it, :)]; %
Agregar la fila con las condiciones iniciales

% Agregar el error relativo L2 para la iteración 0 (error L2 inicial


es 0)
errores_con_inicial = [0; errores(1:contador_it)];

% Crear la tabla
T = table(numero_iteraciones, solucion_con_inicial(:, 1),
solucion_con_inicial(:, 2), solucion_con_inicial(:,
3),solucion_con_inicial(:, 4),solucion_con_inicial(:,
5),solucion_con_inicial(:, 6),solucion_con_inicial(:,
7),solucion_con_inicial(:, 8),solucion_con_inicial(:,
9),solucion_con_inicial(:, 10),solucion_con_inicial(:,
11),solucion_con_inicial(:, 12),solucion_con_inicial(:,
13),solucion_con_inicial(:, 14),solucion_con_inicial(:,
15),solucion_con_inicial(:, 16),solucion_con_inicial(:,
17),solucion_con_inicial(:, 18),solucion_con_inicial(:,
19),solucion_con_inicial(:, 20),solucion_con_inicial(:,
21),solucion_con_inicial(:, 22),solucion_con_inicial(:,
23),solucion_con_inicial(:, 24),solucion_con_inicial(:,
25),errores_con_inicial,'VariableNames', {'Iteracion', 'X1', 'X2',
'X3','X4','X5','X6','X7','X8,','X9','X10','X11','X12','X13','X14','X15
','X16','X17','x18','X19','X20','X21','X22','X23','X24','X25','errores
'});

disp(T);

También podría gustarte