Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Método de Gauss
Álgebra Lineal. Curso 2010-11
define la matriz
2 1 3
−1 1 2
A=
4
.
5 6
7 8 9
Asimismo un vector fila no es más que una matriz 1 × n.
>> b=[1 2 3 4 5]
b =
1 2 3 4 5
Las operaciones habituales con matrices (suma, producto, . . . ) se realizan de la forma habitual, me-
diante los signos ∗, ∗, . . .
Ejercicio 1
Introduce dos matrices a y b del mismo tamaño. Prueba a realizar su suma y su producto. ¿Qué ob-
servas?
El tamaño de una matriz se puede modificar según la marcha, por ejemplo añadiendo elementos:
b =
3 6 9 0 0
11 13 15 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 9
Con el objeto de manipular las matrices tienen especial interés ciertas instrucciones que permiten la
creación de listas y la extracción de entradas y submatrices. Veamos alguna de ellas:
1
El operador dos puntos (:) construye una lista de números, en formato de vector:
>> v=3:5
v =
3 4 5
>> v=[2:0.4:5]
v =
>> a=rand(3,5)
a =
>> a(2,4)
ans =
0.1576
>> a(:,3:5)
>> a(1:2,:)
Asimismo, un vector de punteros nos permite extraer filas y columnas a voluntad. Por ejemplo, el
comando siguiente extrae las filas 1 y 3:
2
Otras muchas instrucciones tienen interés desde el punto de vista matricial. Mencionamos sólo unas pocas:
diag(a) aplicada a una matriz a, extrae un vector con los elementos de su diagonal. Aplicado a un
vector a, construye una matriz con dichos elementos en la diagonal.
Ejercicio 2
Define una matriz a de tamaño 4 × 4 y construye otra cuya diagonal coincida con a, y tenga ceros
en el resto de las entradas.
2. Método de Gauss
Pasamos ahora a implementar el método de Gauss sin pivotaje. La construcción básica serı́a:
Desde j = i + 1 hasta n
bi = bi − aij ∗ xj % Sustituimos lo ya calculado.
Fin de bucle
xi = bi /aii % Despejamos xi .
Fin de bucle.
3
function x=metododegauss(a,b)
% Metodo de Gauss sin pivotaje
%Introducimos una matriz cuadrada a y un vector b
% La salida es x, solucion del sistema
n=length(a); % Medimos la matriz a
for j=1:n-1
for i=j+1:n
l=a(i,j)/a(j,j);
for k=j:n
a(i,k)=a(i,k)-l*a(j,k);
end
b(i)=b(i)-l*b(j);
end
end
% Sustitucion regresiva
x=zeros(n,1);
x(n)=b(n)/a(n,n);
for i=n-1:-1:1
for j=1+i:n
b(i)=b(i)-a(i,j)*x(j);
end
x(i)=b(i)/a(i,i);
end
return
function x=metododegauss2(a,b)
% Metodo de Gauss sin pivotaje
% Se introduce ua matriz a y un vector b
% El programa devuelve la solucion del sistema
% Solo valido si no hay que pivotar
n=length(a);
b=b(:); % Esto es para garantizar que b sea un vector columna
for j=1:n-1
for i=j+1:n
l=a(i,j)/a(j,j);
a(i,j:n)=a(i,j:n)-l*a(j,j:n);
b(i)=b(i)-l*b(j);
end
end
% Sustituci\’{o}n regresiva
x=zeros(n,1);
x(n)=b(n)/a(n,n);
for i=n-1:-1:1
b(1:i)=b(1:i)-a(1:i,i+1)*x(i+1);
x(i)=b(i)/a(i,i);
end
return
4
3. Ejercicios
1. Resuelve los siguientes sistemas de ecuaciones lineales:
a)
6 −2 2 4 x1 12
12
−8 6 10 x2 = 34
3 −13 9 3 x3 27
−6 4 1 −18 x4 −38
b)
0.2641x1 +0.1735x2 +0.8642x3 = −0.7521
0.9411x1 +0.0175x2 +0.1463x3 = 0.6310
−0.8641x1 −0.4243x2 +0.0711x3 = 0.2501.
2. Modifica el programa del método de Gauss para que calcule el determinante de la matriz del sistema.
3. Matlab implementa las instrucciones / y \ como método de resolución de sistemas. La orden a/b,
donde b es una matriz cuadrada inversible, corresponde a a · b−1 , y la orden a\b, a−1 · b (ahora a
es una matriz cuadrada). Usa estas órdenes para resolver los sistemas anteriores.