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.

viernes, 8 de marzo de 2013

Iniciación al MatLab (1)

El Matlab es una herramienta fundamental en el mundo de la ingenieria, ya que nos ofrece una ampla serie de recursos extremadamente utiles, facilitando todos los procesos de calculo, a menudo tan tediosos, pudiendo centrarnos así en el diseño de la aplicación o simulación que tengamos entre manos. Por esto mismo, es también una gran herramienta de gran valor pedagógico, permitiendo al estudiante centrarse "en lo importante" e interrelacionar los conceptos que tenga que relacionar, sin llenar su cabeza de numeros y numeros.

Partiremos de la base de que todo el mundo sabe abrir y cerrar Matlab y donde escribir.
Puede que una de las cosas mas importantes para el uso de Matlab, sea saber manejar con soltura la ayuda.

USO DE LA AYUDA

-Para buscar guias y tutoriales de inicio rápido, bastará con que pulsemos F1 o pulsemos el boton "Product Help" del menú "Help". En la ventana que se abrirá, podemos encontrar las guias y ayudas de las diferentes toolboxes, y de los diferentes recursos que nos ofrece Matlab.

-Para obtener ayuda acerca de una función concreta, tan solo debemos teclear el comando "help" antes del nombre de la función en la ventana de comandos.
Ej.
>>help plot

También podemos pulsar tabulador para ver una lista con los comandos existentes que pueden autocompletar lo que ya llevamos escrito.

OPERADORES

Matematicos

+ --> Sumar
- --> Restar
* --> Multiplicar
/ --> Dividir
^ --> Potencia

Tambien creo util añadir aqui funciones como:

sqrt("numero o expresión") --> Raiz cuadrada
abs("numero o expresión) --> Valor absoluto

------------------------------------------------------------------------------------------------------------
NOTA: Para evitar el llamado eco de pantalla (retorno del resultado de la ultima operación realizada), a veces MUY molesto, tan solo deberemos añadir " ; " al final del código que acabamos de escribir.
Ej.
 >> raiz_de_dos = sqrt(2);    % Aquí se ha creado una variable que almacena el valor de la raiz cuadrada de 2
------------------------------------------------------------------------------------------------------------

El orden de ejecución de estos operadores será el normal, es decir, en primer lugar las operaciones que se encuentren entre parentesis, en segundo lugar las potencias (y raices), en tercer lugar las multiplicaciones y divisiones, y en cuarto y ultimo lugar las sumas y restas.

Logicos

== --> Comparación igual
~= --> Distinto
< --> Menor
> --> Mayor
<= --> Menor o igual
>= --> Mayor o igual
~ -->negación
&& --> Y lógico
|| --< O lógico

El resultado de estas operaciónes será 1 si es cierto o 0 si es falso.
Ej:
    >> 2==2

    ans =

         1

VARIABLES

A diferencia de otros lenguajes, Matlab no requiere declarar los tipos de variables antes de su uso (el tipico int v; no seria necesario), ya que en Matlab, las variables se declaran automaticamente, al asignarles un valor.
Por supuesto, este valor puede ser el resultado de una expresión.
 Ej.
 >> variable_1=2+2 % En este caso estamos declarando una variable llamada "variable_1", que contiene el %resultado de la operación 2+2. 

variable_1 =

     4

Tambien podriamos hacer otra variable como la siguiente:
Ej.
 >> variable2 = variable_1 - 1; 

Debemos tener varias cosas en cuenta a la hora de crear variables:
-  Los nombres de las variables deben empezar siempre con una letra.
- Matlab DISTINGUE ENTRE MAYUSCULAS Y MINUSCULAS.
- No debemos usar palabras reservadas como nombres de variables. Podemos ver una lista de palabras reservadas tecleando el comando " iskeyword ".
- No debemos crear variables con nombres de funciones, ya que los nombres de variables tienen preferencia sobre los nombres de funciones. Podemos asegurarnos de que el nombre que deseamos para nuestra variable está disponible, con la funcion " exist " (ver help exist).
- Para borrar una variable usaremos el comando clear " nombre de la variable "
Ej.
>>clear raiz_de_dos

------------------------------------------------------------------------------------------------------------
NOTA: Imprescindible, NO DEFINIR NINGUNA VARIABLE COMO " i " O " j ". Estas dos letras se corresponden ambas con el operador complejo. Este operador se usa igual  que lo usariamos en papel (x=1+2j). Para trabajar con estos numeros son utiles las funciones real( " variable o numero " ), imag( " variable o numero " ), abs( " variable o numero " ) para el modulo y angle( " variable o numero " ) para el argumento.
------------------------------------------------------------------------------------------------------------

Es tambien importante aclarar en este apartado, que Matlab NO DESPEJA ECUACIONES.


Con esto finalizamos el primer post de iniciación al Matlab, con esto el usuario ya deberia estar listo para usar Matlab como una calculadora.
En la segunda parte hablaré de el trabajo con matrices y polinomios.
Gracias a todos por la lectura.

jueves, 7 de marzo de 2013

Bienvenida

Hola a todos, y bienvenidos.

Soy Marcos Alvarez Gonzalez, propietario de este blog. Soy un futuro (a escasos meses de serlo) Ingeniero Técnico Industrial, de la especialidad de Electrónica Industrial.

Lo primero de todo agradecer tu visita a mi blog, significa mucho para mi que lo visites, y que lo encuentres de interés y/o utilidad, ya sea dentro del ámbito académico, profesional, como aficionado a la electrónica y el control, o sea cual sea el motivo que te ha llevado a estar aquí ahora mismo leyendo esto.

Mi intención es ir subiendo periódicamente entradas bastante variopintas, desde pequeños tutoriales y ejemplos resueltos de diferentes materias como programación de microcontroladores, acondicionamiento de señales, funcionamiento de sistemas electrónicos básicos  simulaciones de sistemas continuos, discretización de estos, diseño de reguladores, análisis cinemáticos y dinámicos de sistemas roboticos, o simplemente uso de Matlab dentro de la ingeniería electrónica y de control, hasta publicaciónes de novedades dentro del mundillo, investigaciones en curso, o otros temas que considere de interés para todos aquellos que estamos dentro de este apasionante mundo.

Cualquier duda, pregunta, o sugerencia, no dudes en dejar tu comentario.

Un saludo a todos, y de nuevo, BIENVENIDOS.