1.1. Para aplicar el método de Gauss y resolver un sistema lineal de n
ecuaciones con n incógnitas: a) Explicar la condición de existencia de solución única y la técnica del pivoteo parcial. b) Escribir el algoritmo. 𝑡 Sea 𝐴𝑥 = 𝑏 el sistema lineal a resolver, con 𝐴 = (𝑎𝑖𝑗 ); 𝑥 = (𝑥𝑗 ) . El método de Gauss, considera la matriz ampliada 𝑀 = (𝐴, 𝑏) y se realiza en dos etapas, diagonalización y retrosustitución. La diagonalización con pivoteo parcial, es tomar como pivot akk, distinto de cero y el mayor de su columna intercambiando filas, si es necesario, para k = 1, 2, …, n-1, y se realizan las operaciones sobre (𝑘−1) (𝑘) (𝑘−1) (𝑘−1) 𝑎𝑖𝑘 las filas para i = k + 1; 𝑎𝑖𝑗 = 𝑎𝑖𝑗 − 𝑚𝑖𝑘 𝑎𝑖𝑗 , 𝑐𝑜𝑛 𝑚𝑖𝑘 = (𝑘−1) , con lo cual se obtiene un 𝑎𝑘𝑘 sistema equivalente, pero con matriz en forma escalonada. El sistema admite solución única si 𝐴 es no singular. (𝑛−1) 𝑏𝑛 La retrosustitución, que es la segunda parte, se inicia con la obtención de 𝑥𝑛 = (𝑛−1) y luego 𝑎𝑛𝑛 (𝑛−1) 𝑗=𝑛 (𝑛−1) 𝑏𝑘 −∑𝑗=𝑘+1 𝑎𝑘𝑗 𝑥𝑗 sucesivamente, para k = n-1, n-2, …, 2, 1 𝑥𝑘 = (𝑛−1) . 𝑎𝑘𝑘
Un algoritmo, expresado en lenguaje MATLAB puede escribirse
function X = metGauss(A, B) %Input - A matriz no singular n x n % - B matriz n x 1 %Output - X matriz n x 1 que contiene la solucion de AX=B. %Inicializacion de X y la matriz auxiliar C [n n] = size(A); X = zeros(n,1); C = zeros(1,n+1); %Matriz ampliada: Aug=[A|B] Aug=[A B]; for p = 1 : n-1 %Pivoteo parcial para la columna p [Y,j] = max(abs(Aug(p:n,p))); %Intercambio de las filas p con la j C=Aug(p,:); Aug(p,:)=Aug(j+p-1,:); Aug(j+p-1,:)=C; if Aug(p,p)==0 'A es singular. La solucion no es unica' break end %Proceso de eliminacion para la columna p for k=p+1:n m = Aug(k,p)/Aug(p,p); Aug(k,p:n+1) = Aug(k,p:n+1) - m*Aug(p,p:n+1); end end %Retrosustitucion X(n)=Aug(n,n+1)/Aug(n,n); for k=n-1:-1:1 X(k) = (Aug(k,n+1) - Aug(k,k+1:n)*X(k+1:n))/Aug(k,k); end BORRADOR – Se agradecerá cualquier observación al respecto – Héctor A. Rojas S. FIUNA – 4º Semestre – CALCULO 4 – CAPITULO 1 1.2. Para aplicar el método de Jacobi y resolver un sistema lineal de n ecuaciones con n incógnitas: a) Explicar la condición suficiente de convergencia. b) Escribir el algoritmo e indicar la(s) condición(es) de finalización de la iteración. 𝑡 Sea 𝐴𝑥 = 𝑏 el sistema lineal a resolver, con 𝐴 = (𝑎𝑖𝑗 ); 𝑥 = (𝑥𝑗 ) . El método de Jacobi, tiene como condición suficiente de convergencia que la matriz 𝐴 sea diagonal estrictamente dominante, es decir, que se verifique: |𝑎𝑘𝑘 | > ∑𝑛𝑗=1|𝑎𝑘𝑗 | ∀𝑘 = 1, 𝑛. 𝑗≠𝑘 Se parte de una aproximación inicial 𝑥 (0) . Se expresa la matriz del sistema 𝐴 = (𝑎𝑖𝑗 ) como la suma de dos matrices 𝐷 = (𝑎𝑖𝑖 ); 𝑖 = 1, 𝑛; 𝑚𝑎𝑡𝑟𝑖𝑧 𝑑𝑖𝑎𝑔𝑜𝑛𝑎𝑙 𝑦 𝑄 = (𝑞𝑖𝑗 ) 𝑚𝑎𝑡𝑟𝑖𝑧 𝑐𝑢𝑎𝑑𝑟𝑎𝑑𝑎 𝑐𝑜𝑛 𝑞𝑖𝑗 = 𝑎𝑖𝑗 , ∀𝑖 ≠ 𝑗 ∧ 𝑞𝑗𝑗 = 0, ∀𝑗 = 1, 𝑛. Así el sistema se escribe (𝐷 + 𝑄)𝑥 = 𝑏, con lo cual, para 𝑘 = 1, 2, ⋯, se tienen 𝑥 (𝑘) = 𝐷−1 (𝑏 − 𝑄𝑥 (𝑘−1) ) que es la fórmula de iteración del método, que se interrumpe cuando ‖𝑥 (𝑘) − 𝑥 (𝑘−1) ‖ < 𝛿 𝑜 𝑏𝑖𝑒𝑛 ‖𝑥 (𝑘) − 𝑥 (𝑘−1) ‖/‖𝑥 (𝑘) ‖ < 𝛿, siendo delta la tolerancia prefijada y ‖ ‖ la norma utilizada. El algoritmo, expresado en lenguaje MATLAB puede escribirse function [X, k]=metJacobi(A,B,P,delta, max1) % Input - A es una matriz no singular n x n % - B es una matriz n x 1 % - P es una matriz n x 1 que contiene los valores iniciales % - delta es la tolerancia para P % - max1 es el maximo numero de iteraciones % Output - X es una matriz n x 1 que contiene la aproximacion de Jacobi a la solucion de AX = B n = length(B); for k=1:max1 for j=1:n X(j)=(B(j)-A(j,[1:j-1,j+1:n])*P([1:j-1,j+1:n]))/A(j,j); end err=abs(norm(X'-P)); relerr=err/(norm(X)+eps); P=X'; if (err<delta)|(relerr<delta) break end end X=X';
BORRADOR – Se agradecerá cualquier observación al respecto – Héctor A. Rojas S.
FIUNA – 4º Semestre – CALCULO 4 – CAPITULO 1 1.3. Para aplicar el método de Gauss-Seidel y resolver un sistema lineal de n ecuaciones con n incógnitas: Explicar la condición suficiente de convergencia. b) Escribir el algoritmo e indicar la(s) condición(es) de finalización de la iteración. 𝑡 Sea 𝐴𝑥 = 𝑏 el sistema lineal a resolver, con 𝐴 = (𝑎𝑖𝑗 ); 𝑥 = (𝑥𝑗 ) . El método de Gauss-Seidel, tiene como condición suficiente de convergencia que la matriz 𝐴 sea diagonal estrictamente dominante, es decir, que se verifique: |𝑎𝑘𝑘 | > ∑𝑛𝑗=1|𝑎𝑘𝑗 | ∀𝑘 = 1, 𝑛. 𝑗≠𝑘 Se parte de una aproximación inicial 𝑥 (0) y la diferencia con el método de Jacobi, es que cada incognita (𝑘) 𝑥𝑠 obtenida es utilizada para el cálculo de la siguiente, entonces la fórmula de iteración es: (𝑘) (𝑘−1) (𝑘) 𝑏𝑠 − ∑𝑘−1 𝑗=1 𝑎𝑠𝑗 𝑥𝑗 − ∑𝑛𝑗=𝑘+1 𝑎𝑠𝑗 𝑥𝑗 𝑥𝑠 = 𝑎𝑠𝑠 (𝑘) (𝑘−1) La iteración se iterrumpe cuando ‖𝑥 − 𝑥 ‖ < 𝛿 𝑜 𝑏𝑖𝑒𝑛 ‖𝑥 (𝑘) − 𝑥 (𝑘−1) ‖/‖𝑥 (𝑘) ‖ < 𝛿, siendo delta la tolerancia prefijada y ‖ ‖ la norma utilizada El algoritmo, expresado en lenguaje MATLAB puede escribirse function [x, k] = metGaussSeid(A, b, p, delta, max1) %Input: - A matriz inversible nxn (matriz del sistema, no singular, diagonalmente dominante) % - b matriz nx1 (terminos conocidos) % - p matriz nx1 (punto inicial) % - delta tolerancia para p % - max1 maximo numero de iteraciones. %Output: - x matriz nx1 (aproximacion a la solucion de ax = b) n = length(b); for k = 1 : max1 x(1) = (b(1)-A(1,2:n)*p(2:n))/A(1,1); for j = 2 : n - 1; x(j) = (b(j) - A(j, 1 : j-1)*x(1 : j-1) - A(j, j+1:n)*p(j+1:n))/A(j,j); end x(n) = (b(n) - A(n, 1: n-1)*(x(1 : n-1))')/A(n, n); err = abs(norm(x' - p)); relerr = err/(norm(x) + eps); p = x'; if (err <delta) | (relerr< delta) break; end end x=x';
BORRADOR – Se agradecerá cualquier observación al respecto – Héctor A. Rojas S.