You are on page 1of 27

MATLAB

1. INTRODUCCIÓN.

Inicialmente fue desarrollado para facilitar el estudio en


cursos de teoría de matrices, álgebra lineal y análisis numérico
(MATrix LABoratory), pero actualmente va más allá, ya que
es un sistema interactivo y un lenguaje de programación con
capacidad de ejecución técnica y científica en general.

Su elemento básico es una matriz, que no requiere


dimensionamiento previo y se escribe tal como se hace
matemáticamente, lo cual aporta facilidad y rapidez de uso.

Es, además, una herramienta potente para la


representación gráfica.

Se utiliza en muchos campos, nos centraremos en su


utilidad como herramienta de control.

Seminario de Matlab - Pág. 1


2. FUNDAMENTOS DE MATLAB.

2.1. Cómo empezar a funcionar.


Nada más ejecutar el programa, aparece un indicador de
espera para la introducción de los comandos propios de
Matlab:

>>_

2.2. Expresiones.

Se introducen como se escriben matemáticamente:

>> a = 4/3 respuesta: a=


1.3333
se ha creado una variable "a" en el entorno de trabajo,
cuyo valor se puede consultar escribiendo su nombre:

>> a respuesta: a=
1.3333

Matlab reconoce hasta 19 caracteres como nombre de


variable y es sensible a las mayúsculas (a ≠ A).

Al introducir una expresión sin crear una variable, se


genera la variable ans que equivale a answer :

>> 4/3 respuesta: ans =


1.3333

Seminario de Matlab - Pág. 2


Para que no aparezca la respuesta en pantalla, se añade
un punto y coma (;) al final de la expresión:

>> b = 4+7;
>>

El comando who enseña las variables de memoria:

>>who
a b ans

Si la expresión no cabe en una línea se utilizan tres


puntos seguidos (...) y se continúa en la siguiente línea:

>> p = 1 + 2 + 3 + 4 + ...
5+6+7

Las expresiones pueden formarse con secuencias de


números, operadores, funciones y variables definidas
previamente:

>> c = a * ( b - 1) respuesta: c=
13.3333

Operadores: Los usuales más: * (multiplicación)


\ (división por la izquierda)
^ (potencia)

Variables predefinidas: i, j, pi, Inf, NaN.

Seminario de Matlab - Pág. 3


Matlab contiene funciones que se pueden incorporar a
expresiones:

>> y = sqrt(1+4*i) respuesta: y=


1.6005 + 1.2486 i

Se obtiene información general con help y ayuda sobre


una función, operador, etc. especificando el nombre:

>> help sqrt

2.3. Creación de ficheros de trabajo.

Un fichero de trabajo (script) contiene secuencias de


comandos ejecutables en el entorno de trabajo Matlab.

Se crean con un editor de texto externo, y se nombran


con extensión ".m".
Cuando se escribe el nombre del fichero en el indicador
de Matlab, se ejecutan los comandos que contiene.

Por ejemplo, sea el siguiente fichero de nuestro directorio:


% Ejemplo1.m
% Ejecuta magnitud y fase de la función de transferencia
% G(jw) = 1/(jw + 2) evaluada en w = 1.
w = 1;
G = 1 / (j*w + 2);
mag = abs(G)
fase = atan ( imag(G) / real(G) )

Seminario de Matlab - Pág. 4


Cuando escribamos el nombre de este fichero en el
indicador de Matlab, la respuesta será:

>> Ejemplo1
mag =
0.4472
fase =
-0.4636

Todas las variables creadas en un fichero script


permanecen en el espacio de trabajo una vez ejecutado éste.

>> G respuesta G=
0.4000 - 0.2000 i

Las líneas que empiezan con % son comentarios.

2.4. Matrices, vectores y polinomios.

Una matriz se introduce listando sus elementos entre


corchetes [ ]:
- Los elementos de una fila (columnas) se separan por
comas o blancos.
- Las filas se separan por punto y coma ó CR.

>> A = [1 2; 3 4] respuesta: A=
1 2
3 4

Seminario de Matlab - Pág. 5


Los elementos de una matriz pueden ser cualquier
expresión Matlab.

Se reconocen sólo matrices rectangulares, con igual


número de columnas en cada fila.

Para conocer la dimensión de una matriz se utiliza la


función size :

>> size(A) respuesta: ans =


2 2

Los elementos individuales de una matriz se referencian


mediante índices entre paréntesis:

>> A(2,2) = 5 respuesta: A=


1 2
3 5

Al añadir un elemento en una posición cuyos índices son


superiores al tamaño de la matriz, se insertan ceros
automáticamente para mantenerla rectangular:

>> A(3,3) = 6 respuesta: A=


1 2 0
3 5 0
0 0 6

Seminario de Matlab - Pág. 6


Un vector es una matriz de dimensión 1xn ó nx1 :

>> v = [sin(pi/3) -7^3 a+1]


v=
[0.8660 -343.0000 2.3333]

Se pueden crear vectores especiales utilizando ":"

>> n = 1:10; genera un vector fila con elementos


de 1 a 10, con incremento 1.
>> nuevo = 1:0.25:2
nuevo =
1.0000 1.2500 1.5000 1.7500 2.0000

La función logspace(x,y,n) genera vectores con n


elementos espaciados logarítmicamente entre 10 x y 10 y .
La función linspace(x,y,n) genera vectores con n
elementos linealmente espaciados.

Se pueden manipular matrices de forma muy flexible:

- Añadir una fila a la matriz A :

>> A = [A; [7 8 9]] respuesta: A=


1 2 0
3 5 0
0 0 6
7 8 9

Seminario de Matlab - Pág. 7


- Extraer una submatriz de A:

>> B = A(2:3,1:3) respuesta: B=


3 5 0
0 0 6

- Se utiliza ":" como índice para designar "todos los elementos"

>> A(1,:) devuelve la 1ª fila entera.


>> A(:) todos los elem. de A en una única columna.

Se pueden utilizar también vectores de 0´s y 1´s como


índices para seleccionar ó no elementos de una matriz:

>> B = B(:,[0 1 1]) respuesta: B=


5 0
0 6
Los vectores de 0´s y 1´s pueden ser creados con
operadores relacionales:

>> L = A(:,3) > 5;


>> A = A(L,:); reemplaza las filas de A cuyos
elementos de la 3ª columna sean > 5.

Funciones que generan matrices especiales:


diag: genera una matriz diagonal.
eye: genera la matriz identidad (1´s en la diagonal)
zeros, ones, rand, ...

Seminario de Matlab - Pág. 8


Los polinomios se describen en Matlab mediante
vectores con los coeficientes del polinomio en orden de
potencias decrecientes:

Por ejemplo, p = s2 + 5s + 6
>> p = [1 5 6]

Se evalúan con la función polyval :

>> polyval(p,1) respuesta: ans =


(evalúa p en s=1) 12

Las raíces se obtienen con la función roots :

>> r = roots(p) respuesta: r=


-3
-2

La función poly permite construir polinomios a partir de


sus raíces:

>> t = poly([-4 -5]) respuesta: t=


1 9 20

Seminario de Matlab - Pág. 9


2.5. Operaciones con matrices.

La aritmética es la misma que la utilizada con escalares:

>> B = [5,0; 0,6]; D = [1,0; 0 2];


>> B + D respuesta: ans =
6 0
0 8
>> B * D respuesta: ans =
5 0
0 12

La división puede ser izquierda (\) ó derecha (/):

P.x = Q x = P-1.Q x=P\Q


y.P = Q y = Q.P-1 y=Q/P

Los índices tienen que coincidir, y en caso de un escalar


(1x1), se realiza la operación del escalar con cada uno de los
elementos de la matriz.

Para obtener la traspuesta de una matriz ó vector se


utiliza el apóstrofe (´):

>> A = [1,2;3,4];
>> A´ respuesta: ans =
1 3
2 4

Seminario de Matlab - Pág. 10


Funciones Matlab para operar sobre matrices:
det(X), inv(X), rank(X), eig(X), expm(x), ...
Para operar sobre una matriz ó un vector, elemento a
elemento, se utiliza un punto delante del operador:

>> Datos = [1 2 3];


>> Datos.^2 respuesta: ans =
1 4 9

>> Datos .* [4 5 6] respuesta: ans =


4 10 18

Algunas funciones operan elemento a elemento


automáticamente, por ejemplo: exp, abs, sqrt, real, log.

Se pueden utilizar también operadores relacionales y


lógicos con matrices.

2.6. Creación de funciones.

Las funciones son secuencias de sentencias que ejecutan


una tarea independiente.

function [argumentos salida] = nombre(argumentos entrada);

Una función se diferencia de un fichero script :


- básicamente en su primera línea.
- puede ser usada como parte de una expresión
- las variables generadas por una función son locales.

Seminario de Matlab - Pág. 11


Control de flujo: for, while, if, break, error.
3. GRÁFICOS.

Matlab suministra una importante colección de funciones


gráficas debido a la facilidad de comprensión que aporta la
percepción visual de datos.

3.1. Creación de gráficos bidimensionales.

La función plot genera gráficos bidimensionales:

PLOT Dibuja vectores ó matrices.

PLOT(X,Y) plots vector X versus vector Y. If X or


Y is a matrix, then the vector is plotted versus the rows or
columns of the matrix, whichever lines up.

PLOT(X1,Y1,X2,Y2) is another way of producing


multiple lines on the plot.

PLOT(X1,Y1,':',X2,Y2,'+') uses a dotted line for the


first curve and the point symbol + for the second curve. Other
line and point types are:

solid - point . red r


dashed -- plus + green g
dotted : star * blue b
dashdot -. circle o white w

Seminario de Matlab - Pág. 12


x-mark x invisible i

PLOT(Y) plots the columns of Y versus their index.


PLOT(Y) is equivalent to PLOT(real(Y),imag(Y)) if Y is
complex.

In all other uses of PLOT, the imaginary part is ignored.

Una vez dibujado el gráfico ginput permite obtener las


coordenadas del punto del gráfico donde se hace clic con el
ratón:

>> [x, y] = ginput;

Otros comandos para gráficos bi-dimensionales son:

loglog, semilogx, semilogy : escalan los ejes logarítmicamente.


polar : coordenadas polares.
bar, stairs : gráficos de barras y escalonados.

3.2. Adaptación de gráficos.

Incluye nombrar los ejes (xlabel, ylabel ), poner título


(title ), escribir texto (gtext ), cambios de escala, etc. para
aportar legibilidad.

El comando subplot permite dividir la ventana de


gráficos en varias partes.

Seminario de Matlab - Pág. 13


Otros comandos para adaptar gráficos son hold y axis:

HOLD Hold the current graph on the screen.


Subsequent PLOT commands will add to the plot, using the
already established axis limits, and retaining the previously
plotted curves.
HOLD ON turns on holding, HOLD OFF turns it off, and
HOLD,by itself, toggles the HOLD state.

AXIS Manual axis scaling on plots. Typing AXIS by itself


freezes the current axis scaling for subsequent plots. Typing
AXIS again resumes auto-scaling. AXIS returns a 4 element
row vector containing the [x_min, x_max, y_min, y_max]
used on the last plot.
AXIS(V) where V is a 4 element vector sets the axis
scaling to the prescribed limits.

3.3. Gráficos tridimensionales.

Existen dos formas: contour y mesh .

Ejemplo: Dibujar z = x4 + (y/2)4.


»x = [-1:.1:1];
»y = [-2:.1:2];
»[X,Y] = meshdom(x,y);
»z = X.^4 + (Y/2).^4;
»subplot(121), contour(z);subplot(122), mesh(z)

Seminario de Matlab - Pág. 14


40

30

20

10

20

Cada curva del dibujo del contorno representa los valores


de x e y que corresponden a un valor fijo de z.

El plano xy coincide con el plano de la hoja, y el eje z


estaría representado hacia fuera.

Como los valores de z van creciendo, las curvas


encierran áreas cada vez mayores.

El dibujo con mesh ayuda a ver la forma tridimensional


asignando alturas a los contornos.

Seminario de Matlab - Pág. 15


4. HERRAMIENTAS DE CONTROL.

4.1. Introducción.

Matlab tiene una gran colección de funciones muy útiles


y directamente utilizables para la ingeniería de control y teoría
de sistemas: aritmética compleja, autovalores, inversión de
matrices, funciones de transferencia, etc.

Las herramientas de control (Control System Toolbox)


son una colección de algoritmos, expresados en ficheros ".m"
en su mayoría, que implementan técnicas de diseño, análisis y
modelado de sistemas de control.

Los sistemas de control se pueden modelar como


funciones de transferencia ó en forma de espacio de estado,
permitiendo técnicas tanto clásicas como modernas.

Se manejan sistemas en tiempo contínuo y discreto.

Son importantes las herramientas para conversión entre


modelos.

Existen funciones para calcular respuesta en tiempo,


respuestas de frecuencia y medidas del lugar de las raíces, así
como sus representaciones gráficas.

Hay funciones que permiten la colocación de polos,


control óptimo y estimación.

Seminario de Matlab - Pág. 16


4.2. Modelos de sistemas.

Matlab trabaja solamente con una clase de objetos: una


matriz numérica rectangular con posibilidad de elementos
complejos.

Modelos de sistemas lineales invariantes en el tiempo


(LTI).

Formas de representar diferentes tipos de modelos de


sistemas:
- Espacio de estado.
- Función de transferencia.
- Ganancia, ceros y polos.
- Desarrollo en fracciones parciales.
- Tiempo contínuo.
- Tiempo discreto.

4.2.1. Espacio de estado.

Un sistema de ecuaciones diferenciales lineales


invariantes en el tiempo se puede representar siempre como un
conjunto de ecuaciones diferenciales de primer orden.

Seminario de Matlab - Pág. 17


En forma de matrices ó espacio de estados, las
ecuaciones se pueden escribir como:

xÝ= A⋅ x + B⋅u
y = C ⋅x + D⋅u

donde u : vector de n.u entradas de control.


x : vector de estado de n.s elementos.
y : vector de n.y salidas.

A, B, C, D: matrices tratadas como variables individuales.

Por ejemplo, sea un sistema de 2º orden que consiste en un par


de polos con frecuencia natural wn = 1.5 y factor de
amortiguación ζ = 0.2

>> wn = 1.5;
>> z = 0.2;
>> a = [ 0 1
-wn^2 -2*z*wn ];
>> b = [ 0
wn^2 ];
>> c =[ 1 0];
>> d = 0;

La representación de espacio de estados es el modelo LTI


más natural en Matlab. Para modelos MIMO es el único
modelo conveniente con el que trabajar.

Seminario de Matlab - Pág. 18


4.2.2. Función de transferencia.

Una representación equivalente del sistema de espacio de


estados es la descripción de la función de transferencia
mediante transformadas de Laplace:

Y(s) = H(s) . U(s)

donde H(s) = C . (s.I - A) -1.B + D

En el caso general, H(s) requiere una matriz


tridimensional para ser representada:

Dimensión de H(s) : n.y filas x n.n columnas x n.s+l capas

Como las variables en Matlab son de dos dimensiones,


representamos el sistema en sentido SIMO, es decir, una única
entrada de u :

N(s) N(1)⋅s nn−1 + N(2)⋅snn−2 +...+N(nn)


H(s) = =
q(s) q(1)⋅snq−1 + q(2)⋅snq−2 +...+q(nq)

donde q : vector fila que contiene los coeficientes del


denominador en potencias descendentes de s .
N : matriz de coeficientes del numerador, con tantas
filas como salidas haya en el vector y .

Seminario de Matlab - Pág. 19


Por ejemplo, sea el sistema SIMO:

⎡ 3s + 2 ⎤
⎢ ⎥
3
⎣ s + 2s + 5⎦
H(s) =
3s3 + 5s2 + 2s +1

Para introducirlo en Matlab escribimos:

>> num = [0 0 3 2
1 0 2 5];
>> den = [3 5 2 1];

Seminario de Matlab - Pág. 20


4.2.3. Ceros - Polos - Ganancia.

Una función de transferencia se puede expresar en forma


factorizada ó de ceros, polos y ganancia:

H(s) = Z(s) = k ⋅ (s + Z(1))(s + Z(2))⋅⋅⋅(s + Z(n))


p(s) (s + p(1))(s + p(2))⋅⋅⋅(s + p(n))

En Matlab:
- las raíces de un polinomio se almacenan en vectores
columna.
- los coeficientes de un polinomio se almacenan en vectores
fila.

Por tanto, en forma factorizada:

p : vector columna que contiene los polos del denominador de


la función de transferencia.

Z : matriz cuyas columnas contienen los ceros del numerador.


Habrá tantas como salidas del vector y .

k : vector columna que contiene las ganancias de la función de


transferencia de cada numerador (Para sistemas SISO, es
escalar).

Seminario de Matlab - Pág. 21


Por ejemplo, sea el sistema SIMO:

⎡ 3(s +12) ⎤
⎢ ⎥
⎢⎣ 4(s +1)(s + 2)⎥⎦
H(s) = Z(s) =
p(s) (s + 3)(s + 4)(s + 5)

En Matlab se introduce:

>> k = [3; 4];


>> z = [-12 -1; Inf -2];
>> p = [ -3; -4; -5];

4.2.4. Fracciones parciales.

Una función de transferencia se puede expresar también


en desarrollo de fracciones parciales ó forma residual, que
para un sistema SISO es:

H(s) = r(1) + r(2) +⋅⋅⋅+ r(n) + k(s)


s − p(1) s − p(2) s − p(n)

donde p : vector columna que contiene los polos


r : vector columna con los residuos correspondientes a
los polos de p .
k : vector fila con las partes incorrectas de la función
de transferencia original.

La función residue convierte la función de transferencia


en (y desde) desarrollo en fracciones parciales.

Seminario de Matlab - Pág. 22


4.2.5. Conversiones entre modelos.

Hay un conjunto de funciones que permiten convertir


modelos LTI entre sus distintas representaciones:

[num,den] = ss2tf(a,b,c,d)
[z,p,k] = ss2zp(a,b,c,d)
[a,b,c,d] = tf2ss(num,den)
[z,p,k] = tf2zp(num,den)
[a,b,c,d] = zp2ss(z,p,k)
[num,den] = zp2tf(z,p,k)
[r,p,k] = residue(num,den) %tf2r
[num,den] = residue(r,p,k) %r2tf

Seminario de Matlab - Pág. 23


4.3. Funciones para el análisis de sistemas.

- Las funciones impulse y step calculan la respuesta


impulso y escalón de sistemas lineales en tiempo contínuo.

Dado el sistema:
xÝ= A⋅ x + B⋅u
y = C ⋅x + D⋅u

Y = impulse(A, B, C, D, u, t): devuelve la respuesta del


sistema a un impulso unitario aplicado a la entrada u-ésima.

t : vector tiempo, espaciado regularmente, que especifica el eje


de tiempo sobre el que se halla la respuesta al impulso.

Y : matriz que devuelve la función, con tantas columnas como


salidas haya en y , y tantas filas como la longitud de t .

Con dos argumentos a la izquierda, devuelve también la


historia de estados en el tiempo.

Y = step(A, B, C, D, u, t): devuelve la respuesta del


sistema a un escalón unitario sobre la entrada u-ésima.

Se pueden utilizar también con modelos polinómicos en


función de transferencia:

Y = impulse(num,den, t)
Y = step(num,den, t)

Seminario de Matlab - Pág. 24


Ejemplos:

Dibujar la respuesta escalón de 0 a 10 segundos de un


sistema de 2º orden con frecuencia natural wn=1 y factor de
amortiguación ζ=0.2

>>[a, b, c, d] = ord2(1,.2);
>>t=0:.1:10;
>>y=step(a,b,c,d,1,t);
>>plot(t,y), title(´Respuesta escalón´)

Seminario de Matlab - Pág. 25


- La función bode calcula la respuesta en frecuencia de
Bode de sistemas LTI en tiempo contínuo.

Los gráficos "Bode" se utilizan para analizar las


propiedades del sistema como margen de ganancia, de fase,
ancho de banda, rechazo de perturbaciones y estabilidad.

[mag, fase] = bode(A,B, C, D, u, w) calcula la respuesta


en frecuencia del sistema a partir de la entrada u-ésima.

w : vector que especifica las frecuencias (en radianes) en las


que se va a evaluar la respuesta de Bode.

mag, fase : matrices donde se devuelve la respuesta en


frecuencia, con y columnas, y longitud(t) filas:

G(s) = C (sI - A)-1B + D mag(w) = abs(G(jw))


fase(w) = angle(G(jw))

[mag, fase] = bode(num, den, w) : con modelos descritos


en función de transferencia: G(s) = num(s) / den(s)

- La función series produce un sistema en forma de


espacio de estados con las salidas de un sistema conectadas a
las entradas del otro: u2 = y1

[A, B, C, D] = series(A1,B1,C1,D1,A2,B2,C2,D2)

Seminario de Matlab - Pág. 26


- La función parallel produce un sistema en espacio de
estados que consiste en la conexión en paralelo de dos
sistemas, es decir la suma de las salidas: y = y1 + y2

[A, B, C, D] = parallel(A1,B1,C1,D1,A2,B2,C2,D2)

- La función cloop genera una descripción de un sistema


de lazo cerrado (con retroalimentación unitaria) a partir de un
sistema de lazo abierto.

- La función feedback se utiliza para cerrar el bucle para


cualquier clase de retroalimentación no unitaria.

Seminario de Matlab - Pág. 27

You might also like