Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Jes
us Gago Vargas
Indice
1. Introducci
on 1
2. Vectores fila 1
2.1. Rangos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
2.2. Elimina la salida . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.3. Espacio de trabajo de Scilab/Matlab . . . . . . . . . . . . 3
3. Vectores columna 4
3.1. Trasposicion . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
3.2. Indexado de vectores . . . . . . . . . . . . . . . . . . . . . . . 4
5. Entrada de matrices 8
5.1. Matrices especiales . . . . . . . . . . . . . . . . . . . . . . . . 8
5.2. Trasposicion . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
5.3. Elimina la salida . . . . . . . . . . . . . . . . . . . . . . . . . 10
6. Indexado de matrices 10
7. Construccion de matrices 11
7.1. Construccion de matrices con vectores . . . . . . . . . . . . . 11
7.2. Las dimensiones deben coincidir . . . . . . . . . . . . . . . . . 12
7.3. Construccion de matrices con otras matrices . . . . . . . . . . 12
7.4. Operaciones por bloques y elementales . . . . . . . . . . . . . 13
8. Miscel
anea 16
1
9. Gesti
on de ficheros 17
Resumen
En este m
odulo aprenderemos los conceptos basicos para la defini-
ci
on de vectores y matrices en Scilab/Matlab. Experimentaremos
con algunas funciones de construccion de matrices, a partir de vectores
y bloques de matrices. Prerrequisitos: ninguno
1. Introducci
on
Este es un documento para ser trabajado delante de un ordenador con
Scilab/Matlab instalado. No esta pensado para ser ledo como una novela.
En vez de eso, cada vez que se presente un comando de Scilab/Matlab,
se debe introducir en el ordenador, pulsar la tecla Enterpara ejecutarlo y
ver el resultado. Mas a
un, queremos que se verifique la respuesta. Aseg
urese
de que se comprende perfectamente lo que se obtiene antes de continuar con
la lectura.
2. Vectores fila
La introduccion de vectores fila en Scilab/Matlab es muy facil. Intro-
duzca el siguiente comando en la pantalla de Scilab/Matlab 1
>> v=[1 2 3]
Hay una serie de ideas a destacar en este comando. Para introducir un vector,
se escribe una apertura de corchete, los elementos del vector separados por
espacios y un cierre de corchete. Se pueden usar tambien comas para delimitar
las componentes del vector.
>> v=[1,2,3]
El signo = es el operador de asignacion de Scilab/Matlab. Se usa este
operador para asignar valores a variables. Para comprobar que el vector fila
[1,2,3] ha sido asignado a la variable v, introduzca el siguiente comando
en el indicador de Scilab/Matlab.
>> v
1
El smbolo >> es el indicador de Matlab y el smbolo > para Scilab. Se debe
introducir lo que aparece tras el indicador. Entonces se pulsa la tecla Enterpara ejecutar
el comando.
2
2.1. Rangos
Algunas veces es necesario introducir un vector con componentes a in-
tervalos regulares. Esto se realiza facilmente con Scilab/Matlab con la
estructura inicio:incremento:fin. Si no se proporciona un incremento,
Scilab/Matlab asume que es 1.
>> x1=0:10
>> x2=0:2:10
>> x3=10:-2:1
Hay veces, sobre todo cuando hay que pintar funciones, que se precisan un
gran n
umero de componentes en un vector.
>> x=0:.1:10
Tal como se observa en la salida, los rangos no son mas que vectores.
>> x=0:.1:10;
Es muy u
til cuando la salida es muy grande y no se desea verla.
>> who
3
>> whos
Observemos que tambien se da el tama no de cada variable. Es posible man-
tener una ventana con la lista de variables usadas y su tama
no. En Matlab,
entramos en la opcion View de la barra superior y activamos la opcion
Workspace. En Scilab, entramos en la opcion Aplicaciones de la barra
superior y activamos la opcion Explorador de $Variables.
Se pueden eliminar variables con el comando clear.
>> clear x
La variable x desaparece del espacio de trabajo. Si queremos empezar de
nuevo, sin restos de anteriores ejecuciones, usamos
>> clear
Si simplemente se quiere borrar la pantalla de comandos,
>> clc
Se puede obtener el tama
no de un vector v con el comando
>> size(v)
La informacion que devuelve indica que el vector v tiene 1 fila y 3 columnas.
Aunque podemos ver al vector v como una matriz con 1 fila y 3 columnas,
tambien lo consideramos como un vector fila de longitud 3. Por ejemplo,
pruebe los siguientes comandos:
>> length(v)
3. Vectores columna
Es tambien facil escribir vectores columna en Scilab/Matlab. Intro-
duzcamos el siguiente comando en el indicador.
>> w=[4;5;6]
Observe que el punto y coma delimita las filas de un vector columna. Pruebe
los siguientes comandos.
>> w
>> who
>> whos
>> size(w)
El resultado indica que el vector w tiene 3 filas y 1 columna. Aunque se pude
ver al vector w como una matriz de 3 filas y 1 columna, tambien es posible
pensar en el como un vector columna de longitud 3. Pruebe lo siguiente.
>> length(w)
4
3.1. Trasposici
on
El operador en Scilab/Matlab para trasponer es el apostrofe simple .
Se puede cambiar as un vector fila a un vector columna.
>> y=(1:10)
>> y=y
>> x=[10,13,19,23,27,31,39,43,51]
>> x(2)
>> x(7)
>> x(6)=100
>> x([1,3,5])
>> x(1:3)
>> x(1:2:length(x))
5
4.1. Operaciones entre vector y escalar
Las operaciones entre escalares y vectores son directas. Desde el punto
de vista teorico, no se puede sumar un escalar a un vector. Sin embargo,
Scilab/Matlab s lo permite. Por ejemplo, si y es un vector, el comando
y+2 anadira 2 a cada componente del vector. Estudiemos las salidas de los
siguientes comandos.
>> y=1:5
>> y+2
>> y-2
>> 2*y
>> y/2
Por supuesto, estas operaciones son igualmente validas para vectores colum-
na.
>> w=(1:3:20)
>> w+3
>> w-11
>> .1*w
>> w/10
6
>> a,b,a*b
ltimo comando devuelve un error porque es el smbolo de Scilab/Matlab
El u
para la multiplicacion de matrices, y en este caso hay un problema de dimen-
siones. Tambien podemos tener problemas si intentamos a nadir vectores de
diferente tamano.
>> a=1:3,b=4:7,a+b
4.4. Expresiones m
as complicadas
Con un poco de practica aprenderemos a evaluar expresiones mas comple-
jas. Supongamos, por ejemplo, que queremos evaluar la expresion x2 2x 3
para valores de x entre 1 y 10, con incremento de 1.
>> x=1:10
>> y=x.^2-2*x-3
Veamos otro ejemplo. Supongamos que queremos evaluar la expresion sen(x)/x
para valores de x entre 1 y 1 con incrementos de 0,1.
>> x=-1:.1:1
>> y=sin(x)./x
Los operadores por componentes tambien funcionan con vectores columna.
>> xdata=(1:10)
>> xdata.^2
7
Ejercicios
Ejercicio 1. Escriba el comando que genera cada uno de los siguientes
vectores.
1
1. 2 .
3
2. (1, 2, 1, 3).
5. Entrada de matrices
La entrada de matrices en Scilab/Matlab es facil, pues una matriz es
un vector de vectores. Introduzcamos lo siguiente en la ventana de comandos.
>> A=[1,2,3;4,5,6;7,8,9]
Observemos como cada punto y coma indica el final de la fila, mientras que
las comas se usan para separar las entradas en la fila. Se pueden usar tambien
espacios para delimitar las entradas en la fila.
8
5.1. Matrices especiales
Existen una serie de rutinas incorporadas para crear matrices. Es posible
crear una matriz de ceros de cualquier tamano.
>> A=zeros(5,5)
>> B=zeros(3,5)
Es facil crear una matriz de ceros con el mismo tama
no que una dada.
>> C=[1,2,3; -1,-2,3];
>> D=zeros(size(C)) % Matlab
--> D = zeros(C) % Scilab
Se pueden crear matrices de 1 en una forma analoga.
>> A=ones(6,6)
>> B=ones(2,10)
>> C=[1,2,3; -1,-2, 3]
>> D=ones(size(C)) % Matlab
--> D = ones(C) % Scilab
Cuando se realizan simulaciones, es u
til construir matrices de n
umeros alea-
torios. Se puede crear una matriz de n umeros aleatorios con distribucion
uniforme, cada uno entre 0 y 1, con los siguientes comandos.
>> A=rand(6,6)
>> B=rand(5,3)
La multiplicacion por escalares es exactamente igual que para vectores.
>> C=10*rand(5,5)
El trabajo en coma flotante precisa de ciertas rutinas para el redondeo de
n
umeros.
>> D=floor(C)
>> D=ceil(C)
>> D=round(C)
>> D=fix(C)
La matriz identidad tiene unos en su diagonal principal y ceros en el resto.
>> II=eye(5) % Matlab
--> II = eye(5,5) % Matlab y Scilab
--> II = eye(2,3) % Matlab y Scilab
Se pueden generar otros tipos de matrices diagonales con el comando diag.
>> E=diag([1,2,3,4,5])
>> F=diag([1,2,3,4,5],-1)
>> G=diag(1:5,1)
9
5.2. Trasposici
on
El operador de transposicion, que es (comilla simple), tiene el mismo
efecto que sobre vectores. Se intercambian filas y columnas.
>> K=rand(100);
6. Indexado de matrices
La siguiente notacion es la que se usa para representar una matriz con 3
filas y 3 columnas.
a11 a12 a13
A= a21 a22 a23 .
a31 a32 a33
El smbolo aij se refiere a la entrada situada en la fila i y columna j. Matlab
usa una notacion similar para representar los elementos de una matriz.
>> A=rand(5,7)
>> A(1,2)
>> A(3,4)
>> A(3,3)=11111
Cuando indexamos una matriz, los subndices pueden ser vectores. Es-
ta es una herramienta de gran alcance que permite extraer facilmente una
submatriz de una matriz.
10
>> A=rand(6,8)
>> A([1,2],[3,4,5])
>> A([1,3,5],[1,2,3,4,5,6])
>> A(1,1:6)
>> A(:,1)
>> A(3,:)
>> A(1:3,:)
produce una submatriz compuesta por las tres primeras filas de la matriz A.
El comando
>> A(:,1:2:6)
7. Construcci
on de matrices
Podemos crear matrices mas complejas a partir de vectores y matrices
dados.
11
7.1. Construcci
on de matrices con vectores
Creemos tres vectores fila con los comandos
>> v1=1:3
>> v2=4:6
>> v3=7:9
El comando
>> M=[v1;v2;v3]
construye una matriz con los vectores v1, v2 y v3, cada uno formando una
fila de la matriz M . El comando
>> N=[v1,v2,v3]
>> w1=v1
>> w2=v2
>> w3=v3
El comando
>> P=[w1,w2,w3]
construye una matriz con los vectores v1,v2,v3 como columnas de la matriz
P . Se puede obtener el mismo resultado con la traspuesta de la matriz M .
>> P=M
>> w1=1:3;w2:=4:6;w3=7:10;
>> Q=[w1;w2;w3]
12
7.3. Construcci
on de matrices con otras matrices
Es una cuestion simple aumentar una matriz con un vector fila o columna.
Por ejemplo,
>> A=[1,2,3,4;5,6,7,8;9,10,11,12]
>> b=[1,1,1]
>> M=[A,b]
es valido, pero
>> M=[A;b]
no lo es.
Se pueden aumentar dos o mas matrices. As,
>> A=rand(3,3),B=ones(3,4)
>> M=[A,B]
es valido, pero
>> N=[A;B]
no lo es.
>> A=zeros(3,3),B=ones(3,3),C=2*ones(3,3),D=3*ones(3,3)
>> M=[A,B;C,D]
>> x=[1,2,3,4,5]
>> N=[ones(size(x)),x,x.^2,x.^3,x.^4] % Matlab
--> N = [ones(x),x,x.^2,x.^3,x.^4] % Scilab
>> B=zeros(8,8)
>> B(1:3,1:3)=[1,2,3;4,5,6;7,8,9]
>> B(4:8,4:8)=rand(5,5)
13
Las operaciones elementales en una matriz son el intercambio de filas, mul-
tiplicar una fila por un escalar y sumar a una fila otra multiplicada por un
escalar. Vamos a ver los comandos que nos permiten realizarlas. Tomemos
como matriz de prueba
>> B = [1, 2, 3; -4, 5, 6; 7, -2, 3; 1, 3, 4]
Es muy importante observar que las operaciones que haremos a continuacion
modifican el contenido de la matriz. Por ello, si queremos guardar el estado
inicial de la matriz, debemos realizar una asignacion previa a otra variable.
Es una practica aconsejable, pues a veces se producen errores al escribir el
ndice de una fila o columna y puede obligarnos a empezar de nuevo alg un
problema.
Para intercambiar las filas 1 y 3
>> B1 = B;
>> B1([1,3],:) = B1([3,1],:)
Para intercambiar las columnas 1 y 2
>> B1 = B;
>> B1(:,[1,2]) = B2(:,[2,1])
O se puede cambiar una fila por un vector fila definido antes.
>> B1 = B;
>> v3 = [1,1,1]
>> B1(1,:) = v3
O las filas que queramos
>> B1 = B;
>> v41 = [1,0,0]; v42 = [0,1,0]
>> B1([1,4],:) = [v41; v42] % observe el punto y coma para concatenar los vectore
Si queremos multiplicar la tercera fila por 4,
>> B1 = B;
>> B1(3,:) = 4*B1(3,:)
Analogamente para multiplicar la segunda columna por -1.
>> B1 = B;
>> B1(:,2) = -B(:,2)
A la tercera fila le sumamos la primera multiplicada por 7.
14
>> B1 = B;
>> B1(3,:) = B1(3,:) - 7*B1(1,:)
>> B1 = B;
>> B1(2,:) = B1(2,:) - B1(2,1)/B1(1,1)*B1(1,:)
>> B1(3,:) = B1(3,:) - B1(3,1)/B1(1,1)*B1(1,:)
>> B1(4,:) = B1(4,:) - B1(4,1)/B1(1,1)*B1(1,:)
>> B1 = B;
>> B1(:,3) = B1(:,3) + 2*B1(:,1)
Ejercicios
Ejercicio 9. Escriba los comandos que generan las siguientes matrices.
1 1 3 0
1. 3 1 6 8 .
4 4 10 7
10 5 6
5 8 4
2.
5 10
.
3
8 8 5
Ejercicio 10. Escriba un solo comando que cree una matriz 35 con cada
entrada igual a 3.
Ejercicio 11. Explique la diferencia entre los comandos floor, ceil,
round y fix. Demuestrelo con ejemplos en la lnea de comandos.
Ejercicio 12. Escriba un comando que genere una matriz 44 con valores
aleatorios enteros entre 5 y 5.
Ejercicio 13. Cual es la entrada en fila 5 y columna 7 de la matriz
toeplitz(1:100)? Que comando se usa para encontrar esta entrada?
Ejercicio 14. Sea T=toeplitz(1:7). Escriba un comando que
15
2. coloque las filas impares de la matriz T en una matriz C.
3. coloque la u
ltima columna de la matriz T en un vector b.
8. Miscel
anea
Cuando arrancamos el programa, Matlab muestra el contenido de una
variable con 5 dgitos significativos, aunque internamente lo almacena con
16. Scilab nos muestra 8 dgitos, pero tambien trabaja con 16.
>> a = 1/3000
>> format long % Matlab
>> a
--> format(16) % Scilab
>> a
>> b = 1/300
>> format short e
>> b
Existen unas variables predefinidas. La primera es ans, que contiene el valor
de la u
ltima evaluacion no asignada a variable.
16
>> 3/2
>> ans
>> 2/3;
>> ans
>> a1 = 7.5
>> ans
9. Gesti
on de ficheros
No vamos a explicar la apertura y cierre de ficheros desde programas,
sino como grabar el contenido de una sesion. Para ello, usamos el comando
diary.
17