lunes, 11 de marzo de 2013

Iniciacion al Matlab (2)

Lo promerido es deuda, aqui está la Iniciacion a Matlab (2), donde trataremos el trabajo con matrices y polinomios.

MATRICES

En primer lugar, debemos aclarár que la caracteristica mas notoria de Matlab, es que está ideado para trabajar con matrices, asi pues, un numero escalar seria una matriz de 1x1.

CREACIÓN DE MATRICES

Las matrices en Matlab, han de estar entre corchetes, los elementos separados entre si (un espacio en blanco es suficiente) y se usará el caracter " ; " para indicar el final de cada fila.
Para introducir una matriz vacia, vasta con que no escribamos nada dentro de los corchetes.
Ej.

>> A = [1 1 1 ; 2 2 2 ; 3 3 3]

A =

     1     1     1
     2     2     2
     3     3     3

>> matriz_vacia = [ ]

matriz_vacia =

     [ ]


Por supuesto, no podremos introducir una matriz con 3 elementos en la primera fila y 2 elementos en la segunda, o cosas asi.

Lo normal, es asignarle una variable a cada matriz (matriz A, matriz B, matriz C...), aunque no es estrictamente necesario.

Por otra parte, tenemos una serie de funciones que nos permiten crear matrices rapidamente.

zeros --> Una matriz de los elementos que deseemos, con todos sus elementos igual a 0.
Ej.

>> zeros(1,2)

ans =

     0     0


ones --> Una matriz de los elementos que deseemos, con todos sus elementos igual a 1.
Ej. 

>> ones(2,3)

ans =

     1     1     1
     1     1     1


eye --> Creará una matriz unidad, de las dimensiones que deseemos.
Ej. 
>> eye(4,3)

ans =

     1     0     0
     0     1     0
     0     0     1
     0     0     0


diag --> Crea una matriz diagonal, cuyos elementos (de la diagonal) le pasaremos en un vector (matriz de una sola fila).
Ej.

>> v=[1 2 3 4 5]

v =

     1     2     3     4     5

>> diag(v)

ans =

     1     0     0     0     0
     0     2     0     0     0
     0     0     3     0     0
     0     0     0     4     0
     0     0     0     0     5


rand--> Creará una matriz de las dimensiones que deseemos, con numeros aleatorios de una distribución uniforme.
Ej.

>> rand(5)

ans =

    0.8147    0.0975    0.1576    0.1419    0.6557
    0.9058    0.2785    0.9706    0.4218    0.0357
    0.1270    0.5469    0.9572    0.9157    0.8491
    0.9134    0.9575    0.4854    0.7922    0.9340
    0.6324    0.9649    0.8003    0.9595    0.6787


randn --> Creará una matriz de las dimensiones que deseemos, pero con numeros aleatorios de una distribución normal de media 0 y desviación tipica 1.
Ej.

>> randn(3,4)

ans =

    1.0347    0.2939   -1.1471   -2.9443
    0.7269   -0.7873   -1.0689    1.4384
   -0.3034    0.8884   -0.8095    0.3252


linspace --> Creará un vector fila, con un numero de elementos n equiespaciados entre un valor inicial y un valor final.
Ej.

>> linspace(0,1,4)   % Valor inicial = 0, valor final = 1, y 4 elementos.

ans =

         0    0.3333    0.6667    1.0000


Podemos crear tambien matrices, concatenando varias matrices.
Ej.

>> A = [1 0 0; 0 0 1; 0 1 0];
>> B = [4;5;6];
>> M = [A B; zeros(1,3) 1]

M =

     1     0     0     4
     0     0     1     5
     0     1     0     6
     0     0     0     1


ACCESO A LOS ELEMENTOS DE UNA MATRIZ

Para acceder a los elementos de una matriz, deberemos poner el nombre de la matriz, y a continuación, entre parantesis y separados por comas, el numero de fila y columna del elemento que deseemos ( en el ejemplo anterior, M(3,4) por ejemplo seria 6 ). 

------------------------------------------------------------------------------------------------------------
NOTA: Al contrario que en C, por ejemplo, en Matlab empezamos a contar por el 1, es decir, el primer elemento de un vector o matriz, será el elemento 1, no el elemento 0. La primera fila, será la fila 1, no la fila 0 etc...
------------------------------------------------------------------------------------------------------------

También podemos referirnos a los elementos de la matriz con un unico indice. El elemento 1 de una supuesta matriz N ( N(1) ), se corresponderia con N(1,1), el elemento N(2) con N(2,1) y así sucesivamente
Por ejemplo, en la matriz del ejemplo anterior, el elemento M(1) = 1, el elemento M(7) = 1, el elemento M(13) = 4...

Podemos asi mismo, acceder a varios elementos a la vez. Si por ejemplo, queremos acceder a los elementos 2 y 4 de la tercera fila, de la matriz M del ultimo ejemplo, podriamos proceder de la siguiente forma.
Ej.

>> M( 3 , [ 2 4 ] )

ans =

     1     6


Tambien podemos acceder a solo los elementos de una matriz que cumplan una determinada condición. En este caso, los valores se muestran en forma de un vector columna.
Ej.

>> M ( M > 3 )

ans =

     4
     5
     6



EL OPERADOR DOS PUNTOS ( : )

EXTREMADAMENTE util en Matlab, tiene varios usos. Por un lado lo podemos usar para crear vectores de numeros enteros.
Ej.

>> 0:6

ans =

     0     1     2     3     4     5     6


>> 10:-2:0

ans =

    10     8     6     4     2     0

Este operador tambien se puede usar para acceder a rangos de filas o columnas de una matriz. Podriamos traducir a lenguaje humano el operador dos puntos como " De x a y".
Ej.

>> H=[1 2 3 4;5 6 7 8]

H =

     1     2     3     4
     5     6     7     8

>> H( 2 , 2 : 4 )    % fila 2, columnas de la 2 a la 4.

ans =

     6     7     8

Asi mismo, podemos usarlo para acceder a toda la fila o columna (segun corresponda) si no le especificamos valores inicial y final.
Ej.

>> H( 1 , : )

ans =

     1     2     3     4

>> H ( : )

ans =

     1
     5
     2
     6
     3
     7
     4
     8

------------------------------------------------------------------------------------------------------------
NOTA: Podemos utilizar la palabra reservada "end" para referirnos a la ultima fila o columna, segun corresponda. end-1 (penultima) , end-2 (antepenultima)... etc... tambien serán validos.
------------------------------------------------------------------------------------------------------------

Ya escamos listos para cambiar el contenido de algunos elementos de una matriz ya existente. Para ello solo deberemos acceder a ella, y cambiarle los elementos. Los nuevos elementos se los hemos de dar en un vector columna.
 Ej.
 
>>M( 3 , : ) = [ 1 ; 2 ; 3 ; 4 ]    %Cambiemos los valores de la fila 3 (todas las columnas de la fila 3).

M =

     1     0     0     4
     0     0     1     5
     1     2     3     4
     0     0     0     1


OPERACIONES CON MATRICES

En este apartado, ya que la cantidad de explicación que requiere es minima, simplemente iré simplemente comentando la sintaxis a utilizar para cada operación.

Suma de una matriz A y una matriz B --> A+B
Resta de una matriz A y una matriz B --> A-B
Multiplicación de una matriz A y una matriz B --> A*B
Division de una matriz A entre una matriz B (A*B^-1) --> A/B
Division de una matriz A y una matriz B (B^-1*A) --> A\B

TRASPUESTA: El simbolo de matriz traspuesta es un apostrofo. Asi, la traspuesta de A seria A' . Cuidado con los numeros complejos.
Ej.

>> C=[1+j j -2j 3]

C =

   1.0000 + 1.0000i        0 + 1.0000i        0 - 2.0000i   3.0000          

>> C'

ans =

   1.0000 - 1.0000i
        0 - 1.0000i
        0 + 2.0000i
   3.0000          

INVERSA: Para hacer la inversa de A, escribiriamos A^-1 o simplemente usaremos la función inv (inv(A)).
DETERMINANTE: Para calcular el determinante de una matriz, usaremos la función det (det(A)).


Cuando tenemos un conjunto de datos almacenados en una matriz (array), y queremos trabajar con ellos, normalmente no queremos trabajar con la matriz entera, si no que solo queremos manipular los datos de esta. 
Asi pues, si queremos elevar al cuadrado todos los datos almacenados en una matriz A, no podemos poner A^2, ya que esto seria una operación con toda la matriz, que seria equivalente a poner A*A, evidentemente el resultado no seria el deseado (aun en el caso de que no nos diera error, recordemos que para multiplicarlas, las matrices han de ser cuadradas).

Para hacer este tipo de operaciónes, que queremos manipular solo los datos que tenemos almacenados, Matlab nos ofrece la posibilidad de hacerlo, con una serie de comandos que nos permiten operar con las matrices elemento a elemento.
 
MULTIPLICACIÓN ELEMENTO A ELEMENTO --> .*
DIVISIÓN ELEMENTO A ELEMENTO --> ./ o .\
ELEVAR A UN VALOR ELEMENTO A ELEMENTO --> .^

Ej.

>> v = 1:5

v =

     1     2     3     4     5

>> v^2
??? Error using ==> mpower
Matrix must be square.
 
>> v.^2

ans =

     1     4     9    16    25


Por otro lado, tambien tenemos una serie de funciones que nos permiten realizar calculos con arrays elemento a elemento.

abs --> Valor absoluto y modulo de numeros complejos
acos --> Arcoseno
angle --> Argumento de un complejo
asin --> Arcoseno
atan --> Arcotangente
ceil -->Redondeo hacia infinito
conj --> Conjugado de un numero complejo
cos --> Coseno
exp --> Exponencial
fix --> Redondea hacia cero
floor --> Redondea hacia menos infinito
log --> Logaritno NEPERIANO
log2 --> Logaritmo en base 2
log10 --> Logaritmo en base 10
rem--> Resto de una division
round --> Redondea al entero mas cercano
sign --> Signo
sin --> Seno
sqrt --> Raiz Cuadrada
tan --> Tangente

------------------------------------------------------------------------------------------------------------
NOTA: Ver help de cada función y help elfun.
------------------------------------------------------------------------------------------------------------

POLINOMIOS

La razón por la que incluyo un apartado de explicación y manejo de polinomios seguido al de matrices, es por que en Matlab, los polinomios son matrices, concretamente los declaramos como vectores fila.

Asi pues, para introducir en Matlab un polinomio x^3+3*x+1, hemos de crear un vector fila cuyos elementos serán el grado de cada componente del polinomio.
Ej.

>> P=[1 0 3 1]     % 1*x^3 + 0*x^2 + 3*x + 1


Para operar con polinomios, estos deben ser de igual grado, es decir sus vectores han de tener los mismos elementos.
Ej.

>> P2=[0 1 2 1]  % 0*x^3 + 1*x^2 + 2*x + 1 

P2 =

     0     1     2     1

Matlab tambien tiene una serie de funciones que nos permiten trabajar con polinomios:

conv--> Convolucion de dos polinomios, equivale a su multiplicación.
deconv --> Deconvolucion de dos polinomios, equivale a su division.
poly --> Crea un polinomio cuyas raices que le indiquemos.
polyder --> Calcula el polinomio resultado de la derivada de un polinomio
polyint --> Calcula el polinomio resultado de la integral de un polinomio
roots --> Calcula las raices de un polinomio.

------------------------------------------------------------------------------------------------------------
NOTA: Ver la ayuda de estas funciones
------------------------------------------------------------------------------------------------------------

Con esto terminamos con el manejo de matrices y polinomios, en la tercera entrega, trataré algunas de las opciones graficas de Matlab, y programación.

1 comentario:

  1. Como te lo curras crack! que bien me hubiese venido esto a principios de curso en setiembre - octubre!

    ResponderEliminar