Laboratorio Nº 1: Introducción al Matlab Señales y sistemas - 2006
INTRODUCCION A MATLAB Matlab es un lenguaje de alto nivel desarrollado para realizar cálculos técnicos. Su nombre deriva de Matrix Laboratory (Laboratorio de Matrices). Por su capacidad Matlab es un sistema interactivo ideal para aplicaciones de ingeniería. Los distintos usos que se le pueden dar son: • • • • • •
Matemáticas y cálculos Desarrollo de algoritmos Modelado y simulación Análisis y visualización de datos Gráficos científicos e ingenieriles Desarrollos aplicados, incluyendo la construcción de interfaces gráficas
Para aprender a trabajar con Matlab es fundamental entender el manejo de matrices que éste utiliza. 1) MANIPULACIÓN DE MATRICES Las matrices se pueden definir de distintas maneras: • • • •
Ingresando de manera explicita la lista de elementos Cargando matrices anteriormente creadas Generando matrices mediante la utilización de funciones Crear matrices con funciones propias hechas en archivos .m
Para definir una matriz ingresando los elementos solo hace falta ingresar el nombre de la variable donde se guardará la matriz y el valor de los distintos elementos. Los elementos deben estar entre corchetes, “[]” y se utiliza el punto y coma “;” para indicar el final de cada fila. Los elementos dentro de cada fila se separan mediante un espacio en blanco o mediante comas. Ejemplos: VARIABLE
VECTOR FILA
VECTOR COLUMNA
MATRIZ
>> V=2
>> A=[1 2]
>> B=[1;2]
>> C=[1 2;3 4]
V=
A=
B=
C=
2
1
2
1 2
1 3
2 4
En caso de que no se incluya el nombre de la variable donde se guardará la matriz, la misma se almacenará de manera predeterminada en la variable ans. Esto sucede siempre que no se especifique una variable de salida. Ejemplo: >> [1 2] ans = 1 2 Si se desea evitar que Matlab muestre los resultados de cada acción realizada se debe incluir el punto y coma “;” al final de cada línea. Ejemplo: >> D=[1 -2 4.5;8 4i 12i;0 0 0]; Página 1 de 13
Laboratorio Nº 1: Introducción al Matlab Señales y sistemas - 2006 Operaciones con matrices: Matlab permite realizar una gran cantidad de operaciones con matrices. Algunas de ellas son: • • • • • •
Suma: + Resta: Multiplicación: * División: / Potencia: ^ Transpuesta: '
Ejemplo: Definimos >> A=[1 2 3;9 1 1;2 1 5];B=[1 7 1;6 6 4;3 4 8]; MULTIPLICACION >> C=A*B
POTENCIA >> C=A^2
C=
C=
22 18 23
31 73 40
33 21 46
25 20 21
7 20 20 33 10 32
Observación: Al realizar operaciones con matrices hay que tener en cuenta las dimensiones de cada matriz para no obtener un mensaje de error. Ejemplo: >> D=[1 2];E=[3 4]; >> F=D*E ??? Error using ==> * Inner matrix dimensions must agree. También se pueden realizar las mismas operaciones pero elemento a elemento. Para esto hay que anteponer un punto “.” a los diferentes operadores matemáticos. • • •
Multiplicación elemento a elemento: .* División elemento a elemento: ./ Potencia elemento a elemento: .^
Ejemplo: MULTIPLICACION ELEMENTO A ELEMENTO >> C=A.*B
POTENCIA ELEMENTO A ELEMENTO >> C=A.^2
C=
C=
1 14 3 54 6 4 6 4 40
1 81 4
4 9 1 1 1 25
Funciones con matrices: Matlab cuenta con diferentes funciones para trabajar con matrices: Ejemplo: Sean las matrices >> A=[16 3 2 13;5 10 11 8;9 6 7 12;4 15 14 1]; D=[2 4 1;3 8 -1;-2 5 -7];
Página 2 de 13
Laboratorio Nº 1: Introducción al Matlab Señales y sistemas - 2006 ELEMENTOS DIAGONALES diag(variable) Da como resultado una matriz que contiene todos los elementos diagonales de la matriz original.
DETERMINANTE det(variable) Calcula el determinante de la matriz.
>> C=diag(A)
C= 0
>> C=det(A)
MAXIMO max(variable) Si la matriz es un vector dará como resultado el máximo valor del vector y si es una matriz dará como resultado un vector fila que contiene el máximo de cada columna de la matriz. >> C=max(A)
C= 16 10 7 1
C= 16
MINIMO min(variable) Si la matriz es un vector dará como resultado el mínimo valor del vector y si es una matriz dará como resultado un vector fila que contiene el mínimo de cada columna de la matriz.
15
14
13
AUTOVALORES eig(variable) Da como resultado un vector que contiene todos los valores de la matriz. La matriz utilizada debe ser cuadrada.
MEDIA mean(variable) Para un vector, el resultado es el valor medio de los elementos del mismo. Para matrices, el resultado es un vector fila que contiene la media de cada columna de la matriz.
>> C=eig(A)
>> C=mean(A)
C= 34.0000 8.0000 0.0000 -8.0000 INVERSA inv(variable) Da la inversa de una matriz, la matriz debe ser cuadrada y no singular
C= 8.5000 8.5000 8.5000
>> C=min(A) C= 4
3
2
1
DESVIO ESTANDAR std(variable) Para un vector, el resultado es la desviación estándar del vector. Para matrices, el resultado es un vector fila que contiene la desviación estándar de cada columna de la matriz. >> C=std(A) C= 5.4467 5.1962 5.1962 5.4467 MATRIZ DE CEROS zeros(n,m) Crea una matriz de ceros de orden n x m. Si se ingresa solo zeros(n) crea una matriz de ceros de orden n x n.
>> C=inv(D) C= -2.4286 1.5714 -0.5714 1.0952 -0.5714 0.2381 1.4762 -0.8571 0.1905
MATRIZ DE UNOS ones(n,m) Crea una matriz de unos de orden n x m. Si se ingresa solo ones(n) crea una matriz de unos de orden n x n.
>> C=zeros(2,3)
8.5000
POLINOMIO CARACTERISTICO poly(variable) Da como resultado los coeficientes del polinomio característico de la matriz. La misma debe ser una matriz cuadrada. Nota: el polinomio característico se obtiene como “det(λI - A) = 0” >> C=poly(A) C= 1.0e+003 * 0.001 -0.0340 -0.064 2.176 -0.000 MATRIZ ALEATORIA rand(n,m) Crea una matriz de elementos con valores aleatorios de orden n x m. Los valores que toman los elementos son elegidos de una distribución uniforme entre 0 y 1. si se ingresa solo rand(n) la matriz creada será de orden n x n.
>> C=ones(2) C= 0 0
>> C=rand(4,3) 0 0
0 0
C= 1 1
1 1
C= 0.9501 0.2311 0.6068 0.4860
0.8913 0.7621 0.4565 0.0185
0.8214 0.4447 0.6154 0.7919
Página 3 de 13
Laboratorio Nº 1: Introducción al Matlab Señales y sistemas - 2006 Manejo de matrices: El elemento en la fila i y en la columna j de una matriz A se denota como A(i,j). De esta manera A(2,3) es el valor del elemento ubicado en la segunda fila y la tercera columna. Si se intenta utilizar un elemento que se encuentra fuera de la matriz aparece un mensaje de error. Ejemplo: >> t=A(4,5) ??? Index exceeds matrix dimensions. Ahora bien, si se guarda un elemento que esta fuera de la matriz, la misma aumenta su tamaño para acomodar el nuevo dato. Ejemplo: >> X=A; >> X(4,5)=17 X= 16 3 5 10 9 6 4 15
2 13 11 8 7 12 14 1
0 0 0 17
El operador dos puntos “:” es uno de los operadores mas importantes de Matlab. El mismo se puede utilizar de varias maneras. Para comprender su funcionamiento se muestran a continuación diferentes ejemplos: Ejemplos: •
Para obtener un vector fila de enteros del 1 al 10 se utiliza el operador de la siguiente forma:
>> C=1:10 C= 1
2
•
3
4
5
6
7
8
9
10
También se puede especificar el incremento entre cada elemento sucesivo:
>> C=100:-7:50 C= 100
93
86
79
72
65
58
51
>> C=0:pi/4:pi C= 0 •
0.7854
1.5708
2.3562
3.1416
El operador se puede utilizar para referirse a porciones de una matriz:
>> p=A(1:2,3) p= 2 11 Esto equivale a los primero dos elementos de la tercera columna de A.
Página 4 de 13
Laboratorio Nº 1: Introducción al Matlab Señales y sistemas - 2006 >> C=A(3:4,1:3) C= 9 4
6 15
7 14
En este ejemplo se forma una nueva matriz C con las filas 3 y 4 y las columnas 1, 2 y 3 de la matriz A. •
El operador “:” por si mismo sirve para referirse a todos los elementos de una fila o columna. Es decir, A(:,j) se refiere a todos los elementos de la columna j y A(k,:) se refiere a todos los elementos de la fila k.
>> C=A(:,3) C= 2 11 7 14 >> C=A(1,:) C= 16 •
3
2
13
Se puede utilizar la función end para referirse a la última fila o a la última columna.
>> C=A(:,end) C= 13 8 12 1 •
Para borrar filas y columnas se utilizan los corchetes.
>> A(:,2)=[] A= 16 2 13 5 11 8 9 7 12 4 14 1 En este ejemplo se han borrado todos los elementos de la columna 2 de la matriz A. 2) FUNCIONES MATEMATICAS Matlab provee un gran número de funciones matemáticas elementales. Además permite realizar varios cálculos matemáticos como integrales indefinidas, integrales definidas, resolver sistemas de ecuaciones y realizar simplificaciones. Funciones matemáticas elementales: • Seno: sin(variable) Da el seno de cada elemento de la variable. >> sin(3.14)
Página 5 de 13
Laboratorio Nº 1: Introducción al Matlab Señales y sistemas - 2006 ans = 0.0016 >> A=[1 2 3]; >> sin(A) ans = 0.8415
0.9093
0.1411
• Tangente: tan(variable) Da la tangente de cada elemento de la variable. Su utilización es idéntica a la de la función seno. Lo mismo sucede para todas las demás funciones trigonométricas como coseno (cos), arcocoseno (acos), arcotangente (atan), etc. • Raíz cuadrada: sqrt(variable) Calcula la raíz cuadrada de cada elemento de la variable. >> A=[2 9;16 81]; >> sqrt(A) ans = 1.4142 4.0000
3.0000 9.0000
• Exponencial: exp(variable) Realiza la exponencial de cada elemento de la variable. >> A=[2.4 1;-3 0.1]; >> exp(A) ans = 11.0232 2.7183 0.0498 1.1052 • Valor absoluto: abs(variable) Calcula el valor absoluto de cada elemento. >> A=[-2 -3;-5 -4]; >> abs(A) ans = 2 3 5 4 • Redondeo: fix(variable) Redondea los elementos de la matriz al entero más cercano a cero. >> A=[.3 -.4 3.9;-4.5 -2.3 1.6]; >> fix(A) ans = 0 0 -4 -2
3 1
• Raíces: roots(variable) Calcula las raíces del polinomio cuyos coeficientes son los elementos de la variable, por esta razón la variable debe ser un vector. Los elementos del vector se consideran los coeficientes del polinomio ordenado en grado decreciente. >> A=[1 2.3 -4 9]; >> raices=roots(A) Página 6 de 13
Laboratorio Nº 1: Introducción al Matlab Señales y sistemas - 2006
raices = -3.9111 0.8055 + 1.2854i 0.8055 - 1.2854i Concatenación de funciones: Las diferentes funciones que utiliza Matlab se pueden concatenar. Ejemplo: >> A=[1 2.3 -4 9]; >> raices=fix(roots(A)) raices = -3.0000 0 + 1.0000i 0 - 1.0000i 3) VARABLES SIMBOLICAS Matlab posee la capacidad de trabajar con variables simbólicas. Esto permite manejar ecuaciones de manera simbólica y finalmente resolver reemplazando por un valor las distintas variables utilizadas. Además esto permite resolver integrales indefinidas y definidas de manera analítica. Para crear una variable simbólica usamos la función syms (también se puede utilizar la función sym). •
Definición de una función dependiente de variables simbólicas.
Ejemplo: >> syms x y >> z=3*x+exp(2*y) z= 3*x+exp(2*y) •
Asignación de valores a las variables simbólicas.
Ejemplo: >> x=3;y=1; •
Evaluación de la función z. Se realiza con el comando eval.
Ejemplo: >> eval(z) ans = 16.3891 •
Si tenemos una ecuación expresada de manera simbólica podemos simplificarla (en caso de que sea posible) utilizando el comando simple. Esta función utiliza diferentes formas de simplificación y muestra la que da la expresión simbólica más corta.
Ejemplos: >> sym x >> simple(cos(x)^2+sin(x)^2) ans = 1 Página 7 de 13
Laboratorio Nº 1: Introducción al Matlab Señales y sistemas - 2006 >> simple(x^3+3*x^2+3*x+1) ans = (x+1)^3 >> simple(cos(x)+(-sin(x)^2)^(1/2)) ans = cos(x)+i*sin(x) •
Las ecuaciones simbólicas se pueden integrar utilizando la función int.
-
int(expresión) realiza la integral indefinida de la expresión con respecto a la variable simbólica que tenga la misma. int(expresión, v) realiza la integral indefinida de la expresión con respecto a v (v debe ser una variable simbólica). Int(expresión, v, a, b) realiza la integral definida de la expresión con respecto a v, entre a y b.
-
Ejemplos: >> syms x y t >> A=1/(1+x^2); >> int(A) ans = atan(x) >> A=[cos(x*t) sin(x*t);-sin(x*t) cos(x*t)]; >> int(A,t) ans = [ sin(x*t)/x, -1/x*cos(x*t)] [ 1/x*cos(x*t), sin(x*t)/x] >> A=2*x^3+cos(y)+exp(-2*t*x); >> int(A,x,1,3) ans = 1/2*(80*t+4*cos(y)*t-exp(-6*t)+exp(-2*t))/t 4) GRAFICOS Matlab cuenta con varias herramientas para visualizar vectores y matrices de forma gráfica. Los dos comandos principales para graficar con plot y stem. El comando plot interpola los elementos adyacentes de manera que se visualice una gráfica continua, en cambio, el comando ítem muestra los elementos sin ningún tipo de interpolación. Por esta razón es común utilizar plot para graficar funciones y señales continuas y stem para señales discretas. Ambos comandos cuentan con varias opciones para personalizar la visualización de los gráficos. Se pueden varias los colores, los ejes, las etiquetas, los tamaños, la perspectiva, etc.
Página 8 de 13
Laboratorio Nº 1: Introducción al Matlab Señales y sistemas - 2006 Ejemplos: >> t=0:0.25:2*pi; >> y=sin(t); >> plot(t,y)
>> grid >> title('Funcion seno') >> xlabel('t [seg]') >> ylabel('y [volt]') >> text(2.5,0.7,'Señal continua')
>> t=0:0.25:2*pi; >> stem(t,y)
Página 9 de 13
Laboratorio Nº 1: Introducción al Matlab Señales y sistemas - 2006 Para realizar dos graficas en una misma figura podemos hacer lo siguiente: >> t=0:0.1:2*pi;y1=sin(t);y2=sin(2*t);plot(t,y1,'o',t,y2,'r--') >> grid >> title('Funciones seno de distintos argumentos') >> xlabel('tiempo') >> ylabel('y1,y2') >> text(2.1,0.95,'primer armonica') >> text(4.7,0.45,'segunda armonica')
5) SIMULINK Simulink es un software para el modelado, simulación y análisis de sistemas dinámicos. Soporta sistemas lineales y no lineales, modelados en tiempo continuo, discreto, o un híbrido entre ambos. Para el modelado Simulink provee una interfaz de usuario gráfica para construir los modelos en diagrama de bloques usando el mouse. Con esta interfaz se dibujan los modelos de la misma forma que se haría con lápiz y papel, por lo que no es necesario formular ecuaciones diferenciales o escribir código en ningún lenguaje. Se construyen los modelos utilizando los bloques que provee Simulink o los creados por el usuario. Se puede crear virtualmente cualquier sistema dinámico interconectando los bloques de la forma correcta. A continuación se muestran algunos ejemplos de distintos modelos. Ejemplo 1: Crear un modelo simple.
así se abrirá el 1) Para abrir Simulink topear “Simulink” en el workspace o utilizar el botón navegador de librerías de Simulink. En cada librería encontraremos los bloques con los que se construye cada modelo. 2) Para crear un modelo hacer clic en el botón de nuevo modelo de la barra de herramientas. Se abrirá la ventana de modelo. 3) Para este ejemplo utilizaremos las siguientes librerías: Sources (fuentes): distintos tipos de señales que utilizaremos como entradas a los modelos. Links (sumideros): dispositivos para la visualización o exportación de señales que utilizaremos como salidas o instrumentos de medición. 4) Seleccionar la librería Sources y arrastrar el bloque “Sine Wave” (generador de señal senoidal) a la ventana modelo. Página 10 de 13
Laboratorio Nº 1: Introducción al Matlab Señales y sistemas - 2006 5) Luego, de la librería Sinks, arrastrar el bloque “Scope”. 6) Interconectar la salida del generador de señal senoidal con la entrada del Scope. Para hacerlo, notar que al posicionar el puntero del mouse sobre la salida del generador, el puntero toma la forma de una cruz, entonces apretar y arrastrar hasta la entrada del Scope y soltar.
. Para comenzar la simulación hacer clic en el botón “Start Simulation” Luego al hacer doble clic en Scope veremos el resultado de la simulación. Al hacer doble clic sobre el bloque del generador de señales senoidales podremos editar varias propiedades de la señal que genera. Ejemplo 2: Integrador simple Veamos como es la respuesta de un integrador simple cuando su entrada es un escalón. Para ello debemos construir un modelo como el de la siguiente figura donde la entrada que excitará al mismo será un escalón. El escalón se encuentra en la librería Sources y el integrador en la librería Continuous.
Nota: hacer doble clic sobre Scope para ver como es la respuesta del integrador en el tiempo. Ejemplo 3: Ecuación Diferencial. En este ejemplo utilizaremos Simulink para resolver una ecuación diferencial simple y veremos la función que la verifica en el Scope.
dy = a ⋅ y(t ) + b ⋅ u (t ) dt Simulink no puede trabajar con variables simbólicas, por lo que hay que debemos asignarle valores numéricos a las constantes “a” y “b” de la ecuación anterior. Página 11 de 13
Laboratorio Nº 1: Introducción al Matlab Señales y sistemas - 2006 Para resolver esta ecuación simplemente tenemos que crear un modelo que tenga la forma de la ecuación. Necesitaremos un bloque sumador, dos ganancias y un integrador. Para la entrada u(t) introduciremos un bloque que la simule y para ver la salida usaremos el Scope. De la librería Math obtenemos el sumador: y las ganancias Ahora simplemente representamos la ecuación con bloques:
Para darle valores a las constantes a y b hacemos doble clic sobre cada bloque de ganancia y escribimos su valor. Para poder obtener la señal y(t) debemos integrar y´(t). Utilizamos el bloque integrador en el cual podemos fijar las condiciones iniciales de la ecuación diferencial al hacerle doble clic. Así, el modelo terminado queda de la siguiente forma (utilizando una constante como entrada):
Obviamente podemos obtener el resultado de la ecuación para cualquier entrada utilizando el bloque de entrada correspondiente y viendo su resultado en el Scope. Simulink no devuelve una solución algebraica, sino que da la forma de la solución gráficamente. Observación: se puede dar un valor simbólico como parámetro de algún bloque, por ejemplo, a un bloque de ganancia es posible asignarle el valor de ganancia “a”. para que Simulink pueda realizar la simulación hay que definir una variable “a” en el workspace asignándole el valor que le corresponda. Simulink tomará dicho valor para la simulación. 7) HELP Para buscar información sobre las diversas funciones y utilidades de Matlab se pueden usar distintas herramientas. En primer lugar Matlab cuenta con un menú de ayuda con gran cantidad de información. Sin embargo, en caso de que uno conozca el nombre del comando que quiere utilizar y necesita información específica sobre esa función conviene utilizar el comando help. Para usar este comando se debe tipear la palabra help en el workspace , y seguido el nombre del comando sobre el cual se requiere información. Página 12 de 13
Laboratorio Nº 1: Introducción al Matlab Señales y sistemas - 2006 Ejemplos: >> help plot >> help roots >> help ítem Si no se conoce el nombre específico de la función se puede usar el comando lookfor. El mismo busca qué funciones tiene la palabra clave de la función. Ejemplo: >> lookfor integrate POLYINT Integrate polynomial analytically. FINDSLOBJ creates and manages the Simulink/Stateflow Integrated Finder FNINT Integrate a function. INTWAVE Integrate wavelet function psi. INT Integrate. BLKINTEG This block integrates an input signal. The integrator may optionally be resettable.
Página 13 de 13