Desarrollar el algoritmo de sustitución regresiva con el que se puede resolver un sistema de ecuaciones lineales cuya matriz de coeficientes es triangular superior suponiendo que todos los elementos diagonales son distitnos de cero. Sugerencia: primero calcular \(x_N = b_N/a_{NN}\) y luego usar la regla.
\[x_k = \dfrac{b_k - \sum^{N}_{j=k+1}a_{kj}x{j}}{a_{kk}}\]
Use este algoritmo para resolver el sistema de ecuaciones lineal:
\[\begin{bmatrix} 4x_1 & - & x_2 & + & 2x_3 & + & 3x_4 & = & 20 \\ & - & 2x_2 & + & 7x_3 & - & 4x_4 & = & -7 \\ & & & & 6x_3 & + & 5x_4 & = & 4 \\ & & & & & & 3x_4 & = & 6 \end{bmatrix}\]A = [4 -1 2 3;0 -2 7 -4;0 0 6 5;0 0 0 3];
b = [20;-7;4;6];
N = length(b);
% Solucion del ultimo valor
x(N) = b(N)/A(N,N);
% Algoritmo para demás soluciones
for i = N-1:-1:1,
ind = N - i;
x(i) = 0;
for j = 1:ind
x(i) = x(i) - A(i,i+j)*x(i+j);
endfor
x(i) = (b(i) + x(i))/A(i,i);
endfor
fprintf('Soluciones:')
disp(x)## Soluciones: 3 -4 -1 2
Implementar un proceso de eliminación de Gauss que utilice parcial pivoting.
\[\begin{bmatrix} x_1 & + & 2x_2 & + & x_3 & + & 4x_4 & = & 13 \\ 2x_1 & & & + & 4x_3 & + & 3x_4 & = & 28 \\ 4x_1 & + & 2x_2 & + & 2x_3 & & x_4 & = & 20 \\ -3x_1& + & x_2 & + & 3x_3 & + & 2x_4 & = & 6 \end{bmatrix}\]A = [1 2 1 4;
2 0 4 3;
4 2 2 1;
-3 1 3 2];
b = [13;28;20;6];
% Matriz aumentada
Ab = [A b];
n = length(b);
[n m] = size(Ab);
disp('Matriz aumentada original: ')
disp(Ab)
disp(' ')
% Partial pivoting
for i = 1:n-1,
for j = i+1:n,
if abs(Ab(j,i)) > abs(Ab(i,i))
T = Ab(j,:);
Ab(j,:) = Ab(i,:);
Ab(i,:) = T;
endif
endfor
endfor
disp('Matriz aumentada luego de partial pivoting: ')
disp(Ab)
disp(' ')
% Eliminacion de Gauss
for i = 1:n
for j = i+1:n
M = -Ab(j,i)/Ab(i,i); % Multiplicador
Ab(j,:) = Ab(j,:) + M*Ab(i,:);
endfor
endfor
disp('Matriz aumentada luego de eliminacion de Gauss: ')
disp(Ab)
disp(' ')
% Back-substitution
% Solucion del ultimo valor
x(n) = Ab(n,n+1)/Ab(n,n);
A = Ab(1:n,1:n);
b = Ab(:,m);
% Algoritmo para demás soluciones
for i = n-1:-1:1,
ind = n - i;
x(i) = 0;
for j = 1:ind
x(i) = x(i) - A(i,i+j)*x(i+j);
endfor
x(i) = (b(i) + x(i))/A(i,i);
endfor
fprintf('Soluciones:')
disp(x)## Matriz aumentada original:
## 1 2 1 4 13
## 2 0 4 3 28
## 4 2 2 1 20
## -3 1 3 2 6
##
## Matriz aumentada luego de partial pivoting:
## 4 2 2 1 20
## 1 2 1 4 13
## 2 0 4 3 28
## -3 1 3 2 6
##
## Matriz aumentada luego de eliminacion de Gauss:
## 4.0000 2.0000 2.0000 1.0000 20.0000
## 0 1.5000 0.5000 3.7500 8.0000
## 0 0 3.3333 5.0000 23.3333
## 0 0 0 -9.0000 -18.0000
##
## Soluciones: 3.0000 -1.0000 4.0000 2.0000