Sei sulla pagina 1di 5

Pr actica de Matlab.

Metodo de Gauss

Algebra Lineal. Curso 2010-11


1. Comandos basicos sobre matrices y vectores
Uno de los objetos principales de trabajo de Matlab son las matrices y los vectores. Una matriz se
dene dando sus elementos y separando sus las mediante ;. Por ejemplo:
>> A=[2 1 3; -1 1 2; 4 5 6; 7 8 9];
dene la matriz
A =
_
_
_
_
2 1 3
1 1 2
4 5 6
7 8 9
_
_
_
_
.
Asimismo un vector la no es mas 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 no. Prueba a realizar su suma y su producto. Que ob-
servas?
El tama no de una matriz se puede modicar seg un la marcha, por ejemplo a nadiendo 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 interes ciertas instrucciones que permiten la
creacion de listas y la extraccion de entradas y submatrices. Veamos alguna de ellas:
1
El operador dos puntos (:) construye una lista de n umeros, 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 las y columnas:
>> a(2,:) % Extrae la fila 2
>> a(:,1) % Extrae la columna 1
Varias las o columnas pueden extraerse con instrucciones del tipo
>> a(:,3:5)
>> a(1:2,:)
Asimismo, un vector de punteros nos permite extraer las y columnas a voluntad. Por ejemplo, el
comando siguiente extrae las las 1 y 3:
>> a([1 3],:)
Ciertas matrices especiales estan ya denidas:
eye(n) es una matriz identidad de tama no n.
ones(n) es una matriz de unos de tama no n n.
ones(n,m) es una matriz de unos de tama no n m.
zeros(n), zeros(n,m) son matrices de ceros.
2
Otras muchas instrucciones tienen interes desde el punto de vista matricial. Mencionamos solo 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
Dene una matriz a de tama no 4 4 y construye otra cuya diagonal coincida con a, y tenga ceros
en el resto de las entradas.
2. Metodo de Gauss
Pasamos ahora a implementar el metodo de Gauss sin pivotaje. La construccion basica sera:
Dadas A = (a
ij
)
i,j
, b = (b
i
)
i
, de tama no n
% Fase de eliminacion.
Desde j = 1 hasta n 1
Desde i = j + 1 hasta n
l = a
ij
/a
ii
% Calculamos el multiplicador
Desde k = j hasta n
a
ik
= a
ik
l
ij
a
jk
% Eliminacion de la la i.
Fin de bucle
b
i
= b
i
l
ij
b
j
.
Fin de bucle
Fin de bucle
% Sustitucion regresiva.
x
n
= b
n
/a
nn
% Despejamos la ultima incognita.
Desde i = n 1 hasta 1 disminuyendo de 1 en 1
Desde j = i + 1 hasta n
b
i
= b
i
a
ij
x
j
% Sustituimos lo ya calculado.
Fin de bucle
x
i
= b
i
/a
ii
% Despejamos x
i
.
Fin de bucle.
Traducimos lo anterior en codigo 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 vectorializacion 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 podra 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
12 8 6 10
3 13 9 3
6 4 1 18
_
_
_
_
_
_
_
_
x
1
x
2
x
3
x
4
_
_
_
_
=
_
_
_
_
12
34
27
38
_
_
_
_
b)
_
_
_
0.2641x
1
+0.1735x
2
+0.8642x
3
= 0.7521
0.9411x
1
+0.0175x
2
+0.1463x
3
= 0.6310
0.8641x
1
0.4243x
2
+0.0711x
3
= 0.2501.
2. Modica el programa del metodo de Gauss para que calcule el determinante de la matriz del sistema.
3. Matlab implementa las instrucciones / y \ como metodo de resolucion 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 ordenes para resolver los sistemas anteriores.
5

Potrebbero piacerti anche