Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Contenido:
argumentos
matrices
1.7 Resumen
16
1.1 Creación de vectores y matrices
» A=[1 2 3;4 5 6]
A
1 2 3
4 5 6
o bien
» A=[1 2 3
4 5 6]
A
1 2 3
4 5 6
17
» 15:26
ans =
15 16 17 18 19 20 21 22 23 24 25 26
» 15:3:25
ans =
15 18 21 24
» 0:0.1:1
ans =
Columns 1 through 7
0 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000
Columns 8 through 11
0.7000 0.8000 0.9000 1.0000
» linspace(0,pi,10)
ans =
Columns 1 through 7
0 0.3491 0.6981 1.0472 1.3963 1.7453 2.0944
Columns 8 through 10
2.4435 2.7925 3.1416
18
vectores) se hace uso de size: size(A) devuelve las dimensiones de la matriz A. Hay que
advertir que la versión 5 de MATLAB admite, además de vectores y matrices, objetos
matriciales tridimensionales o pluridimensionales. Por ejemplo, si representamos una
imagen de escala de grises mediante una matriz (bidimensional), un vídeo será un arreglo
tridimensional.
Los comandos ones, zeros y eye son útiles para crear matrices elementales. La
orden ones(n) devuelve una matriz cuadrada de orden n cuyos elementos son todos iguales
a 1, y ones(m,n) hace lo mismo para una matriz de m filas y n columnas:
» clear
» A=ones(3)
A=
1 1 1
1 1 1
1 1 1
» B=ones (2,3)
B=
1 1 1
1 1 1
Análogamente, tenemos zeros(n) y zeros(m,n), sólo que esta vez todos los
elementos son iguales a cero. Finalmente eye(n) crea la matriz unidad de orden n y
eye(m,n) devuelve una matriz de m filas y n columnas con unos en la "diagonal", siendo
cero el resto de los elementos.
Los comandos rand y randn sirven para generar números aleatorios. rand(n)
devuelve una matriz cuadrada de orden n que tiene como elementos muestras de la
distribución uniforme [0,1] y rand(m,n) hace lo mismo con una matriz rectangular. randn
construye matrices análogas con muestras normales (0,1). Finalmente hilb(n) devuelve la
matriz de Hilbert de orden n, cuyo elemento ocupando la fila r, columna c es 1/(r+c-1).
Muchos problemas lineales implican el manejo de matrices de gran tamaño, en las
que se da la circunstancia que la mayor parte de los elementos son nulos. Esto implica,
eventualmente, el almacenamiento de numerosos ceros y operaciones inútiles. Para resolver
este problema, MATLAB dispone de una función (sparse) que permite prescindir de las
19
cantidades nulas, almacenando la posición (fila y columna) de los elementos no nulos. Un
ejemplo elemental se construye con la matriz unidad:
»clear
» I=eye(1000);
» whos
Name Size Bytes Class
» I=eye(1000);
» S=sparse(I);
» whos
Name Size Bytes Class
» flops(0)
» II=2*I;
» flops
ans =
1000000
20
Hemos introducido el comando flops, que mide el número de operaciones de coma
flotante en un proceso o durante una sesión. Para el experimento, hemos colocado el
contador a 0 y resulta una cantidad de (obviamente) un millón de operaciones. Haciendo el
mismo cálculo en forma de matriz sparse, resulta
» flops(0)
» SS=2*S;
» flops
ans =
2000
es decir, en este caso un número 500 veces menor de operaciones. En todo caso, siempre es
posible recuperar la matriz con su formato original con la orden full:
» I=eye(1000);
» S=sparse(I);
» II=2*I;
» SS=2*S;
» FS=full(SS);
» whos
Name Size Bytes Class
21
1.3 Álgebra Lineal en MATLAB
»clear
» A=[1 2 3;4 5 6];
» B=[7 8 9;0 1 2];
» a=2;b=3;
» C=a*A+b*B
C=
23 28 33
8 13 18
» whos
Name Size Bytes Class
22
3 1 -1
-1 1 3
» whos
Name Size Bytes Class
Para matrices cuadradas del mismo orden A y B, las expresiones L=A\B y R=B/A,
siendo A una matriz no singular, pueden sorprender a primera vista, pero se trata
simplemente del producto de la inversa de A por B y de B por la inversa de A,
respectivamente. Esta es una forma sencilla y rápida de resolver (algunos) sistemas lineales,
A*X=B, Y*A=B. Teniendo en cuenta el comando inv, que determina la inversa de ina
matriz no singular, las expresiones A\B y inv(A)*B son equivalentes, y lo mismo sucede
con B/A y B*inv(A).
MATLAB utiliza diferentes métodos para calcular inversas, dependiendo el método
concreto de la estructura de los elementos que constituyen la matriz. Si no existe una
alternativa mejor, los cálculos se llevan a cabo por eliminación gaussiana con pivotación
parcial. Si a es la matriz de un sistema de ecuaciones lineales, el algoritmo se denomina
factorización LU de a. Sea el sistema a*X=b y P la matriz de pivotación. Entonces
P*a*X=P*b. El algoritmo consiste en determinar L (triangular inferior) y U (triangular
superior) tales que P*a=L*U. La matriz original se obtiene entonces como a=P-1*L*U. Con
MATLAB, la expresión [l u p]=lu(a), devuelve las tres matrices L, U y P, respectivamente.
Veamos algunoa ejemplos.
»clear
»A=[0 1;1 0];
» B=[1 2;3 4];
» X=A\B
X=
3 4
1 2
» Y=B/A
23
Y=
2 1
4 3
» a=[-1 1 1;1 -1 1; 1 1 -1];
» b=[1;1;1];
» [l u p]=lu(a)
l=
1 0 0
-1 1 0
-1 0 1
u=
-1 1 1
0 2 0
0 0 2
p=
1 0 0
0 0 1
0 1 0
La eficacia de los métodos para resolver sistemas, depende, además, del número de
condiciòn de la matriz del sistema (aquí A):
número condición(A)=norma2(A)*norma2(A-1)
» det(hilb(4)),cond(hilb(4))
ans =
1.6534e-007
24
ans =
1.5514e+004
» det(hilb(12)),cond(hilb(12))
ans =
2.8581e-078
ans =
1.7681e+016
25
Existe un cierto número de funciones que tienen esencialmente vectores, fila o
columna, como argumentos, devolviendo una cantidad escalar. Por ejemplo, max(V) es el
elemento más grande de V y min(V) el más pequeño. Naturalmente, estamos suponiendo
que V es un vector real. Si tiene elementos complejos, vale max(abs(V)) y min(abs(V)). La
orden sort(V) clasifica los elementos de V de menor a mayor y mean(X) devuelve la
media aritmética de los elementos de V. Estas funciones pueden ser aplicadas a matrices
(m,n), operando en este caso por vectores columna y devolviendo un vector fila. Es decir,
si A es (m,n), entonces max(A) es un vector fila cuyos n elementos son los valores
máximos de cada columna de A.
Operación Expresión en
MATLAB
Suma A+B
Diferencia A-B
Multiplicación A.*B
División por la izquierda A.\B
División por la derecha A./B
Expresión exponencial A.^B
»clear
» A=[0 1;1 0];
» B=[1 2;3 4];
» A.*B
ans =
0 2
3 0
» A./B
26
ans
0 0.5000
0.3333 0
» B.^A
ans =
1 2
3 1
» clear
» A=[-1 2; 2 -1];
» B=sin(A)
B=
-0.8415 0.9093
0.9093 -0.8415
27
A(r1:r2,:) submatriz construida con todas las filas de A entre r1 y r2,
ambas inclusive
A(r1:r2,c1:c2) submatriz construida con las columnas de c1 a c2, ambas
inclusive, de las filas r1 a r2, ambas inclusive
A(:) vector columna construido con los elementos de A
encadenando las columnas sucesivas
A(k1:k2) vector fila construido con los elementos de A(:) desde k1
hasta k2, ambos inclusive
A([k1 k2 ...]) vector fila construido con los elementos k1, k2,..., etc de
la matriz A(:)
A([r1 r2 ...],[c1 c2 ...]) submatriz construida con los elementos de A en las filas
r1, r2,... y en las columnas c1, c2,...
A(:,[c1 c2 ...]) submatriz construida con las columnas c1, c2, etc.
A([r1 r2 ...],:) submatriz construida con las filas r1, r2, etc.
» clear
» A=[1 1 0;1 0 1;1 1 0];
» A(2,2)=-5;
» A(3,:)=[-6 -7 -8];
»A
A=
1 1 0
1 -5 1
-6 -7 -8
Los comandos triu(A), tril(A) y diag(A) extraen de la matriz cuadrada A una matriz
triangular superior, triangular inferior y diagonal, respectivamente.
28
1.7 Resumen
con
det
diag
expm
eye
flops
full
hilb
inv
invhilb
length
linspace
logm
lu
max
mean
min
ones
rand
randn
trace
size
sparse
sqrtm
tril
triu
zeros
29