Está en la página 1de 5

Práctica de Matlab.

Método de Gauss
Álgebra Lineal. Curso 2010-11

1. Comandos básicos sobre matrices y vectores


Uno de los objetos principales de trabajo de Matlab son las matrices y los vectores. Una matriz se
define dando sus elementos y separando sus filas mediante “;”. Por ejemplo:

>> A=[2 1 3; -1 1 2; 4 5 6; 7 8 9];

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; 11 13 15];


>> b(5,5)=9

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 =

2.0000 2.4000 2.8000 3.2000 3.6000 4.0000 4.4000 4.8000

Se extraen entradas de una matriz de la forma habitual:

>> a=rand(3,5)

a =

0.8147 0.9134 0.2785 0.9649 0.9572


0.9058 0.6324 0.5469 0.1576 0.4854
0.1270 0.0975 0.9575 0.9706 0.8003

>> a(2,4)

ans =

0.1576

El comando : permite extraer filas y columnas:

>> a(2,:) % Extrae la fila 2

>> a(:,1) % Extrae la columna 1

Varias filas o columnas pueden extraerse con instrucciones del tipo

>> 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:

>> a([1 3],:)

Ciertas matrices especiales están ya definidas:

eye(n) es una matriz identidad de tamaño n.

ones(n) es una matriz de unos de tamaño n × n.

ones(n,m) es una matriz de unos de tamaño n × m.

zeros(n), zeros(n,m) son matrices de ceros.

2
Otras muchas instrucciones tienen interés desde el punto de vista matricial. Mencionamos sólo unas pocas:

a’ denota la matriz traspuesta (traspuesta conjugada en el caso complejo) de la matriz a.

La orden a.’ permite escribir la traspuesta en el caso complejo.

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:

Dadas A = (aij )i,j , b = (bi )i , de tamaño n


% Fase de eliminación.
Desde j = 1 hasta n − 1
Desde i = j + 1 hasta n
l = aij /aii % Calculamos el multiplicador
Desde k = j hasta n
aik = aik − lij ∗ ajk % Eliminación de la fila i.
Fin de bucle
bi = bi − lij ∗ bj .
Fin de bucle
Fin de bucle
% Sustitución regresiva.
xn = bn /ann % Despejamos la última incógnita.
Desde i = n − 1 hasta 1 disminuyendo de 1 en 1

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.

Traducimos lo anterior en código de Matlab:

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

La sintaxis anterior es muy mejorable aprovechando las posibilidades de vectorialización de Matlab.


Por ejemplo, alguno de los bucles que aparecen en el programa pueden expresarse de una vez como una
diferencia entre vectores. El programa podrı́a quedar ası́:

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.

También podría gustarte