I. Cómo se almacenan las matrices II. La - Roberto Acevedo

MATRICES Y VECTORES
USANDO MATLAB
RECOPILACION C.BEYZAGA
ESTE CURSO REQUIERE DE LA OBLITORIEDAD DE OBSERVAR Y APLICAR LAS
SIGUIENTES REFERENCIA
http://es.kioskea.net/faq/2991-manipulacion-basica-de-matrices-en-matlab#icomo-se-almacenan-las-matrices
http://www.manualespdf.es/manual-matlab/
http://mat21.etsii.upm.es/ayudainf/aprendainf/Matlab70/matlab70primero.pdf
I. Cómo se almacenan las matrices
MatLab almacena vectores y matrices, sin importar su dimensión, como
vectores columna.
Por ejemplo, la siguiente matriz:
(2 7 4)
(5 8 3)
es almacenada en un vector columna formado por las columnas de la matriz
(una columna después de otra).
(2)
(5)
(7)
(8)
(4)
(3)
II. La indexación lineal
Esta manera de almacenar en MatLab implica que es posible acceder a los
elementos de una matriz con un solo índice (que va de 1 hasta el número total
de elementos de la matriz).
II.1. Acceder a un elemento de una matriz utilizando la indexación lineal
Para el caso de las matrices, acabamos de ver que el vector columna
correspondiente estaba compuesto simplemente por las columnas de la matriz
puestas una a continuación de otra. Sin embargo, es mas difícil de ver lo que
pasa cuando manipulamos matrices de mas de 2 dimensiones.
Veamos el caso particular de una matriz T de tres dimensiones, de 4X2X3.
Esta matriz contiene 24 elementos. Si los numeramos del 1 al 24 y
consideramos (para mayor claridad) que una matriz de 3 dimensiones es un
conjunto de páginas (última dimensión) conteniendo cada una de las matrices
(las dos primeras dimensiones), entonces estarán organizadas de este modo:
Por lo tanto, estos elementos están organizados en el vector columna que
corresponde a la matriz incrementando el primer índice de la matriz, luego el
segundo, luego el tercero (y los siguientes si trabajáramos con mas de 3
dimensiones).
A continuación veamos cómo podemos mostrar los elementos de T en el orden
en que es almacenado. En primer lugar, asignemos un valor a T:
T=rand(4,2,3);
En el vector columna correspondiente, los elementos vienen dados en el orden
en que son almacenados por:
for p=1:3
for n=1:2
for m=1:4
disp(T(m,n,p));
end
end
end
Dicho de otro modo, partiendo de un vector columna correspondiente al
almacenamiento de una matriz, este es ordenado en la matriz dividiéndolo
según la ultima dimensión, luego la precedente y así sucesivamente. Por lo
tanto, la división es hacha de esta manera:
Finalmente, en nuestro ejemplo, podemos acceder al décimo primer elemento
de la matriz T de dos maneras:
T(3,1,2)
O
T(11)
Tan solo hay que escribir las siguientes líneas para ver que los elementos
aparezcan en el mismo orden como en las 3 bucles imbricadas precedentes.
for q=1:24
disp(T(q));
end
II.2. Pasar de una indexación a otra
Dependiendo de cada caso, una u otra de las indexaciones puede ser más
práctica. Existen funciones MatLab que simplifican la manipulación de esta
indexación:
•
•
sub2ind permite pasar de la indexación lineal a la indexación múltiple.
ind2sub permite pasar de la indexación múltiple a la indexación lineal.
Para obtener ayuda acerca de estas funciones, en la ventana de MatLab
escribe help sub2indo help ind2sub. Para obtener ayuda mas detallada,
escribe doc sub2ind o doc ind2sub.
En lugar de mostrar el uso de estas funciones en el caso general de una matriz
de N dimensiones, veremos un caso particular.
II.2.1. La función ind2sub
Para conocer la indexación múltiple correspondiente a los índices 3, 8, 17, 23
de una tabla de 4x2x3 tan solo hay que hacer:
v=[3;8;17;23];
[m n p]=ind2sub([4 2 3],v);
•
•
•
El primer argumento de la función ind2sub es el tamaño de la matriz a
la cual queremos efectuar la conversión “indexación lineal -->
indexación múltiple”.
El segundo argumento v de la función ind2sub es el vector de los
índices que queremos convertir.
El miembro de la izquierda [m n p] recibirá los vectores
correspondientes a la indexación múltiple.
Concretamente, para toda matriz T de 4x2x3 tendremos:
T(m(1),n(1),p(1))=T(v(1))=T(3)
T(m(2),n(2),p(2))=T(v(2))=T(8)
T(m(3),n(3),p(3))=T(v(3))=T(17)
T(m(4),n(4),p(4))=T(v(4))=T(23)
Ahora podremos probar estas líneas:
T=rand(4,2,3);
v=[3;8;17;23];
[m n p]=ind2sub([4 2 3],v);
for q=1:4
disp([T(m(q),n(q),p(q)), T(v(q))]);
end
para ver que hayamos obtenido el resultado esperado.
II.2.2. La función sub2ind
Supongamos que queramos convertir en indexación lineal los multi-índices
(2,2,1), (1,2,3), (4,1,2), (3,1,3) de una matriz de 4x2x3, entonces será
suficiente hacer:
m=[2;1;4;3];
n=[2;2;1;1];
p=[1;3;2;3];
v=sub2ind([4 2 3],m,n,p);
•
•
El primer argumento de la función sub2ind es el tamaño de la matriz a
la cual queremos efectuar la conversión “indexación múltiple -->
indexación lineal”
Los siguientes argumentos son las columnas m, n, p, conteniendo los
índices de la primera dimensión, los índices de la segunda dimensión, los
índices de la tercera dimensión respectivamente.
•
El miembro de la izquierda v recibirá el vector correspondiente a la
indexación lineal.
Concretamente, para toda matriz T de 4x2x3 tendremos:
T(v(1))=T(m(1),n(1),p(1))=T(2,1,1)
T(v(2))=T(m(2),n(2),p(2))=T(1,2,3)
T(v(3))=T(m(3),n(3),p(3))=T(4,1,2)
T(v(4))=T(m(4),n(4),p(4))=T(3,1,3)
Ahora podemos probar estas líneas:
T=rand(4,2,3);
m=[2;1;4;3];
n=[2;2;1;1];
p=[1;3;2;3];
v=sub2ind([4 2 3],m,n,p);
for q=1:4
disp([T(v(q)), T(m(q),n(q),p(q))]);
end
para comprobar que hayamos obtenido el resultado esperado.
III. La función reshape
Teniendo en cuenta como se almacena una matriz en MatLab, fácilmente
podemos comprender que el tamaño de una matriz no es importante y que
solo es necesario una pequeña función para dar a una matriz la forma que
queramos (siempre que el número de elementos no cambie). La función
MatLab
que
permite
redimensionar
una
matriz
es
reshape.
Como con las otras funciones, para obtener ayuda acerca de esta función
escribe en la ventana de MatLab help reshape o doc reshape para obtener
ayuda
más
detallada.
Para comprender la acción de la instrucción reshape, tan solo debemos saber
que redimensionando una matriz T en una matriz M, los elementos de T son
tomados en orden creciente de su indexación lineal y son colocados en M en el
mismo
orden.
Veamos nuevamente el ejemplo de la matriz T precedente (T es de 4x2x3).
Como ya lo hemos dicho, el numero de elementos de esta matriz es 24. Vemos
también que es el numero de elementos de una matriz M de 6X4. Esto es lo
que ocurre cuando se escribe el siguiente código:
M=reshape(T,[6 4]);
Cabe mencionar que fácilmente podemos obtener la matriz inicial T con la
ayuda de M redimensionándola adecuadamente:
TT=reshape(M,[4 2 3]);
La matriz TT es idéntica a la matriz T inicial.
GUIA RAPIDA DE MATLAB
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
¿Qué es MATLAB?
Toolboxes de MATLAB
Inicio de MATLAB
¿Cómo funciona MATLAB?
Gráficas en tres dimensiones.
Otros comandos
Como hacer un programa en MATLAB
Análisis de datos.
Polinomios
Bibliografía
¿Qué es MATLAB?
MATLAB = 'MATrix LABoratory' (LABORATORIO DE MATRICES).
MATLAB es un medio computacional técnico, con un gran desempeño para el cálculo numérico
computacional y de visualización.
MATLAB integra análisis numérico, matrices, procesamiento de señales y gráficas, todo esto en
un ambiente donde los problemas ysoluciones son expresados tal como se escriben
matemáticamente.
Escrito inicialmente como auxiliar en la programación de cálculo con matrices.
MATLAB fue escrito originalmente en fortran, actualmente está escrito en lenguaje C.
MATLAB es un lenguaje de programación amigable al usuario con características más
avanzadas y mucho más fáciles de usar que los lenguajes de programación como basic, pascal o
C.
Actualmente van en la versión 5.2.
MATLAB cuenta con paquetes de funciones especializadas llamadas toolboxes.
Toolboxes de MATLAB
Control system Toolbox, Robust Control Toolbox
Frequency Domain System Identification Toolbox
Fuzzy Logic Toolbox
Higher Order Spectral Analisys Toolbox
Image Processing Toolbox
Model Predective Control Toolbox
Mu Analisis and Synthesis Toolbox
NAG Foundation Toolbox
Neural Network Toolbox
Nonlinear Control Design Toolbox
Optimization Toolbox
Quantitative Feedback Theory Toolbox
Signal Processing Toolbox
SIMULINK, SIMULINK Real Time Workshop
Spline Toolbox
Statistics Toolbox
Symbolic Math Toolbox
System Identification Toolbox.
Inicio de MATLAB
MATLAB se inicia directamente desde Windows.
Al invocarse MATLAB aparecerá la pantalla de comandos, algunas sugerencias y el símbolo
>> , el cual indica la entrada de instrucciones para ser evaluadas.
>>
>> Comando o instrucción a evaluar < enter >
Para hacer la suma de dos números, escribimos :
>> 5 + 5 < enter > Presionamos la tecla entrar.
ans =
10
El resultado es desplegado y se guarda en la variable ans (answer).
NOTA : En este tutorial el símbolo >> desaparecerá, y será reemplazado por un par de
corchetes con la instrucción dentro de ellos. [ 5 + 5 ]. La instrucción aparecerá en color verde.
Para poder ver ejecutarse la instrucción, debemos ponernos en el renglón donde está la
instrucción o marcarla con el ratón y presionar al mismo tiempo las teclas.
<Ctrl> <Enter>
Otra forma de evaluar una instrucción, es poner el apuntador del ratón entre los corchetes de la
instrucción y presionar el botón derecho del ratón; aparecerá un menú del cual se tiene que
escoger evaluar celda.
Hagamos la prueba con el renglón inmediato.
5 + 5 Presionar <Ctrl> <Enter>
La respuesta es desplegada en color azul y entre corchetes.
Help
El comando help proporciona una lista de todos los tópicos que MATLAB puede proporcionar
ayuda.
help
help 'comando' proporciona ayuda sobre el comando especificado.
help sqrt
proporciona ayuda sobre la instrucción sqrt. Ejemplo:
» help sqrt
SQRT Square root.
SQRT(X) is the square root of the elements of X. Complex
results are produced if X is not positive.
See also SQRTM
¿Cómo funciona MATLAB?
MATLAB puede almacenar información en variables tales como :
a = 100 " <Ctrl> <ENTER> para evaluar la celda "
Cada vez que capturamos información en MATLAB y presionamos <ENTER> ésta es
desplegada inmediatamente ( letras en color azul ), pero si ponemos un punto y coma al final
de la instrucción MATLAB omite el desplegado de información.
Por ejemplo :
b = 50 ;
Si se quiere saber el valor de alguna variable capturada sólo se tiene que poner el nombre de la
variable y <ENTER> y MATLAB lo despliega. Estas variables residen en el espacio de trabajo
de MATLAB.
b
Las variables son sensibles a las mayúsculas, por lo que las siguientes variables son diferentes :
Variable = 1
variable = 1
Las variables pueden contener hasta 19 caracteres. Éstas deben empezar con una letra, seguida
por cualquier número de letras, dígitos o guiones de subrayado.
Los caracteres de puntuación no son permitidos en las variables.
Cuando se trabaja con muchas variables estas son difícil de recodar.
El comando who muestra un desplegado de todas aquellas variables que se han estado
utilizando.
who
whos Muestra las variables con información adicional.
Caracteres especiales
[ ] Son usados para formar vectores y matrices [ 1 2 3 ; 4 5 6 ]
( ) Usados para expresiones matemáticas. sqrt(2)
= Usado para hacer asignaciones. x = 5
' Transpuesta de una matriz A'
Usado para separar texto 'texto'
. Punto decimal 3.1415
... Al final de una línea indican que continua 2,3,4,5,6 ....
en el siguiente renglón. 7,8,9,10 ]
, Para separar elementos [1,2,3,4]
; Para separar filas en las matrices. [ 1 2; 3 4]
Para evitar que se despliegue la información capturada. [3] ;
% Para hacer comentarios % este programa,etc.
! Para ejecutar un comando del Ms-dos !dir
Operaciones básicas
SUMA
C=a+b
RESTA
d=a-b
MULTIPLICACION
e=a*b
DIVISION
F=a/b
F=a\b
POTENCIA
a^2
Como este último cálculo no tenía variable asignada, la respuesta se guarda en la variable ans
(answer ).
Borrado de variables.
Para borrar el valor de una variable simplemente ponemos
clear a Borra la variable " a "
a Checar que este borrada.
clear a b c Borra las variables " a ", " b " y " c "
" CLEAR " Borra todas las variables y no se pueden recuperar.
Funciones trigonométricas
sin ( 0.5) Seno de (0.5)
Así mismo
COS ( X ) TAN ( X )
ASIN ( X ) ACOS ( X ) ATAN ( X ) Inversa
SINH ( X ) COSH ( X ) TANH ( X ) Hiperbólica
ASINH ( X ) ACOSH ( X ) ATANH ( X ) Inversa- Hiperbólica
ATAN2 ( X,Y ) Inversa de la tangente en los cuatro cuadrantes.
LOGARITMOS
log (0.5) Logaritmo natural
LOG10 ( X ) Logaritmo decimal.
Funciones matemáticas especiales.
abs ( -3) Valor absoluto o magnitud de un número complejo
ceil ( 123.123123) Redondea hacia más infinito
FLOOR ( X ) Redondea hacia menos infinito
FIX ( X ) Redondea hacia cero
ROUND ( X ) Redondea hacia el entero más próximo
imag ( 30 - 5j ) Parte imaginaria de un número complejo
REAL ( X ) Parte real de un número complejo
ANGLE ( X ) Angulo de un número complejo
CONJ ( X ) Complejo conjugado
sign ( -5) Función signo : Devuelve el signo del argumento
(1 si es positivo, -1 si es negativo )
exp ( 1 ) Exponencial :
e(x)
REM ( X,Y ) Resto después de la división ( x / y)
sqrt (2) Raíz cuadrada
Operaciones Lógicas
En MATLAB se pueden hacer operaciones lógicas, por ejemplo.
1<2
Como 1 es menor que 2, la respuesta es cierta por lo que obtenemos un 1.
1<1
Obtenemos un 0, porque 1 no es menor que 1.
Como se puede observar las únicas respuestas posibles con las operaciones lógicas son :
Cierto = 1 y Falso = 0.
Operadores relaciónales :
> Mayor que
< Menor que
>= Mayor o igual a
<= Menor o igual a
== Igual a
~= No igual a
Existen tres operadores lógicos : AND &
OR |
NOT ~
Para que la operación AND sea verdadera las dos relaciones deben ser verdaderas.
Recordemos AND = 0 0 | 0 Falso
0 1 | 0 Falso
1 0 | 0 Falso
1 1 | 1 Verdadero
( 1 < 2 ) & ( 2 < 3) Verdadero.
( 1 < 2) & ( 2 < 1 ) Falso.
Para la operación OR : 0 0 | 0
01|1
10|1
11|1
( 1 < 2 ) | ( 2 < 1 ) Verdadero.
Para la operación NOT : ~ 0 | 1
~1|0
~ ( 2 < 1) Verdadero.
La variable NaN (Not a Number)
Cuando en un lenguaje de programación como basic, pascal o C, se da una situación que el
programa no pueda manejar, como una división como 0/0 el programa se detiene, marcando
un error.
Cuando en MATLAB se presenta una situación similar el programa no se detiene, sólo da una
pequeña advertencia de que se presentó una división entre cero. Y el resultado es un NaN, que
es una variable interna no es un número).
0/0
Ejemplo: defina a=[1 2 0] y b=[1 2 0] ahora pida la división elemento a elemento (comando
"./")
a ./ b
Solución de ecuaciones de segundo grado.
MATLAB se puede resolver fácilmente ecuaciones del tipo ax² + bx + c = 0, haciéndolo como si
fuera una sola instrucción. La förmula para resolver una ecuación de segundo grado de este
tipo es :
Si tenemos los siguientes valores :
a = 1, b = 2, c = 3
Escribimos la formula para x1 :
x1 = ( -b + sqrt ( b ^ 2 - 4 * a * c )) / 2 * a
Para x2 :
x2 = ( -b - sqrt ( b ^ 2 - 4 * a * c )) / 2 * a
Podemos hacer la comprobación para x1.
a * x1^ 2 + b * x1 + c Comprobación x1
Arreglos (Arrays) ó Vectores.
Si se desea calcular el seno de " 0 a 1 " con incrementos de 0.25, se pueden capturar los valores
y después mandar llamar el seno de la función.
Seno de 0 a 1 con incrementos de 0.25
x = [ 0, 0.25, 0.5, 0.75, 1 ]
Se pueden omitir las comas cuando se capturan los números.
Con los números capturados, se obtiene el seno de la variable x escribiendo simplemente :
sin (x)
MATLAB opera en radianes, donde 2P = 360 grados.
Ahora se requiere obtener el coseno de cero a uno con incrementos de 0.01; lo que equivale a
capturar 101 elementos.
Para evitar capturarlos a mano, MATLAB nos permite crear un vector de la siguiente manera :
Variable = ( Valor inicial : Con incrementos de : Valor final )
R = (0 : 0.01 : 1)
COS ( R ) Ahora se puede obtener el coseno de la variable R.
Hagamos el siguiente vector :
Y = ( 0 : 1 : 10)
Si queremos saber cual es el cuarto elemento del vector ponemos :
Y (4)
Si nos interesan los elementos 5 al 10 :
Y( 5 : 10 )
Otras opciones son :
Y( 1 : 2 : 9) Toma los elementos del 1 al 9 con incrementos de 2
Y([ 1, 3, 7,10]) Toma los elementos 1, 3, 7 y 10 del array
Modificaciones de los arreglos
Si el noveno elemento del array debió ser el número 20 en vez de 8, corregimos de la siguiente
manera :
Y(9) = 20
Otra forma de hacer arreglos, es con linspace :
Linspace ( Valor inicial , Valor final , Número de elementos )
Regresando al ejemplo del coseno de 0 a 1 con incremento de 0.01 escribimos :
Note el uso de comas (#, #, #)
Z = linspace(0 , 10, 101)
Linspace describe una relación lineal de espaciado entre sus elementos.
Logspace describe una relación de espaciado " logarítmica ".
Logspace ( Primer exponente , Último exponente , Cantidad de valores )
Logspace (0 , 2 , 10 )
Hemos creamos un arreglo que comienza en 10 0 y termina en 10 2, conteniendo 10 valores.
Otra forma de crear arreglos es :
x1 = 1 : 5 Arreglo de 1 a 5, con incremento de 1
x2 = 10 : 5 : 100 Arreglo de 10 a 100, con incrementos de 5.
Si se quiere concatenar x1 y x2
C = [ x1 x2 ]
Matemáticas con arreglos.
a = 1 : 6 Define un vector de seis elementos con incrementos de 1
b = 1 : 2 : 12 Vector de seis elementos con incremento de 2
Arreglos con escalares
Se le puede sumar o multiplicar un número a todo el arreglo, por ejemplo
a + 10 Suma de un escalar con un arreglo
a * 10 Multiplicación de un escalar con un arreglo
Operaciones con arreglos
Para hacer la suma de los arreglos a y b, solamente escribimos :
a + b La respuesta se guarda en ans :
Se pueden hacer operaciones como :
Z = 100 - 2 * a + b
La multiplicación de arreglos se hace con ( . * ), ya que cuando se utiliza el asterisco sin punto
indica multiplicación matricial, y además provoca un error.
Z = a .* b
La división también lleva un punto antes del signo, porque sino se utiliza el punto nos
referimos a la división matricial que es muy diferente.
Z = a ./ b
La siguiente operación obtiene el cuadrado del arreglo " a ".
Z = a .^ 2
Orientación de arreglos
Si separamos cada elemento del arreglo con punto y coma tenemos un arreglo de una sola
columna :
a = [ 1; 2; 3; 4; 5; 6 ]
Es necesario usar los corchetes, porque si no los usamos obtenemos el último valor que
capturamos :
d = 1 ; 2; 30 ; 40 ; 50 ; 600 ; 1000
Para crear una columna con 20 elementos hacemos lo siguiente :
d = ( 1 : 1 : 20 )
y trasponemos el renglón a columna, es decir buscamos la transpuesta. ( ' )
e = d'
¿ Que pasa si hacemos lo siguiente : ?
e'
Matrices
Se utiliza el punto y coma ( ; ) hacer una matriz.
Para formar la matriz 1 2 3
321
213
Escribimos :
A = [ 1 2 3; 3 2 1; 2 1 3 ]
Ecuaciones Simultáneas
Con MATLAB se pueden resolver sistemas de ecuaciones simultáneas fácilmente.
Por ejemplo para resolver el siguiente sistema de ecuaciones.
2x + 0y + 5z = 100
3x + 5y + 9z = 251
1x + 5y + 7z = 301
Capturamos los valores de x, y, z ; formando una matriz.
A = [ 2 0 5; 3 5 9; 1 5 7]
Después capturamos el valor al cual están igualadas las ecuaciones en otra matriz.
b = [ 100 ; 251; 301 ]
Una forma de solucionar las ecuaciones es obteniendo el inverso de la matriz, es decir : A -1
( menos uno )
El asterisco indica multiplicación matricial.
c = inv (A)* b
Otra forma de resolverlo, es utilizando la división matricial.
c=A\b
Es también posible obtener la determinante de una matriz.
det ( A )
Operaciones con Matrices
Definamos las siguientes matrices ' g ' y ' h '.
g = [ 1 2 3; 4 5 6; 7 8 9]
h = [ 1 0 2 ; 11 2 3 ; 3 5 12 ]
La suma de las matrices g y h se muestra enseguida :
k=g+h
k = g * h Multiplicación de dos matrices.
[L, U ] = lu (k) Calcula la factorización LU de la matriz cuadrada k
[d,e]= qr (k) Calcula la factorización QR de la matriz k.
Calcula la descomposición en valores singulares de la matriz k.
rank(k) Devuelve el rango de la matriz k.
cond(k) Devuelve el número de condición de la matriz k.
Modificación de las matrices.
A = [ 1 2 3; 4 5 7; 7 8 9 ]
Si nos equivocamos al capturar la matriz, por ejemplo si el número 7 del segundo renglón,
tercer columna debió ser 6 en vez de 7, tendríamos que capturar de nuevo la matriz.
Pero con MATLAB es posible modificarla de la siguiente manera :
A(2,3)= 6 Variable ( renglón, columna)= nuevo valor
Si tenemos la matriz identidad de 4 x 4 :
1000
0100
0010
0001
A = [ 1 0 0 0; 0 1 0 0; 0 0 1 0; 0 0 0 1]
Pero por algún error la matriz identidad debió de haber sido de 5 x 5.
¿ Hay que capturar de nuevo la matriz ?. La respuesta es no.
A(5,5) = 1
Agregamos un 1 en el renglón 5 columna 5, y como este no existían previamente, las columnas y
renglones se completan agregando ceros.
¿ Que pasa ahora si queremos sólo una matriz identidad de 3 x 3 y tenemos capturada una de 5
x 5.
Podemos utilizar :
Matriz ("Renglón" inicio : Fin , "Columna" inicio : Fin )
B = A ( 1 : 3, 1: 3)
Ahora si queremos que la matriz identidad sea : 0 0 1
010
100
C = B ( 3 : -1 : 1 , 1 : 3 )
Poner dos puntos ( : ) indica que se deben tomar todas las columnas
(1 : 5). Esto es valido también para los renglones.
C=A(:,[135])
Toma todos los renglones, pero sólo toma las columnas 1, 3 y 5.
Si creamos las siguientes matrices A y B :
A = [ 1 2 3 4 5; 1 2 3 4 5; 1 2 3 4 5; 1 2 3 4 5 ]
B = [ 6 7 8; 6 7 8; 6 7 8; 6 7 8 ]
Podemos construir una matriz C uniendo las dos anteriores
c=[AB]
A partir de la matriz A queremos tomar las columnas 1, 2 y 5, y de la matriz B queremos tomar
las columnas 1 y 3, para formar una matriz D.
D = [ A(:,[ 1 2 5]) B(:, [ 1 3])]
D( :,1)=[] Elimina la columna número uno.
Matrices especiales
ones(2) Hace una matriz de unos, de 2 x 2.
zeros(5,4) Hace una matriz de ceros, de 5 x 4.
rand(3) Hace una matriz de 3 x 3,
eye(4) Hace una matriz identidad de 4 x 4.
Gráficas
En MATLAB se pueden crear gráficas tan simples como :
D = [ 1 2 3 5 4 7 6 8 9 8 6 3 1 3];plot (D)
o se pueden crear gráficas tan complejas como :
cplxroot(3,10) Superficie de una raíz cubica.
Como se vió en el primer ejemplo es posible gráficar una serie de puntos y MATLAB
automáticamente ajusta los ejes donde se gráfica.
Por ejemplo, para gráficar la función seno se pueden crear un rango de valores
x = 0 : 0.1 : 20; x = vector de cero a veinte con incrementos de 0.1
y = sin(x); Seno del vector (x)
plot (x,y) Gráfica del seno
z = cos(x); Coseno del vector anterior
plot (x,z) Gráfica del coseno de x.
plot ( x,y,x,z) Gráfica del seno y coseno en la misma pantalla
plot (x,z,'*') Gráfica del coseno con los signos ' * '
Hace la gráfica en azul, y los signos ' + ', intercambiando los ejes.
plot ( z, x,'b+')
Como se ve es posible gráficar en Matlab con símbolos y además escoger el color, tal como se
muestra en la tabla inferior.
Símbolo
Color
Símbolo
Estilo de línea
y
amarillo
.
Punto
m
magenta
o
Circulo
c
cían
x
Equis
r
rojo
+
Más
g
verde
*
Asterisco
b
azul
-
Menos
w
blanco
:
dos puntos
k
negro
-.
menos punto
--
menos menos
Es posible agregar un cuadriculado a la gráfica, para tener más precisión, con el comando.
grid
Se pueden agregar títulos a las gráficas y etiquetas en los ejes con los comandos siguientes.
title(' Gráfica del coseno de x')
Para ponerle etiquetas a los ejes se puede utilizar los comandos
ylabel ('etiqueta')
xlabel('etiqueta')
axis off Desaparece los ejes.
Subplot
El comando subplot nos permite desplegar en pantalla varias gráficas.
subplot(m,n,a)
'm' y 'n' son una matriz que representa las cantidades de gráficas que se van desplegar; 'a'
indicaría el lugar que ocuparía la gráfica en el subplot.
Hagamos la gráfica de los siguientes puntos. La desplegaremos en cuatro puntos diferentes en
pantalla para ver las características de subplot.
a=[ 1 ,2 ,3 9 ,8 ,7 ,4, 5, 6, 8, 7, 5];
plot (a)
Vamos hacer una matriz de 2 x 2 para gráficar, cuatro posibles ventanas o gráficas. Y queremos
que la primera gráfica ocupe el lugar (1,1) de la matriz. entonces escribimos.
subplot(2,2,1) ,plot(a)
subplot(2,2,2) , plot(a)
subplot(2,2,4), plot(a)
CLF borra todos los objetos de la gráfica.
CLF RESET Borra todo lo que hay en la gráfica y resetea todas las propiedades de la figura.
clf
Gráficas en tres dimensiones.
El comando plot se puede extender a 3 dimensiones con el comando plot3 .
El siguiente ejemplo hace una gráfica de una espiral en tres dimensiones.
t=0:pi/50:10*pi;
plot3(sin(t),cos(t),t)
zlabel ('etiqueta')
Se utiliza para dar etiquetas al eje z, en las gráficas en tres dimensiones.
Gráficos de malla y superficie.
z = peaks(10)
El comando peaks crea un conjunto de valores que al ser gráficados, se ven de la siguiente
manera.
plot(z)
Se tomará como base la gráfica anterior para demostrar algunas funciones de graficación en
tres dimensiones.
mesh(z)
contour(z,10)
surf(z)
Es posible cambiar el sentido de orientación de las gráficas con el comando view(x,y)
view(0,0)
view(90,0)
Gráficas en el plano complejo
Ahora vamos a crear un conjunto de valores para gráficar en el plano complejo, en tres
dimensiones.
z= cplxgrid(5)
cplxmap(z,z)
cplxmap(z,z.^z)
cplxroot(2,10) Raíz cuadrada
Se pueden crear gráficos en coordenadas polares con el comando Polar (t,r,s) donde t es el
vector en ángulos en radianes, r es el radio del vector y s es la cadena de caracteres que describe
, color, símbolo del estilo del línea.
t=0:0.1:2*pi;
r = sin(2*t).*cos(2*t);
polar(t,r)
gtext( ‘ texto ’ )
Se utiliza para colocar texto en una gráfica, con la ayuda del mouse. Simplemente se ejecuta el
comando y con el mouse se selecciona la coordenada deseada y se presiona el botón derecho
del mouse, quedando fijo el texto en la pantalla.
Copiar una gráfica
Cuando se quiera realizar algún reporte formal en un procesador de palabras como en este caso
Word, es posible copiar las gráficas hechas en Matlab por medio de la orden copy to bitmap.
El procedimiento sería :
•
En Matlab, en el menú de la ventana principal de la gráfica, se escoge el menú ‘edit’ y de
este se escoge copy to ‘bitmap’;
•
Se minimiza Matlab y se pasa al procesador de palabras escogido
•
Se localiza la posición en la cual estará la gráfica, y del menú edit se escoge ‘paste o
pegar’.
La gráfica aparecerá en el procesador de palabras.
Existe un pequeño inconveniente ya que la gráfica aparecerá sobre un fondo de color negro que
Matlab tiene por default, si se imprime este documento obviamente la gráfica aparecerá sobre
un fondo negro lo cual hará que la impresora gaste tinta en exceso.
Para remediar esto se puede cambiar el color de fondo de las gráficas a blanco con el comando.
Whitebg
después se hace procedimiento mencionado anteriormente.
Imprimir una gráfica.
Se puede imprimir una gráfica directamente desde el menú de la ventana de la gráfica,
seleccionando la opción print.
Otros comandos
•
•
•
•
What : Listado de todos los archivos *.m en el directorio actual
dir : Lista todos los archivos en el directorio actual
type nombre_archivo : Lista el programa, (Programas con terminación *.M).
Which nombre_archivo : Da el path en el cual esta el archivo.
Se pueden utilizar comandos de Unix tales como Ls, pwd.
Como hacer un programa en MATLAB
Es posible realizar un programa en Matlab tal como se hace en otros lenguajes como el basic,
pascal o el lenguaje C. Es necesario utilizar un editor para escribir el código.
•
Para cargar un editor, se puede hacer desde la ventana options, escogiendo editor
preference, y cargando el editor que se desee utilizar.
•
Para escribir código, requerimos crear un archivo *.M. Para esto necesitamos abrir new
M.file en la ventana file.
•
Ahora escribimos el código y salvamos el archivo utilizando la terminación archivo.M.
•
Se puede correr el programa desde Matlab simplemente escribiendo el nombre del
archivo que fue creado.
•
Es posible abrir programas con la terminación *.M desde Matlab, en el menú file, open
M.file.
Bucles For
Tal como en otros programas de programación en Matlab es posible crear programas con
estructura con ciclos for.
For x = Número incial : número final
Instrucción
End.
for x = 1 : 10
x=x+1
end
También se pueden hacer operaciones como la siguiente :
matriz = [ 1 2 3 4; 1 2 3 4; 1 2 3 4; 1 2 3 4]
for x = matriz
x = n(1)*n(2)*n(3)*n(4)
end
Bucles while
While permite que ciertas instrucciones sean repetidas un número indefinido de veces bajo el
control de una condición lógica.
Por ejemplo, ¿ Cual es primer entero n para el cual n! (factorial) es un número de 100 dígitos ?.
n = 1;
while prod(1:n)<1.e100,n=n+1;end
n
IF ELSE END
Se pueden utilizar estructuras como:
If expresión (verdadero)
acción
End.
If expresión (verdadero)
acción 1
else (Falso)
acción 2
End.
If expresión (verdadero)
acción 1
elseif expresión (verdadero)
acción 2
...
else (Falso)
acción "n"
End
Análisis de datos.
En Matlab podemos hacer análisis de datos estadísticamente o probabilisticamente. Entre estos
análisis están cálculos de medias, máximos, mínimos, desviaciones estándar, etc.
Inventemos un conjunto de datos, los cuales podremos análizar.
x =[ 9 1 ;23 34; 16 28 ;12 33 ;5 7; 9 4 ;12 34 ;5 14 ;43 6 ;3 6 ;12 9; 2 30 ;3 2; 2 4]
plot (x) La representación gráfica de los puntos anteriores.
A continuación se hace una análisis de los datos presentados, habrá dos respuestas porque
tenemos dos columnas.
media=mean(x) Obtención de la media
max(x) El máximo de los valores.
min(x) El mínimo de los todos los valores
std(x) La desviación estándar
hist(x) Histograma.
Interpolación
Matlab tiene varios comandos que nos permiten hacer interpolaciones, uno de los métodos es
por medio de mínimos cuadrados.
Mínimos cuadrados
Se crean varios puntos.
x = [ 0 .1 .2 .3 .4 .5 .6 .7 .8 .9 1 ];
y =[ 0.09 .12 .24 .27 .4 .45 .61 .67 .71 .63 .59];
se muestra los puntos a los cuales se les va a interpolar
plot (x,y,'*')
Se utiliza una aproximación de segundo orden, porque la función es no lineal.
n=2 ; Segundo orden.
p=polyfit(x,y,n) Crea los elementos del polinomio que hará la interpolación.
El polinomio es del tipo ax2 + bx + c = 0
f=linspace(0, 1, 100); Formamos una serie de puntos para gráficar.
z=polyval(p,f);Evaluación polinomial.
plot(x,y,'*',x,y,f,z,':') Hacemos la gráfica de la interpolación.
Podemos ver que la interpolación es pobre. Ahora tratemos de hacerla con un polinomio de
quinto grado, el procedimiento es el mismo que el anterior.
n=5;
p = polyfit(x,y,n)
z = polyval(p,f);
plot(x,y,'*',x,y,f,z,':')
Otra forma de interpolar, es con el comando interp1.
g=interp1(x,y,f)
Se puede observar en la gráfica resultante, que parece como una aproximación lineal entre cada
punto.
plot(x,y,'*',f,g)
Para una aproximación más suave es recomendable usar el comando spline, que hace una
interpolación tipo cubic spline.
g=spline(x,y,f)
plot(x,y,'*',f,g)
Polinomios
MATLAB puede sacar ls raíces de un polinomio. Para capturar el polinomio de abajo,
solamente ponemos el valor de cada variable, respetando su lugar. Como no hay termino x1 ,de
todos modos se captura como cero.
X3 + 5x2 - 2
p = [1 5 0 -2]
Para sacar las raíces escribimos.
r=roots(p)
Tips de memoria.
Para obtener la máxima velocidad en Matlab debemos tratar de vectorizar los algoritmos, por
ejemplo :
a=0
for a = 0:.0.1:10
a = a + 1;
y(a)=sin(t)
end
La versión vectorizada sería :
t= 0:0.01:10;
y = sin(t)