Está en la página 1de 65

TEORIA DE CONTROL

Didier Giraldo B. e Ivan Tabares G.

1997
APENDICE B
PROGRAMA MATLAB

B.1 Introduccion
Programa que sirve para calculo numerico y visualizacion de alto desarrollo. El ambi-
ente es tal que los problemas y soluciones se expresan como se escriben matematica-
mente, sin la tradicional programacion. Es un sistema interactivo cuyo elemento
basico de datos es una matriz que no requiere dimensionamiento.
MATLAB tambien tiene cajas de herramientas, toolboxes, que resuelven clases
particulares de problemas tales como procesamiento de senales, diseno de sistemas de
control, simulacion de sistemas dinamicos, identificacion de sistemas, redes neurales,
sistemas de control robustos, optimizacion y otros (Matematica simbolica).
La cualidad mas importante del MATLAB es que es facilmente extendible. Esto
permite crear nuestras propias aplicaciones.
El contenido de este apendice describe:
a) Como entrar matrices simples, los elementos para construirlas, declaraciones y
variables del MATLAB.
b) Como conseguir informacion del espacio de trabajo y como guardarla.
c) Numeros y expresiones aritmeticas.
d) Formato de salida.
e) Ayuda.
f) Funciones del MATLAB.

B.2 Entrando matrices simples


El MATLAB trabaja fundamentalmente con una clase de objeto, una matriz numerica
rectangular con elementos posiblemente complejos.
Se pueden entrar de diferentes maneras:
a) Una lista explcita de elementos.
b) Generar matrices usando declaraciones y funciones propias del MATLAB.

297
298 PROGRAMA MATLAB

c) Crear matrices en archivos M.


d) Cargar matrices de archivos de datos externos.
El lenguaje MATLAB no contiene declaraciones DIMENSION ni TYPE. Separa
la memoria necesaria para el almacenamiento.
Entrando una lista explcita de elementos se siguen las siguientes convenciones:
a) Se separa la lista de elementos con comas (,) o espacios en blanco.
b) El punto y coma (;) se usa para indicar los finales de las filas.
c) El comienzo y el fin de la matriz se indica con corchetes [ ].

Ejemplo B.1 .

A = [1 2 3; 4 5 6; 7 8 9]

Esta declaracion genera la siguiente salida:

A=
1 2 3
4 5 6
7 8 9
La matriz A es guardada por el MATLAB para uso posterior.
El punto y coma (;) puede ser reemplazado por el RETURN o ENTER.
Se pueden entrar matrices desde archivos de disco si su nombre tiene extension m.
Si un archivo llamado gena m tiene las siguientes lneas de texto:

A= [1 2 3
4 5 6
7 8 9]
entonces la declaracion gena lee el archivo y genera A.

B.3 Elementos de las matrices


Estos pueden ser cualquier expresion del MATLAB.

Ejemplo B.2 .

x = [1.3 sqrt (3) (1 + 2 + 3) 4/5]

resulta en:

x = 1.3000 1.7321 4.8000

los elementos de la matriz pueden ser referenciados con ndices dentro de parentesis.
B.4 Declaraciones y variables del MATLAB 299

Ejemplo B.3 .

x (5) = abs (x (1))

produce:

x = 1.3000 1.7321 4.8000 0 1.3000

Note que el tamano de x se incrementa automaticamente para acomodar el nuevo


elemento y que los elementos no definidos se igualan a cero.
Se pueden construir matrices grandes usando matrices pequenas como elementos. Por
ejemplo, para adicionar otra fila a la matriz A :

r = [10 11 12] ;

A = [A ; r]

que resulta en:

A= 1 2 3
4 5 6
7 8 9
10 11 12
Se puede extraer matrices pequenas de matrices grandes usando dos puntos (:).

Ejemplo B.4 .

A = A (1 : 3, :) ;

toma las tres primeras filas y todas las columnas de la A actual.

B.4 Declaraciones y variables del MATLAB


El MATLAB es un lenguaje de expresion. Es decir, interpreta y evalua las expresiones
escritas. Las declaraciones son frecuentemente de la forma:
variable = expresion
o simplemente
expresion.
Las expresiones se pueden componer de operadores y otros caracteres especiales, fun-
ciones y nombres de variables. La evaluacion de la expresion produce una matriz la
cual se muestra en la pantalla y se asigna a la variable.
Si se omite el nombre de la variable y el signo =, MATLAB automaticamente crea
una variable con el nombre ans.
300 PROGRAMA MATLAB

Ejemplo B.5 .

1900/81

produce:

ans = 23.4568

Una declaracion normalmente termina con RETURN o ENTER. Sin embargo,


si el ultimo caracter es punto y coma (;) antes del RETURN o ENTER el
resultado no se muestra en la pantalla pero s se realiza la asignacion.

Ejemplo B.6 .

p = eig (A) ;

halla los valores propios de A pero no los muestra en pantalla.


Si es necesaria mas de una lnea para la expresion se puede usar (3 puntos) y el
RETURN para indicar que continua en la proxima lnea.
Se pueden formar variables y nombre de funciones con una letra, seguida por cualquier
numero de letras y digitos. MATLAB recuerda solo los primeros 19 caracteres de un
nombre. Ademas, distingue entre mayusculas y minusculas. Todos los nombres de
funciones deben ser en minusculas.
As, inv (A) invierte A, pero INV (A) se refiere a una funcion no definida.

B.5 Informacion sobre el espacio de trabajo


Para listar las variables en el espacio de trabajo escriba:
who . Para ver el tamano de las variables se puede usar whos . Cada elemento
de una matriz real requiere 8 bytes de memoria.
Las variables ans y eps son permanentes y no se pueden borrar. eps es una tolerancia
para determinar aspectos tales como singularidades y rango. eps = 252 2.221016 .
Se le puede reasignar otro valor, incluyendo cero.
El MATLAB tiene la facilidad help. Ensayar el comando help lookf or. As como
help what y help which.

B.6 Como terminar el programa y guardar el


espacio de trabajo
Para terminar el programa escribir quit o exit . Antes de parar se puede guardar
el espacio de trabajo con el comando save , el cual guarda todas las variables en un
archivo del disco llamado matlab.mat.
B.8 Formato de salida 301

La proxima vez que se invoque el MATLAB se puede ejecutar el comando load para
recuperar el espacio de trabajo desde matlab.mat. save y load se pueden usar con
otros nombres de archivos, o tambien guardar unicamente las variables que se deseen.
As, save temp x y z guarda las variables x, y y z en el archivo llamado temp.mat.
load temp , recupera todas las variables del archivo temp.mat. load y save pueden
tambien importar y exportar archivos de datos ASCII.

B.7 Numeros y expresiones aritmeticas


Usa notacion convencional decimal, con el punto decimal opcional. Se puede incluir la
potencia 10 como un factor de escala o una unidad compleja como un sufijo. Ejemplos
de numeros son:

3 99 0.001

9.6397238 1.602e 20 6.022e 23

2i 3.14159i 3e5i

La precision relativa de los numeros es eps que equivale a, aproximadamente, 16


digitos decimales significativos. El rango es de 10308 hasta 10308 .
Se pueden construir expresiones con las operaciones aritmeticas usuales y con reglas
de precedencia: + (suma), (resta), (multiplicacion), / (division por la derecha),
\ (division por la izquierda), (potenciacion).
Los parentesis sirven para afectar la precedencia.
La funcion pi calcula (usa 4 atan (1)).
La funcion Inf es usada para infinito.

Ejemplo B.7 .

s = 1/0 = Inf

La variable NaN implica no un numero. Calculos como Inf /Inf o 0/0 la producen.
MATLAB maneja numeros complejos, indicados por las funciones especiales i y j, en
todas sus operaciones y funciones.

Ejemplo B.8 .

A = [1 + 5i 2 + 6i; 3 + 7i 4 + 8i]

Un nombre de una funcion interna puede ser un nombre de una variable, pero en este
caso no es disponible la funcion interna dentro del actual area de trabajo hasta que la
variable no sea borrada. Si se usa i y j como variables y se sobreescribe sus valores,
se puede generar una nueva unidad de complejos y usarse de la manera usual:
302 PROGRAMA MATLAB

ii = sqrt (1)

z = 3 + 4ii

B.8 Formato de salida


El comando f ormat afecta la forma en que se muestran las matrices en la pantalla,
no como se calculan o guardan. MATLAB desarrolla todos los calculos en doble
precision.
Si todos los elementos de una matriz son exactos, la matriz se muestra en un formato
sin puntos decimales.
Si por lo menos un elemento de la matriz no es un entero exacto, se dispone de varios
formatos de salida. El formato por defecto es el short, el cual muestra aproximada-
mente 5 dgitos decimales significativos. Los otros formatos muestran mas dgitos
significativos o usan notacion cientfica.

Ejemplo B.9 .

x = [4/3 1.2345e 6]

Los formatos, y la salida resultante para este vector, son:

format short
1.3333 0.0000

format short e
1.3333e + 00 1.2345e 06

format long
| {z 3} 0.00000123450000
1. 3333
14

format long e
1. 3333
| {z 3} e + 00 1.23450 0 e 06
15
B.11 Division de matrices 303

format bank
1.33 0.00

f ormat hex
f ormat +

Con los formatos short y long si el elemento mas grande de una matriz es mayor que
1000 o menor que 0.001, la matriz total se muestra con un factor de escala comun.

B.9 Funciones
Gran parte de la potencia del MATLAB proviene de su extensivo conjunto de fun-
ciones. Algunas son intrnsecas, otras son disponibles en la librera de archivos exter-
nos tipo m, distribuda con el MATLAB (las herramientas). El usuario puede crear
sus propias funciones para aplicaciones mas especializadas (posteriormente se hablara
de los archivos m).
Usar el help para ver las diferentes categoras de funciones analticas disponibles
en el MATLAB (matematica elemental, funciones especiales, matrices elementales,
especiales, ).
Las funciones pueden tener varios argumentos de entrada y varias salidas. Ejemplos:
theta = atan2 (y, x), usa 2 argumentos de entrada.
[V, D] = eig (A), retorna 2 matrices, V y D, con los vectores y valores propios de la
matriz A, respectivamente. Las salidas son delimitadas con corchetes [ ] y separadas
con comas.
[y, i] = max (x), regresa el maximo valor del vector x en y, y el ndice respectivo en i.
MATLAB nunca modifica la entrada o argumentos de entrada a la funcion. Siempre
retorna las salidas de una funcion en los argumentos del miembro izquierdo.

B.10 Operaciones matriciales


0
El caracter (prima o apostrofe) denota la transpuesta de una matriz. Si z es una
0
matriz con complejos, z esla transpuesta de la conjugada z. Para la transpuesta no
0 0
conjugada, usar z. o conj z .
+ y denotan suma y resta de matrices siempre y cuando tengan las mismas dimen-
siones. Si uno de los operandos es un escalar, este es sumado o restado de todos los
elementos del otro operando.

Ejemplo B.10 .

y = [1 2 3] 1 = [0 1 2]
304 PROGRAMA MATLAB

denota multiplicacion de matrices. Valida si hay conformabilidad en la multipli-


cacion de las matrices.

B.11 Division de matrices


Se usan 2 smbolos: \ y /. Si A es cuadrada no singular, A\B y B/A corresponden
formalmente a la multiplicacion por la izquierda y por la derecha de B por la inversa
de A, es decir, inv (A) B y B inv (A). Sin embargo el resultado se obtiene sin el
calculo de la inversa. En general:

x = A\B es una solucion a A x = B


x = B/A es una solucion a x A = B

Ap = A A} , si p es un entero > 1
| A {z
p
Ap = V D. p/V , para otros valores de p

donde:

[V, D] = eig (A)

B.12 Funciones matriciales


MATLAB considera expresiones como exp (A) y sqrt (A) como operaciones sobre cada
uno de los elementos de la matriz. Se pueden calcular tambien funciones trascenden-
tales matriciales, tales como la matriz exponencial y la matriz logaritmo, las cuales
se definen solo para matrices cuadradas (son generalmente difciles de calcular).
Una funcion matematica trascendental se interpreta como una funcion matricial si
se adiciona una m al nombre de la funcion, ejemplo: expm (A) y sqrtm (A). Hay 3
definidas expm, logm y sqrtm.
Otras funciones matriciales elementales incluyen:
poly, polinomio caracterstico.
det, determinante.
trace, la traza, y otras.

B.13 Operaciones sobre arreglos


Esto se refiere a operaciones aritmeticas sobre cada elemento de una matriz.
0
Un punto (.) precediendo un operador (, \, /, , ) indica una operacion sobre
arreglos.
B.15 Operaciones logicas 305

Para suma y resta, las operaciones sobre arreglos y sobre matrices son las mismas,
as + y se pueden considerar como operaciones sobre matrices o arreglos.
. denota la multiplicacion de arreglos.

Ejemplo B.11 .
Si:
x = [1 2 3] ; y = [4 5 6] ;
entonces:
z = x. y = [4 10 18]
A ./B y A .\B dan los cocientes de los elementos individuales.

Ejemplo B.12 .

z = x.\y = [4.0000 2.5000 2.0000]


. denota potencias de arreglos.

Ejemplo B.13 .
Para el x y y anterior:
z = x.y = [1 32 729]

z = x.2 = [1 4 9] (el exponente es un escalar)

z = 2. [x y] = [2 4 8 16 32 64] (la base es un escalar)

B.14 Operaciones relacionales


Se dispone de 6 operadores relacionales para comparar 2 matrices de iguales dimen-
siones.
< menor que.
<= menor o igual que.
> mayor que.
>= mayor o igual que.
== igual.
= no igual.
MATLAB compara los pares de elementos correspondientes. El resultado es una
matriz con unos y ceros, en donde uno representa cierto y cero falso.

Ejemplo B.14 .

2 + 2 = 4 es simplemente cero
306 PROGRAMA MATLAB

B.15 Operaciones logicas


Los operadores &, | y son los operadores logicos Y , O y N O.
C = A & B es una matriz cuyos elementos son unos en donde A y B tengan elementos
diferentes de cero, y ceros en donde cualquiera tenga un cero. A y B deben tener las
mismas dimensiones, a menos que una sea un escalar. Un escalar puede operar con
otro escalar o una matriz.
C = A | B es una matriz cuyos elementos son unos en donde A o B tengan elementos
diferentes de cero, y ceros en donde ambas tengan ceros. A y B deben tener las
mismas dimensiones, a menos que una sea un escalar.
B = A es una matriz cuyos elementos son unos en donde A tiene ceros y ceros en
donde A tiene elementos diferentes de cero.
Las funciones any y all son utiles con operaciones logicas.
any (x) retorna 1 si cualquiera de los elementos de x son diferentes de cero, retorna
cero de otra manera.
all (x) retorna 1 solo si todos los elementos de x son diferentes de cero. Estas funciones
son utiles particularmente en declaraciones como:
if all (A < 0.5)
haga algo
end
Si los argumentos de any y all son matrices, retorna un vector fila con el resultado
para cada columna.
Para las siguientes funciones relacionales y logicas:
any, all, find, exist, isnan, isinf , f inite, isempty, isstr, isglobal, issparse, usar
help para saber que hacen.

B.16 Funciones matematicas


Un conjunto de funciones matematicas elementales se aplican a los arreglos.

Ejemplo B.15 .

A = [1 2 3; 4 5 6]

1 1 1
B = cos (pi A) =
1 1 1
MATLAB incluye todas las funciones trigonometricas y exponenciales:
sin, cos, tan, asin, acos, atan, atan2, sinh, cosh, tanh, asinh, acosh, atanh.
Incluye estas funciones elementales:
abs, angle, sqrt, real, imag, conj, round, fix, floor, ceil, sign, rem, gcd, lcm, exp, log,
log10.
Algunas funciones especiales suministran capacidades mas avanzadas:
bessel, beta, gamma, rat, erf , erf inv, ellipk, ellipj.
As como las funciones elementales, las especiales tambien operan sobre arreglos
cuando los argumentos son matrices.
B.18 Referencia a los elementos de una matriz 307

B.17 Manipulacion de vectores y matrices


Generacion de vectores.
La declaracion x = 1 : 5 genera un vector fila que contiene los numeros de 1 a 5 con
incrementos unitarios. Es decir:

x=12345
Se pueden usar incrementos diferentes a la unidad:

y = 0 : pi/4 : pi

resulta en:

y = 0.0000 0.7854 1.5708 2.3562 3.1416

Los incrementos tambien pueden ser negativos:

z = 6 : 1 : 1

da:
z=654321

La notacion (:) permite la generacion facil de tablas. Para obtener una tabla en forma
vertical se traspone el vector fila obtenido de la notacion (:), se calcula una columna
de los valores de una funcion y luego se forma la matriz de las 2 columnas.

Ejemplo B.16 .
0
x = (0.0 : 0.2 : 3.0) ;
y = exp (x) . sin (x) ;
[x y]
produce:

ans = 0.0000 0.0000


0.2000 0.1627
.. ..
. .
3.0000 0.0070
Otras funciones para generar vectores son: logspace, la cual genera vectores uniforme
y logartmicamente espaciados, y linspace, la cual permite especificar el numero de
puntos, mejor que el incremento:

k = linspace (pi, pi, 4)

k = 3.1416 1.0472 1.0472 3.1416


308 PROGRAMA MATLAB

B.18 Referencia a los elementos de una matriz


Los elementos individuales de una matriz se pueden referenciar indicando su posicion
en parentesis. Por ejemplo A (i, j) se refiere al elemento de la i-esima fila, j-esima
columna.
Un ndice puede ser un vector. Si x y v son vectores, entonces x (v) es:

[x (v (1)) , x (v (2)) , , x (v (n))]

En matrices, vectores como ndice permiten el acceso a submatrices contiguas y no


contiguas. Por ejemplo supongase que A es una matriz de 1010, enotnces A (1 : 5, 3)
especifca la submatriz de 51 (vector columna) que contiene los primeros 5 elementos
en la tercera columna de A. As mismo, A (1 : 5, 7 : 10) es la submatriz de 54 cuyos
elementos son las primeras 5 filas y las ultimas 4 columnas de A.
Usar (:) (colon) en lugar de un ndice indica todas las correspondientes filas o
columnas. Por ejemplo A (:, 3) es la tercera columna de A y A (1 : 5, :) contiene las
primeras 5 filas de A.
Efectos sofisticados se obtienen referenciando submatrices en ambos lados de una
declaracion de asignacion.

Ejemplo B.17 .

A (:, [3 5 10]) = B (:, 1 : 3)

reemplaza la tercera, quinta y decima columnas de A con las 3 primeras columnas de


B.
En general, si v y w son vectores cuyos elementos son enteros, entonces A (v, w) es la
matriz obtenida tomando los elementos de A con ndices fila de v e ndices columna
de w. As A (:, n : 1 : 1) invierte las n columnas de A.

Ejemplo B.18 .

v = 2 : 2 : n;

w = [3 1 4 1 6] ;

A (v, w)

A (:) en el lado derecho de una declaracion de asignacion denota todos los elementos
de A pero organizados en un vector columna.

Ejemplo B.19 .

A = [1 2 ; 3 4 ; 5 6]
B.21 Matrices especiales 309

b = A (:)

resulta en:

1
3

5
b=



2
4
6

A (:) en el lado izquierdo de una declaracion de asignacion denota una matriz con
las mismas dimensiones de A pero con el nuevo contenido de lado derecho de la
asignacion. Por ejemplo, la matriz A anterior es de 3 2, A (:) = 11 : 16 es ahora:

11 14
A = 12 15
13 16

B.19 Referencia a los elementos de una matriz


usando vectores con ceros y unos
Se pueden usar vectores con ceros y unos, creados generalmente de operaciones rela-
cionales, para referirse a submatrices. Si A es una matriz de dimensiones m n y L
es un vector de longitud m de ceros y unos, entonces A (L, :) especifica las filas de A
en donde los elementos de L son diferentes de cero.
x = x (x <= 3 std (x)) ; remueve del vector x aquellos elementos mayores que 3
desviaciones estandar.
L = x (:, 3) > 100 ; x = x (L, :) ; reemplaza x con aquellas filas de x cuya tercera
columna es mayor que 100.

B.20 Matrices vacas


La declaracion x = [ ] asigna una matriz de dimension 0 0 a x. El uso subsecuente
de esta matriz no conduce a una condicion de error, propaga matrices vacas.
La funcion exist sirve para probar la existencia de una matriz, y la funcion isempty
sirve para indicar si una matriz es vaca.
Una manera eficiente de remover filas y columnas de una matriz es asignarles una
matriz vaca.

Ejemplo B.20 .
310 PROGRAMA MATLAB

A (:, [2 4]) = []
borra las columnas 2 y 4 de A.

B.21 Matrices especiales


Una coleccion de funciones generan matrices especiales del algebra lineal y en proce-
samiento de senales:
compan, diag, gallery, hadamard, hankel, hilb, toeplitz, vander, etc.

Ejemplo B.21 .
Para generar la matriz companion asociada con el polinomio:

s3 7s + 6

p = [1 0 7 6]

A = compan (p)
genera:

0 7 6
A= 1 0 0
0 1 0
Los valores propios de A son las races del polinomio:
t
eig (A) = [3 2 1]
Otras funciones que generan matrices son:
zeros, ones, rand, randn, eye, linspace, logspace, meshgrid (usar help para mas
detalles).

B.22 Construccion de matrices mas grandes


Se pueden formar matrices mas grandes de matrices pequenas,
h delimitandolas coni
0
corchetes, [ y ]. Por ejemplo, si A es cuadrada, C = A A ; ones (size (A)) A.2
crea una matriz dos veces el tamano de A. Las dimensiones de las matrices mas
pequenas deben ser consistentes.
Otras funciones que manipulan matrices son:
rot90, f liplr, flipud, diag, tril, triu, etc.
La funcion size devuelve un vector con dos elementos: el numero de filas y el numero
de columnas de una matriz.
La funcion length devuelve la longitud de un vector.
B.24 Polinomios y procesamiento de senales 311

B.23 Funciones matriciales


Factorizacion triangular : la funcion lu factoriza una matriz cuadrada con el producto
de dos matrices esencialmente triangulares. Para obtener las dos matrices utilizar:

[L, u] = lu (A)

Factorizacion ortogonal : la funcion qr, util para matrices cuadradas y rectangulares,


expresa la matriz como el producto de una matriz ortonormal y una matriz superior.
Las dos matrices se obtienen con:

[Q, R] = qr (A)

Descomposicion en valores singulares: la asignacion [U, S, V ] = svd (A) produce los


tres factores en esta descomposicion (singular value decomposition). Las matrices
U y V son ortogonales y la matriz S es diagonal. Los elementos de la diagonal de S
son los valores singulares de A.
Vectores y valores propios: la asignacion [x, D] = eig (A) retorna en los elementos de
la diagonal de D los valores propios de A y en las columnas de x los correspondientes
vectores propios.

B.24 Polinomios y procesamiento de senales


Representacion de polinomios.
MATLAB los representa como vectores fila que contienen los coeficientes ordenados
por potencias descendientes.
Si:

1 2 3
A= 4 5 6
7 8 0

su ecuacion caracterstica se calcula con:

p = poly (A)

p = [1 6 72 27]

que es la representacion del polinomio s3 6s2 72s 27.


Las races de esta ecuacion son:

r = roots (p)


12.1229
r = 5.7345
0.3884
312 PROGRAMA MATLAB

Estas races son, por supuesto, los mismos valores propios de la matriz A. Tambien
se pueden obtener el polinomio original con poly :

p2 = poly (r)

p2 = [1 6 72 27]

Sea a (s) = s2 + 2s + 3 y b (s) = 4s2 + 5s + 6. El producto de los dos polinomios es


la convolucion de los coeficientes.

a = [1 2 3] ; b = [4 5 6]

c = conv (a, b)

c = [4 13 28 27 18]

Se usa deconvolucion para dividir polinomios:

[q, r] = deconv (c, a)

q = [4 5 6]

r = [0 0 0 0 0]

Otras funciones polinomiales son:


poly, roots, polyval (evaluacion polinomial), polyvalm (evaluacion de un polinomio
matricial), residue (expansion en fracciones parciales), polyder, polyfit.

B.25 Procesamiento de senales


En procesamiento de senales, los vectores pueden contener datos de senales muestradas
o secuencias. Para sistemas con multiples entradas, cada fila de una matriz corre-
ponde a un punto de muestra con los canales distribuidos a lo largo de las columnas
de la matriz.
Algunas funciones para el procesamiento de senales son:
abs, angle, conv, cov, deconv, f ft, if f t.
La herramienta signal processing del MATLAB suminitra muchas funciones para
el procesamiento de senales.
B.27 Funciones como funcion 313

B.26 Filtraje de datos


La funcion y = f ilter (b, a, x) filtra los datos del vector x con el filtro descrito por los
vectores a y b.
Los datos filtrados son devueltos en el vector y.
La ecuacion de diferencia del filtro es:
y (n) = b (1) x (n) + b (2) x (n 1) + + b (nb ) x (n nb + 1) +

a (2) y (n 1) a (na ) y (n na + 1)
o la funcion de transferencia z :
Y (z) b (1) + b (2) z 1 + + b (nb ) z (nb 1)
H (z) = =
x (z) 1 + a (2) z 1 + + a (na ) z (na 1)
Por ejemplo, para encontrar y graficar la respuesta al impulso (con n puntos) de un
filtro digital:
x = [1 zeros (1, n 1)] ;

y = filter (b, a, x) ;

plot (y,0 o0 )
la funcion freqz retorna la respuesta frecuencial de filtros digitales.
La respuesta frecuencial es H (z) evaluada alrededor del crculo unitario en el plano
complejo, z = ej . Se puede usar freqz para encontrar y graficar la respuesta fre-
cuencial con n puntos.
[h, w] = f reqz (b, a, n) ;

mag = abs (h) ;

phase = angle (h) ;

semi log y (w, mag)

plot (w, phase)


La herramienta signal processing incluye numerosas funciones para el diseno de
filtros digitales. Sabiendo algunas tecnicas de diseno de filtros, muchos metodos son
posibles. Por ejemplo, las tecnicas de la transformacion bilineal y el mapeo de polos
y ceros convierten prototipos en el dominio s al dominio z.
ff t (x) es la transformada discreta de Fourier del vector x.
ff t (x, n) es la transformada discreta de Fourier del vector x con n puntos.
Si x es una matriz, f ft (x) es la transformada rapida de Fourier de cada columna de
x.
if f t (x) es la transformada rapida inversa del vector x.
314 PROGRAMA MATLAB

B.27 Funciones como funcion


Una clase de funciones en MATLAB no trabaja con matrices numericas, si no con
funciones matematicas. Estas funciones como funcion incluyen:
a) Integracion numerica.
b) Ecuaciones no lineales y optimizacion.
c) Solucion de ecuaciones diferenciales.
MATLAB representa funciones matematicas declarandolas como funcion en archivos
tipo m. Por ejemplo, la funcion:
1 1
f (x) = + 6
(x 0.3) + 0.01 (x 0.9)2 + 0.04
2

se puede generar en MATLAB creando un archivo tipo m llamado humps.m con las
siguientes declaraciones:

f unction y = humps (x)

y = 1./ ((x .3) .2 + .01) + 1./ ((x .9) .2 + .04) 6;

Una grafica de esa funcion es, por ejemplo:

x = 1 : .01 : 2;

plot (x, humps (x) ,0 w0 )

100

80

60

40

20

-20
-1 -0.5 0 0.5 1 1.5 2

Figura B.1 Grafica de la funcion humps


B.30 Funciones de ecuaciones diferenciales. 315

B.28 Integracion numerica


El area bajo la curva f (x) se puede calcular numericamente integrando f (x) . La
funcion que se usa es quad o quad8. Por ejemplo, para integrar la funcion definida en
humps.m desde 0 hasta 1 :
q = quad (0 humps0 , 0, 1)

q = 29.8583
Notese que el primer argumento de la funcion quad es el nombre del archivo, que
contiene la funcion matematica, entre comillas simples.

B.29 Ecuaciones no lineales y funciones de


optimizacion
fmin mnimo de una funcion de una variable.
fmins mnimo de una funcion multivariable.
fzero cero de una funcion de una variable.
Ejemplo B.22 .

xm = f min (0 humps0 , .5, 1)

xm = 0.6370
es el mnimo de la funcion definida en humps.m en la region 0.5 a 1.
El valor de la funcion en el mnimo es:
y = humps (xm)

y = 11.2528

xz1 = fzero (0 humps0 , 0)


localiza el cero cerca a x = 0, es decir:
xz1 = 0.1316
y:
xz2 = fzero (0 humps0 , 1)
localiza el cero cerca a x = 1, es decir:
xz2 = 1.2995
La herramienta optimization del MATLAB contiene varias funciones de funciones
para ecuaciones no lineales y optimizacion.
316 PROGRAMA MATLAB

B.30 Funciones de ecuaciones diferenciales


Las funciones para resolver ecuaciones diferenciales ordinarias son:
ode23 metodo de Runge-Kutta de orde 2/3.
ode45 metodo de Runge-Kutta de orde 4/5.
Sea la ecuacion diferencial de Vander Pol:
..
x + x2 1 x + x = 0

Reescribiendola como ecuaciones de estado:



x1 = x1 1 x22 x2

x2 = x1

El primer paso es crear una funcion en un archivo tipo m con estas ecuaciones difer-
enciales. Si el archivo es llamado vdpol.m, entonces debe contener:

f unction xdot = vdpol (t, x)

xdot = zeros (2, 1) ;

xdot (1) = x (1) . (1 x (2) .2) x (2) ;

xdot (2) = x (1) ;

Para simular la ecuacion diferencial definida en vdpol.m en el intervalo 0 t 20, se


usara ode23.

to = 0 ; tf = 20;

0
xo = [0 0.25] ; % condiciones iniciales

[t, x] = ode23 (0 vdpol0 , to, tf, xo)

plot (t, x,0 w0 )


B.32 Graficos en dos dimensiones. 317

-1

-2

-3
0 5 10 15 20

Figura B.2 Graficas de las variables de estado de la ecuacion de Vander Pol


Para trabajar con ecuaciones diferenciales o simulacion, el MATLAB tiene otra her-
ramienta especializada llamada Simulink, la cual se estudiara en detalle posterior-
mente.

B.31 Graficos
El sistema de graficos del MATLAB suministra una variedad de tecnicas sofisticadas
para presentar y visualizar datos. Este sistema utiliza objetos graficos, tales como
lneas y superficies, los cuales se pueden controlar con los valores de las propiedades
de los objetos. Sin embargo, ya que el MATLAB implementa un rico conjunto de
funciones graficas de alto nivel (en 2 y 3 dimensiones), la mayora de las veces no es
necesario accesar estos objetos graficos a bajo nivel.
Se describira como usar las capacidades graficas de alto nivel del MATLAB para
presentar los datos.

B.32 Graficos en dos dimensiones


Existe una variedad de funciones para presentar datos como graficos en dos dimen-
siones. Cada una acepta entradas en forma de vectores o matrices y automaticamente
escalan los ejes para acomodar los datos de entrada.
plot crea una grafica de vectores o columnas de matrices.
loglog crea una grafica usando escalas logartmicas en ambos ejes.
semilogx crea una grafica usando una escala logartmica para el eje x y una escala
lineal para el eje y.
semilogy grafica con escala logartmica para el eje y y escala lineal para el x.
Se pueden adicionar ttulos, etiquetas de ejes, cuadrculas y texto al grafico usando:
318 PROGRAMA MATLAB

title adiciona un ttulo al grafico.


xlabel adiciona una etiqueta al eje x.
ylabel adiciona una etiqueta al eje y.
text muestra una cadena de caracteres en la localizacion que se especifique.
gtext coloca texto en el grafico usando el raton (mouse).
grid habilita la cuadrcula.
ginput permite leer valores del grafico con el raton.

B.33 Creacion de un grafico


Si y es un vector, plot (y) produce un grafico lineal de los elementos de y contra
el ndice de los elementos de y. Si se especifican dos vectores como argumentos,
plot (x, y) produce un grafico de y contra x.
Tambien se pueden especificar multiples conjuntos de datos y definir el color y estilo
de lnea para ser usado con cada conjunto de datos.

Ejemplo B.23 .

t = 0 : pi/100 : 2 pi;

x = sin (t) ;

y1 = sin (t + .25) ;

y2 = sin (t + .5) ;

plot (x, y1,0 r0 , x, y2,0 g 0 )

plot genera un grafico de y1 contra x y y2 contra x en los mismos ejes.


El primer conjunto de datos sera graficado con una lnea solida roja y el segundo
conjunto con una lnea discontinua verde. Con el fin de mostrar las graficas, en lugar
del comando anterior se usara:

plot (x, y1,0 w0 , x, y2,0 w 0 )

el cual permite ver las graficas en la pantalla con fondo negro y las curvas blancas.
Sin embargo al importarlas a este texto los dos colores anteriores se intercambian.
Las siguientes declaraciones le adicionan un ttulo al grafico y etiquetas a los ejes:

title (0 f ase0 )


xlabel 0 x = sen (t)0
B.34 Estilos de lneas, marcadores y colores. 319

0
ylabel 0 y = sen (t+)

Los resultados de este ejemplo se muestran en la Fig. B.3.

fase
1

0.5
y=sen(t+)

-0.5

-1
-1 -0.5 0 0.5 1
x=sen(t)

Figura B.3 Resultados del ejemplo B.23

B.34 Estilos de lneas, marcadores y colores


En la declaracion plot (x, y, s), s es una cadena de 1, 2 o 3 caracteres (entre comillas
simples) para especificar el estilo de lnea y colores en la grafica. Los caracteres usados
se muestran en la siguiente tabla:

smbolo color smbolo color


y amarillo punto
m f ucsia crculo
c cyan x x
r rojo + mas
g verde estrella
b azul continua
w blanco .. punteada
k negro . raya punto
discontnua
si no se especifica un color, la funcion plot automaticamente usa los colores de arriba.
Para una lnea, el color por defecto es amarillo, ya que este es el color mas visible
sobre un fondo negro. Para multiples lneas, la funcion plot utiliza en forma cclica
320 PROGRAMA MATLAB

los 6 primeros colores de la tabla.


Los smbolos , , x, + y son marcadores escalables.

B.35 Adicion de lneas a un grafico existente


Se pueden adicionar lneas a un grafico existente utilizando el comando hold.
Cuando se usa la declaracion hold on, MATLAB no remueve las lneas existentes y se
pueden adicionar nuevas lneas en los ejes actuales. Sin embargo, los ejes se pueden
reescalar si los nuevos datos estan fuera del rango de los datos anteriores. Por ejemplo,
utilizando los mismos datos del ejemplo anterior:

plot (x,0 w0 ) ; hold on ; plot (y1,0 w 0 ) ;

plot (y2,0 w .0 ) ; hold of f


Estas declaraciones producen un grafico con tres curvas como se muestra en la Fig.
B.4.

0.5

-0.5

-1
0 50 100 150 200 250

Figura B.4 Graficas de x, y1, y2 del ejemplo B.23

B.36 Datos complejos


Cuando los argumentos de plot son complejos, la parte imaginaria es ignorada excepto
cuando el argumento de plot es uno solo. En este caso, se obtiene una grafica de la
parte real contra la parte imaginaria.
As, plot (z), en donde z es un vector o una matriz de complejos, es equivalente a
plot (real (z) , imag (z)) .
B.38 Graficos de matrices. 321

Ejemplo B.24 .

plot (eig (randn (20, 20)) ,0 x0 )


Esta grafica se muestra en la Fig. B.5.

-1

-2

-3

-4
-5 0 5

Figura B.5 Grafica del ejemplo B.24


Para graficar mas de una matriz compleja, se deben tomar explcitamente las partes
reales e imaginarias.

B.37 El archivo tipo m peaks


Futuros ejemplos usan el archivo tipo m llamado peaks para generar una matriz de
datos. Los datos se basan en una funcion de dos variables que tiene maximos y
mnimos:
2 2
x 2 2 1 2 2
f (x, y) = 3 (1 x)2 ex (y+1) 10 x3 y5 ex y e(x+1) y
5 3
El archivo peaks crea una matriz que contiene los valores de la funcion para valores
de x y y en el rango de 3 a 3. Los valores de x varan a lo largo de las columnas y
los de y a lo largo de las filas. Se puede especficar el tamano de la matriz cuadrada
pasandole un argumento a peaks. Ejemplo M = peaks (20) ; crea una matriz de datos
de 20 20. Si se omite el argumento de entrada, por defecto el tamano es 49.

B.38 Graficos de matrices


La funcion plot puede tomar un solo argumento matricial: plot (Y ) .
322 PROGRAMA MATLAB

Ella dibuja una curva por cada columna de Y . El eje x corresponde al ndice de las
filas, 1 : m, en donde m es el numero de filas en Y . Por ejemplo, plot (peaks,0 w0 )
produce un grafico con 49 curvas. Vease Fig. B.6.

10

-5

-10
0 10 20 30 40 50

Figura B.6 Resultado de plot(peaks,0 w0 )


Esta grafica es una vista desde la superficie peaks mirando a lo largo del eje x (es
decir, una vista desde el azimuth = 90 y elevacion = 0 ).
La funcion plot tambien acepta dos vectores o dos matrices como argumentos. Por
ejemplo, plot (peaks, rot90 (peaks) ,0 w0 ) . Vease Fig. B.7.

10

-5

-10
-10 -5 0 5 10

Figura B.7 Resultado de plot(peaks, rot(peaks),0 w0 )


B.38 Graficos de matrices. 323

En general, si plot es usada con dos argumentos y si X o Y tienen mas de una fila o
columna, entonces:
a) Si Y es una matriz y x es un vector, plot (x, Y ) grafica sucesivamente las filas o
columnas de Y contra el vector x, usando diferentes colores o tipos de lneas para
cada una. La orientacion por filas o columnas se selecciona dependiendo del numero
de elementos en x. Es decir, si x tiene m elementos y Y es m n entonces se grafican
las columnas de Y contra x; y si x tiene n elementos y Y es m n se grafican las filas
de Y contra x. Si Y es cuadrada, se grafican las columnas.
b) Si X es una matriz y y es un vector, plot (X, y) grafica cada fila o columna de X
contra el vector y.

Ejemplo B.25 .

y = 1 : 49; plot (peaks, y,0 w0 )


Vease Fig. B.8.

50

40

30

20

10

0
-10 -5 0 5 10

Figura B.8 Resultados del ejemplo B.25


c) Si X y Y son matrices del mismo tamano, plot (X, Y ) grafica las columnas de X
contra las columnas de Y.
Se puede usar la funcion plot con multiples pares de argumentos matriciales:

plot (X1 , Y1 , X2 , Y2 , )
Cada par X Y es graficado generando multiples curvas. Los diferentes pares pueden
ser de dimensiones diferentes.

Ejemplo B.26 .
Almacenar en un archivo tipo m la siguiente matriz:
324 PROGRAMA MATLAB

weather = [30 4.0


31 3.7
38 4.1
49 3.7
59 3.5
68 2.9
74 2.7
72 3.7
65 3.4
55 3.4
45 4.2
34 4.9]
con el nombre mweather.m. Las declaraciones:

temp = weather (:, 1) ; precip = weather (:, 2) ;

despues de usar la declaracion mweather, almacena las columnas de temperatura y


precipitacion en vectores individuales.
Graficar la temperatura contra el numero del mes y la precipitacion contra el numero
del mes en la misma ventana, utilizando plot y subplot:

subplot (2, 1, 1) ; plot (temp)

subplot (2, 1, 2) ; plot (precip)

80

60

40

20
0 2 4 6 8 10 12

2
0 2 4 6 8 10 12

Figura B.9 Graficas del ejemplo B.26


La Fig. B.9 muestra las dos curvas.
Las siguientes declaraciones producen un grafico como se muestra en la Fig. B.10 que
muestra la relacion entre temperatura y precipitacion mes a mes:
B.39 Funciones especiales para graficas en dos dimensiones. 325

mes = [0 Ene0 ;0 F eb0 ;0 M ar0 ;0 Abr0 ; ...


0
M ay 0 ;0 Jun0 ;0 Jul0 ;0 Ago0 ; ...
0
Sep0 ;0 Oct0 ;0 N ov0 ;0 Dic0 ];

plot (temp, precip,0 wo0 )

axis ([28 80 2.5 5.2])

text (temp, precip, mes)

xlabel (0 temp0 )

ylabel (0 precip0 )

title (0 Boston0 )

Boston

5
Dic

4.5
Nov
Mar
precip

4 Ene
Feb Abr Ago
3.5 May
Oct Sep

3
Jun
Jul
2.5
30 40 50 60 70 80
temp

Figura B.10 Relacion entre temperatura y precipitacion cada mes


La declaracion axis en el ejemplo anterior adiciona espacio extra al grafico, definien-
do explcitamente el escalamiento de los ejes a valores mayores que el rango de datos.
Esto permite que el texto permanezca dentro de los lmites del cuadro del grafico.
326 PROGRAMA MATLAB

B.39 Funciones especiales para graficas en dos


dimensiones
bar crea una grafica de barras.
compass crea una grafica de angulos y magnitudes de numeros complejos con flechas
emanando desde el origen.
errorbar crea una grafica con barras de error.
feather crea una grafica de angulos y magnitudes de numeros complejos con flechas
emanando desde puntos igualmente espaciados a lo largo de un eje horizontal.
fplot evalua una funcion y grafica los resultados.
hist crea un histograma.
polar crea una grafica en coordenadas polares.
quiver crea una grafica de un gradiente u otro campo vectorial.
rose crea un histograma de angulos.
stairs crea una grafica similar a una de barras, pero sin las lneas internas.
fill dibuja un polgono y lo llena con colores solidos o interpolados.

Ejemplo B.27 .
Crear la funcion:

f unction y = f ofx (x)

y = cos (tan (pi x)) ;

con el nombre f of x.m. Despues, dentro del MATLAB correr:

f plot (0 fof x0 , [0 1])

para graficar la funcion correspondiente en el intervalo (0, 1) .


Esta grafica se puede comparar con la que se obtiene de la siguiente manera:

x = (0 : 1/2000 : 1)0 ;

plot (x, cos (tan (pi x)))

Los dos graficos se pueden ver, como se muestra en la Fig. B.11, en la misma ventana
as:

subplot(2, 1, 1);

x = (0 : 1/2000 : 1)0 ;

plot (x, cos (tan (pi x)))


B.40 Graficos en 3 dimensiones. Graficos de lneas. 327

subplot (2, 1, 2) ;

f plot (0 f of x0 , [0 1])

-1
0 0.2 0.4 0.6 0.8 1

-1
0 0.2 0.4 0.6 0.8 1

Figura B.11 Graficos del ejemplo B.27


La funcion f plot tiene la ventaja de que muestrea la funcion a intervalos mas cercanos
en la region en donde la rata de cambio es mayor, generando as una figura mas precisa
cerca a x = 0.5 en este caso particular.

B.40 Graficos en 3 dimensiones. Graficos de lneas.


El analogo tridimensional a la funcion plot es plot3. Si x, y, z son 3 vectores de la
misma longitud, plot3 (x, y, z) genera una lnea que pasa a traves de los puntos cuyas
coordenadas son los elementos de x, y, z y luego produce una proyeccion bidimensional
de esa lnea en la pantalla.

Ejemplo B.28 .

t = 0 : pi/50 : 10 pi;

plot3 (sin (t) , cos (t) , t) ;


328 PROGRAMA MATLAB

produce una figura como la de un resorte. Vease Fig. B.12.

40

30

20

10

0
1
1
0
0
-1 -1

Figura B.12 Figura del ejemplo B.28


Tambien se pueden usar matrices en lugar de vectores:
plot3 (X, Y, Z, S). Se grafican las lineas obtenidas de las columnas de X, Y, Z. S es lo
mismo que en la funcion plot.
O tambien se pueden combinar los graficos definidos por las cuadruples (x, y, z, s) :

plot3 (x1, y1, z1, s1, x2, y2, z2, s2, )

en donde todas las xi, yi y zi son vectores o matrices y las si cadenas como en la
funcion plot.

B.41 Meshgrid
MATLAB define una superficie en forma de malla mediante las coordenadas z de
puntos por encima de una cuadrcula rectangular en el plano x y. La grafica se
forma uniendo puntos adyacentes con lneas rectas.
Estas superficies son utiles para visualizar matrices que son demasiado grandes para
mostrar en forma numerica, o para graficar funciones de dos variables.
El primer paso para mostrar (en pantalla) una funcion de dos variables, z = f (x, y) ,
es generar dos matrices X y Y que consisten de filas repetidas y columnas repetidas,
respectivamente, sobre el dominio de la funcion. Despues se usan estas matrices para
evaluar y graficar la funcion.
La funcion meshgrid transforma el dominio especificado por dos vectores, x y y, en
matrices X y Y . Luego se usan estas matrices para evaluar funciones de dos variables.
Las filas de X son copias del vector x, y las columnas de Y con copias del vector y.
Es importante notar que si x tiene m elementos, y tiene n elementos, entonces X es
B.41 Meshgrid. 329

de dimension n m y Y tambien.

Ejemplo B.29 .
Considere la funcion sinc (r) = sin(r)
r que produce la superficie popularmente conocida
como el sombrero como se muestra en la Fig. B.13. Se evaluara esta funcion para
el rango de x entre 8 y 8, y y entre 10 y 10. :

x = 8 : 0.5 : 8;

y = 10 : 0.5 : 10;

[X, Y ] = meshgrid (x, y)

R = sqrt (X.2 + Y.2) + eps;

Z = sin (R) ./R;

mesh (x, y, Z)

0.5

-0.5
10
10
0
0
-10 -10

Figura B.13 Superficie del ejemplo B.29


Las funciones contour y contour3 sirven para generar graficas de contorno (de nivel)
en 2 y 3 dimensiones, respectivamente.
330 PROGRAMA MATLAB

Ejemplo B.30 .

contour (peaks, 20)

contour3 (peaks, 20)

Usar el comando help para mas informacion.

B.42 Pseudocolor en graficas


pcolor (Z) muestra en cada punto Z(i, j) un color. Este se determina de un mapa de
colores con un ndice (numero) obtenido escalando el valor del elemento Z(i, j) de la
matriz Z.
El mapa de colores es una matriz con tres columnas que especifica la intensidad de las
tres componentes de video, rojo, verde y azul. El comando para el mapa de colores
es colormap(map), donde map es una matriz con cualquier numero de filas y tres
columnas. La intensidad de los colores se puede especificar en el rango 0.0 a 1.0.
Ejemplo [0 0 0] es negro y [1 1 1] es blanco.
Los objetos graficos que usan pseudocolor (objetos SURFACE y PATCH), los cuales
son creados con las funciones mesh, surf , y pcolor, mapean una matriz de color, C,
cuyos valores estan en el rango [Cmn, Cmax], a un arreglo de ndices, K, en el rango
[1, m] .
Los valores de Cmn y Cmax son min (min (C)) y max (max (C)), o son especificados
por caxis. El mapeo es lineal, con Cmn mapeando el ndice 1 y Cmax el ndice m.
Los ndices son luego usados con colormap para determinar el color asociado con cada
elemento de la matriz.
Usar help color para ver mapas de colores ya predefinidos, tales como hsv, gray, hot,
cool, bone, copper, pink, etc.

Ejemplo B.31 .

z = peaks ;

colormap (bone)

pcolor (z)

Las funciones contour y pcolor muestran esencialmente la misma informacion sobre


la misma escala. De hecho, a veces es util superponer las dos. Para eliminar las lneas
de la cuadrcula en el grafico pcolor se debe cambiar el modo shading a f lat. Para
usar lneas negras para todos los contornos, especificar 0 k0 para su color.
B.43 Graficas en malla y superficie. 331

Ejemplo B.32 .

colormap (hot)

pcolor(peaks)

shading f lat

hold on

contour(peaks, 20,0 k0 )

hold of f

El MATLAB tambien maneja la funcion image que es similar a pcolor. Ambas pro-
ducen figuras bidimensionales con valores de brillo o color proporcionales a los elemen-
tos de una matriz dada. Sin embargo, image esta disenada para mostrar fotografas,
pinturas, etc., mientras pcolor es disenada para visualizar objetos matematicos mas
abstractos. Usar help para mas informacion.

B.43 Graficas en malla y superficie


mesh y surf muestran superficies en tres dimensiones. Si Z es una matriz cuyos
elementos Z(i, j) definen la altura de una superficie sobre una cuadrcula inferior (i, j),
entonces mesh (Z) genera una vista de la superficie en malla y a colores. Similarmente
surf (Z) genera una vista de la superficie con cuadrilateros en malla de color constante,
delineados con lneas negras. La funcion shading permite eliminar las lneas en malla
o escoger interpolacion en el shading.
Cuando mesh (Z) y surf (Z) se usan con una sola matriz como argumento, este
argumento especifica tanto la altura como el color de la superficie.

Ejemplo B.33 .

mesh (peaks)

surf (peaks)

Con dos matrices como argumentos, las declaraciones mesh (Z, C) y surf (Z, C)
especifican independientemente el color usando el segundo argumento. As como con
pcolor (C), los valores de C se escalan y se utilizan como ndices en el mapa actual
de color.
332 PROGRAMA MATLAB

Ejemplo B.34 .

C = del2 (peaks) ; % funcion que calcula el laplaciano discreto de


% cualquier matriz.

surf (peaks, C) ; % renglones con curvaturas similares se dibujan en el


colormap (hot) % mismo color.
Se pueden eliminar partes de una superficie con datos tipo NaN , ya que estos no
son graficados. Esto crea huecos en la superficie en la localizacion correspondiente.
Llenando elementos de la matriz de color con datos tipo N aN se obtienen regiones
de la superficie invisibles.

Ejemplo B.35 .

p = peaks ;

p (30 : 40, 20 : 30) = nan p (30 : 40, 20 : 30) ;

mesh (peaks, p)
La Fig. B.14 muestra la superficie del ejemplo B.35.

10

-5

-10
60
40 60
40
20 20
0 0

Figura B.14 Superficie del ejemplo B.25


Usar help sobre las funciones surf c, meshz, surf l para mas informacion.
B.44 Algunas funciones para graficos de proposito general. 333

B.44 Algunas funciones para graficos de proposito


general
La funcion view permite especificar el angulo desde el cual se ve un grafico tridimen-
sional. Se debe especificar el azimuth y la elevacion del punto desde donde se quiere
ver, con respecto al origen de los ejes como se muestra en la Fig. B.15.
El formato de la funcion es: view(azimuth, elevacion). Como ejemplo se puede
utilizar la matriz peaks para ver su superficie desde varios puntos.

Figura B.15 Convencion para los angulos azimuth y elevacion


La funcion axis permite seleccionar el escalamiento, orientacion y relacion de ejes de
los graficos.
Generalmente, el MATLAB encuentra el maximo y el mnimo de los datos a graficar y
escoger una caja apropiada para el grafico (lmites). Los lmites de los ejes se pueden
cambiar as:
axis ([xmn xmax ymn ymax zmn zmax])
Para graficos bidimensionales se omiten los ultimos dos argumentos.
axis (0 auto0 ) retorna al escalamiento por defecto.
v = axis guarda el escalamiento de los ejes en el vector v.
axis (axis) congela el escalamiento a los lmites actuales.
axis (0 ij 0 ) cambia el origen del sistema de coordenadas as: el origen queda en la
esquina superior izquierda, el eje i es vertical y se numera de arriba hacia abajo, y
el eje j es horizontal y se numera de izquierda a derecha. Estos son llamados ejes
matriciales.
334 PROGRAMA MATLAB

axis (0 xy 0 ) pone los ejes en el modo caartesiano (por defecto).


axis (0 square0 ) y axis (0 equal0 ) afectan la relacion ancho-altura del grafico y la relacion
entre las escalas de los ejes x y y.
axis manipula el objeto axes, el cual es un objeto grafico.
subplot (m, n, p) divide la ventana de la pantalla para m n subgraficos y escoge
el grafico p como el actual. Los graficos se numeran a lo largo de la fila, luego la
segunda, etc.
Usar la funcion figure sin argumentos abre una nueva ventana.
figure (N) hace la figura N la figura actual.
Usar help para informacion sobre la funcion moviein, movie.
La funcion ginput permite usar el mouse o las teclas de direccion para escoger puntos
en un grafico. Ella retorna las coordenadas de la posicion del senalador, ya sea
cuando el boton del mouse o una tecla se presiona.
Las cualidades graficas discutidas hasta ahora comprenden la interfase a alto nivel
del sistema grafico del MATLAB. Sin embargo, este sistema tambien suministra un
conjunto de funciones a bajo nivel que permiten crear y manipular lneas, superficies
y otros objetos graficos que el MATLAB usa para producir graficos sofisticados.
Para mas informacion referirse a la gua del usuario del MATLAB (pags 2-101 a
2-123).

B.45 Flujo de control


MATLAB tiene declaraciones de flujo de control como las encontradas en la mayora
de los lenguajes de computador. Esto permite que el MATLAB sea utilizado como
un lenguaje de programacion de alto nivel.

B.46 Lazos f or
La forma general para el lazo f or es:
f or v = expresion
declaraciones
end
La expresion es actualmente una matriz. Las columnas de la matriz se asignan una a
una a la variable v y luego son ejecutadas las declaraciones. Una manera mas clara
de lograr lo mismo es as:
E = expresion ;
[m, n] = size (E) ;
for J = 1 : n
v = E (: , J) ;
declaraciones
end
Usualmente, expresion es algo como m : i : n, que es una matriz con una sola fila,
B.47 Lazos while. 335

y por lo tanto sus columnas son escalares. En este caso especial, el lazo f or de
MATLAB es como los lazos F OR o DO de otros lenguajes.

Ejemplo B.36 .
Graficar la respuesta al escalon unitario de un sistema de segundo orden con frecuencia
natural 1 rad
seg y relacion de amortiguamiento variando desde 0 hasta 1.

t = 0 : 0.5 : 19.5;
r = 0.05 : 0.05 : 1.0;
n = 1; % numerador de la FT
f or j = 1 : 1 : 20
d = [1 2 r (j) 1] ; % denominador de la FT
Y (:, j) = step (n, d, t) ; % respuesta al escalon
% unitario
end
mesh (r, t, Y )
hold on
ylabel (0 tiempo0 )
xlabel (0 amortiguamiento0 )
zlabel (0 respuesta0 )
view (60, 30)
La Fig. B.16 muestra los resultados del ejemplo B.36.

1.5
Respuesta

0.5

0
0

0.5 20
15
10
5
1 0
Amortiguamiento Tiempo

Figura B.16 Resultados del ejemplo B.36

B.47 Lazos while


336 PROGRAMA MATLAB

Su forma general es:


while expresion
declaraciones
end
Las declaraciones se ejecutan repetidamente siempre y cuando todos los elementos
en la matriz expresion sean diferentes de cero. La matriz expresion es casi siempre
una expresion relacional 1 1, en este caso expresion 6= 0 corrsponde a true (cierto).
Cuando la matriz expresion no es un escalar, se puede reducir usando las funciones
any y all.

Ejemplo B.37 .
Este ejemplo encuentra el primer entero n para el cual n! es un numero de 100 dgitos.
n = 1;
while prod (1 : n) < 1.0 e 100 ;
n = n + 1;
end
n

B.48 Declaraciones if y break

Ejemplo B.38 .
Se muestra como un calculo se puede dividir en tres casos, dependiendo del signo y
la paridad de n :
n = input(0 Entre un numero positivo = 0 );
% Datos por teclado
If n < 0
disp (0 Es negativo 0 )
parid
elseif rem (n, 2) == 0
disp (0 Es par 0 )
else
disp (0 Es impar 0 )
end
Debe archivarse como archivo tipo m con el nombre parid.m.

Ejemplo B.39 .
Se lee un numero positivo por teclado. Si es par se divide por 2, si es impar se
multiplica por 3 y se le suma 1. Se repite el proceso hasta que el entero llega a 1.
Existe algun entero para el cual el proceso no termina?.
B.50 Archivos script. 337

while 1
n = input(0 Entre n > 0.0 );
if n <= 0
break;
% Salida de los lazos
end;
while n > 1
if rem(n, 2) == 0
n = n/2;
else
n = 3 n + 1;
end;
end;
end;

B.49 Archivos tipo m


MATLAB puede ejecutar secuencias de comandos que son almacenados en un archivo.
Los archivos de disco que contienen declaraciones del MATLAB son llamados archivos
m porque tienen un tipo de archivo con .m como la ultima parte del nombre del archivo
(la extension). Por ejemplo, un archivo llamado bessel.m contiene declaraciones del
MATLAB que evaluan las funciones de Bessel.
Un archivo m consiste de una secuencia de declaraciones normales del MATLAB, las
cuales posiblemente incluyan referencas a otros archivos m.
Un archivo m se puede llamar a si mismo recursivamente y se puede crear usando un
editor de texto o un procesador de palabra.
Dos tipos de archivos m se pueden usar: los que automatizan secuencias de comandos
(archivos script) y las funciones que hacen mas extensible el MATLAB. Gran parte
de la potencia del MATLAB consiste en que permite crear nuevas funciones que re-
suelven problemas especficos del usuario. Ambos tipos de archivo son ordinariamente
archivos de texto ASCII.

B.50 Archivos script


Cuando un archivo de estos es invocado, MATLAB simplemente ejecuta los comandos
encontrados en el archivo. Las declaraciones operan globalmente sobre los datos en
el espacio de trabajo.
Estos archivos son utiles para desarrollar analisis, resolver problemas o disenar largas
secuencias de comandos que se vuelven difciles de manejar interactivamente.

Ejemplo B.40 .
338 PROGRAMA MATLAB

El archivo llamado fibno.m contiene los siguientes comandos:


% Este es un archivo para calcular
% los numeros de F ibonacci.
f = [1 1] ; i = 1;
while f (i) + f (i + 1) < 1000
f (i + 2) = f (i) + f (i + 1)
i=i+1
end
plot (f )
Escribiendo f ibno causa que es el MATLAB ejecute los comandos. Calcula los
primeros 16 numeros de F ibonacci y crea una grafica.
Despues de que la ejecucion del archivo esta completa, las variables f e i permanecen
en el espacio de trabajo.
Los demos del MATLAB son buenos ejemplos de como usar estos archivos para
desarrollar tareas mas complicadas. Cuando se invoca el MATLAB, automaticamente
ejecuta un archivo llamado matlabrc.m,el cual corre el archivo startup.m, si este
existe, en el cual se pueden entrar constantes fsicas, factores de conversion, o cualquier
otra cosa que se quiera predefinir en el espacio de trabajo.

B.51 Archivos funcion


Un archivo m que contiene la palabra function al comienzo de la primera lnea es
un archivo funcion. Este difiere del script en que se le pueden pasar argumentos,
y las variables definidas y manipuladas dentro del archivo son locales a la funcion y
no operan globalmente en el espacio de trabajo. Los archivos funcion son utiles para
extender el MATLAB, es decir, crear nuevas funciones del MATLAB utilizando su
propio lenguaje.

Ejemplo B.41 .
El archivo media.m con las siguientes declaraciones es una funcion:

function [med, desv] = media (x)


% Retorna el valor medio y la desviacion estandar de los elementos del vector x.
% Retorna un vector fila que contiene el valor medio y la desviacion estandar
% de cada columna cuando x es una matriz.
[m, n] = size (x) ;
if m == 1
m=n;
end
med = sum (x) /m; desv = sqrt (sum (x.2) /m med.2) ;
Se puede utilizar con:

z = 1 : 99;
B.53 Comandos echo, input, keyboard, y pause. 339

[me, de] = media (z)

lo cual resulta en:

me =
50

de =
28.5774

Notese que:
1) La primera lnea declara el nombre function, los argumentos de entrada x (si
es mas de uno, se separan por comas) y los argumentos de salida, med y desv.
2) El smbolo % indica que el resto de la lnea es un comentario y debe ser ignorada.
3) Las primeras pocas lneas documentan el archivo M y la muestra cuando se escribe
help media .
4) Las variables m, n, med y desv son locales a la funcion media y no existen en
el espacio de trabajo despues de que media ha terminado (o si existan previamente,
permanecen sin cambiar).
5) El vector z que contena los enteros de 1 a 99 fue pasado o copiado en media en
donde llega a ser una variable local llamada x.

B.52 Ayuda en lnea para los archivos m


Se puede crear ayuda en lnea para los archivos m entrando texto en una o mas lneas
de comentario, empezando con la segunda lnea del archivo.
As cuando se entra help media (ver ejemplo anterior), las lneas 2, 3 y 4 se muestran.
Son las primeras lneas contiguas de comentarios. El sistema de ayuda ignora las lneas
que aparecen posteriores a cualquier declaracion ejecutable o aun una lnea en blanco.

B.53 Comandos echo, input, keyboard, y


pause
Normalmente mientras un archivo m se ejecuta, los comandos en el archivo no se
muestran en la pantalla. El comando echo hace que los archivos m se vean en la
medida que se ejecutan, lo cual es util para depuracion o para demostraciones.
La funcion input obtiene entrada del usuario. As:

n = input (0 Entre un entero0 )


340 PROGRAMA MATLAB

muestra el mensaje Entre un entero, espera y luego asigna a n el valor o expresion


entrada por el teclado.
La funcion keyboard invoca el teclado del computador como un script. Cuando
se usa en archivos m es util para depuracion o para modificar variables durante la
ejecucion.
El comando pause hace que un procedimiento pare y espere que el usuario presione
cualquier tecla antes de continuar. pause (n) pausa durante n segundos antes de
continuar.

B.54 Variables globales


Generalmente cada funcion del MATLAB, definida por un archivo m, tiene sus propias
variables locales, las cuales son separadas de aquellas de otras funciones, de aquellas
del espacio de trabajo y de aquellas de archivos script. Sin embargo, si varias
funciones y posiblemente el espacio de trabajo, declaran todas un nombre particular
como global, entonces todos comparten una copia unica de esa variable. Cualquier
asignacion a esa variable, en cualquier funcion, es disponible a todas las otras funciones
que la declaran global. El formato es:
global Nombrevariable1 Nombrevariable2 ...
En las funciones esta declaracion se puede hacer despues de las primeras lneas de
comentario.

B.55 Cadenas de texto


Las cadenas de texto se entran en MATLAB delimitadas por comillas simples. Por
ejemplo:

s = 0 Hola0
resulta en:

s =
Hola
El texto se almacena en un vector, un caracter por elemento. En este ejemplo:

size (s)

ans =
14
indica que s tiene cuatro elementos. Los caracteres son almacenados como sus valores
ASCII y abs muestra estos valores:
B.56 La funcion eval. 341

abs (s)

ans =
72 111 108 97

la funcion setstr permite mostrar el vector como texto en lugar de mostrar los valores
ASCII. disp muestra el texto en la variable.
Otras funciones utiles son: isstr la cual detecta caracteres, y strcmp, la cual compara
cadenas de caracteres.
El uso de corchetes concatena variables de texto en cadenas mas largas:

s = [s,0 amigos0 ]

s =
Hola amigos

Valores numericos son convertidos a caracteres con sprintf , num2str, int2str. Los
valores numericos son a veces concatenados para poner ttulos en graficos que incluyen
valores numericos:

f = 70; c = (f 32) /1.8;

title ([0 la temperatura del cuarto es 0 , num2str (c) , 0 grados C 0 ])

B.56 La funcion ev al
La funcion eval trabaja con variables de texto para implementar una poderosa fa-
cilidad al estilo macro. eval (t) hace que el texto contenido en t sea evaluado. Si
CADENA es el texto fuente para cualquier expresion o declaracion del MATLAB,
entonces:

t = 0 CADENA0 ;

codifica el texto en t. Escribir t imprime el texto (en pantalla) y eval (t) hace que
el texto sea interpretado, como una declaracion o como un factor en una expresion.

Ejemplo B.42 .
342 PROGRAMA MATLAB

t = 0 1/ (i + j 1)0 ;
f or i = 1 : n
f or j=1:n
a (i, j) = eval (t) ;
end
end

genera la matriz del Hilbert de orden n.


Se puede usar eval e input para escoger una de varias tareas definidas en archivos m.

Ejemplo B.43 .

En este ejemplo los archivos m tienen los nombres : resist.m, induct.m y conden.m.

elementos = [0 resist0 ; 0 induct0 ; 0 conden0 ] ;

K = input (0 Escoja numero de elemento : 0 ) ;

eval (elementos (K, :))

Notese que el numero de columnas en elementos implica que cada fila debe tener el
mismo numero de caracteres.

Ejemplo B.44 .

En este ejemplo se muestra como eval puede usar el comando load para cargar 10
archivos de datos numerados secuencialmente:
nombre ar = 0 misdatos0 ;
f or i = 1 : 10
eval ([ 0 load 0 , nombre ar, int2str (i)])
end

B.57 Como incrementar velocidad y memoria


Para obtener la maxima velocidad del MATLAB, se debe hacer el esfuerzo de vector-
izar los algoritmos en los archivos m. Siempre que sea posible, convertir lazos f or y
while a operaciones con vectores o matrices.

Ejemplo B.45 .

Una manera de obtener el seno de 1001 numeros desde el 1 hasta 10 es:


B.58 Archivos de entrada y salida. 343

i = 0;
for t = 0 : .01 : 10
i = i + 1;
y (i) = sin (t) ;
end

Una version con vectores del mismo codigo es:

t = 0 : .01 : 10 ;
y = sin (t) ;

si no se puede vectorizar un pedazo de codigo, los lazos f or se pueden acelerar preubi-


cando los vectores en los cuales los resultados son almacenados. Por ejemplo, al incluir
la primer declaracion que usa la funcion zeros, el lazo f or se ejecuta mas rapido en:

y = zeros (1, 100) ;


for i = 1 : 100
y (i) = det X i ;
end

Si no se preubican vectores, el interpretador del MATLAB debe cambiar el tamano


del vector y a un elemento mas grande cada vez en el lazo de iteracion. Si el vector
es prelocalizado, se elimina este paso y ejecuta mas rapido.
El esquema de prelocalizacion tiene un segundo beneficio: usa memoria mas eficiente-
mente. Durante una sesion del MATLAB, la memoria tiende a fragmentarse. Aunque
se haya dejado mucha memoria libre, podra no haber suficiente espacio contiguo para
sostener una variable grande. As, preubicacion ayuda a reducir la fragmentacion.

B.58 Archivos de entrada y salida


Las funciones de archivos de entrada y salida del MATLAB permiten leer datos,
directamente en el MATLAB, que han sido guardados en otro formato, o escribir datos
generados en el MATLAB en formatos requeridos por otro programa o dispositivo.
Las funciones leen y escriben archivos en formato de texto y archivos de datos binario.
Estas funciones son basadas en las funciones de archivos de entrada y salida del
lenguaje C.
Informacion adicional se puede encontrar en la gua del usuario del MATLAB.
APENDICE C
INTRODUCCION AL SIMULINK

C.1 Introduccion
El SIMULINK es una herramienta del MATLAB que permite simular sistemas tanto
lineales como no lineales interactuando con el usuario de una manera grafica.
Para entrar al programa se escribe simulink una vez se este dentro del MATLAB.
Se presenta un pantallazo con varias ventanas (cajas) que contienen los diferentes
bloques de simulacion. Estas ventanas son:
sources (fuentes), sinks (sumideros), discrete (discretos), linear (lineales),
nonlinear (no lineales), connections (conexiones) y extra (extras).

Sources Sinks Discrete Linear Nonlinear Connections Extras

SIMULINK Block Library (Version 1.3c)

Figura C.1 Libreras del Simulink


Una sesion tpica comienza por definir un modelo o traer un modelo ya definido y
luego se procede al analisis del modelo.
Los modelos se crean y editan principalmente con comandos manejados por el mouse.
Despues de definir un modelo se puede analizar escogiendo opciones de los menus del
SIMULINK o entrando comandos en la ventana de comandos del MATLAB.
El progreso de una simulacion se puede ver mientras esta corriendo, y los resultados
finales se pueden hacer disponibles en el area de trabajo del MATLAB cuando la
simulacion esta completa.

345
346 INTRODUCCION AL SIMULINK

C.2 Construccion de un modelo


La definicion de un sistema en el SIMULINK es como la representacion del sistema
en diagramas de bloques, en donde estos son copiados de las libreras de bloques del
SIMULINK (las anteriores ventanas) o las que se contruyan. La librera estandar se
organiza en varios subsistemas, agrupando bloques de acuerdo a su comportamiento,
por ejemplo sources contiene bloques para generar senales. Se pueden abrir pre-
sionando dos veces el boton izquierdo (doble click) del mouse. Los bloques que all
se presentan se pueden copiar donde se desee, por ejemplo en el modelo que se este
creando, senalizandolos con el boton izquierdo del mouse y arrastrandolo (sin soltar
el boton).
Un sistema nuevo se puede abrir seleccionando new del menu file, a lo cual
aparece una ventana vaca.
La mayora de los bloques se pueden abrir para mostrar sus parametros en ventanas
separadas. Estas permiten controlar el comportamiento del bloque modificando los
valores de sus parametros. Por ejemplo, el bloque signal generator (generador de
senales) del subsistema sources tiene como parametros la forma de onda, amplitud
y frecuencia.
Otro bloque importante del subsistema sources es el denominado from workspace
(del espacio de trabajo) el cual sirve para recibir en el SIMULINK cualquier senal
o senales que se deseen del MATLAB en una matriz cuya primer columna tiene los
instantes de tiempo y las demas columnas las senales correspondientes.

Signal Source Library

12:34
Clock Digital Clock
Repeating
1 Sequence
Constant
Signal
Generator
Pulse
Generator
Sine Wave Step Input

untitled.mat [T,U]

From File From


Workspace Chirp Signal

Random Band-Limited
Number White Noise

Figura C.2 Librera de sources


El subsistema sinks contiene bloques que en general son utilizados como salidas:
C.2 Construccion de un modelo 347

osciloscopios (scope) graficadores (graph) y un bloque llamado to workspace


(al espacio de trabajo) el cual sirve para mandar las senales (respuestas, por ejemplo)
que se deseen de la simulacion al espacio de trabajo en una matriz, en donde cada
columna corresponde a cada respuesta o salida, y las filas al ndice de cada instante
de simulacion. Para enviar el vector que contiene los intantes de tiempo al MAT-
LAB, se puede usar el bloque clock del subsistema sources conectado al bloque
to workspace.

Signal Sinks Library

yout
To Workspace
Scope

untitled.mat
To File
Graph

STOP

Auto-Scale Stop Simulation


Graph

XY Graph Hit Crossing

Figura C.3 Librera de sinks


En general, los bloques tienen entradas (en el bloque se representa con > apuntando
hacia el mismo) y salidas (se presenta con > saliendo del bloque).
Para conectar la salida de un bloque a la entrada de otro, se presiona el boton izquierdo
del mouse en cualquiera de los terminales anteriores y se arrastra hacia el otro. Al
conectarsen se dibuja una linea que los une, los > desaparecen y una flecha en la
linea indica la direccion del flujo de datos. Si se quiere borrar o editar una linea se
selecciona con el mouse en cualquier lugar de ella. Todos los vertices son senalados con
pequenos cuadrados solidos. Una vez que la lnea es seleccionada se puede eliminar
del modelo presionando la tecla delete.
La simulacion de un sistema fsico en el SIMULINK depende del modelo matematico
que se tenga. Por ejemplo, un sistema lineal descrito mediante una funcion de trans-
ferencia se puede simular usando el bloque transf er f cn del subsistema linear.
Tambien se puede usar el bloque state space de la misma librera, cuando el mod-
elo es dado mediante las ecuaciones de estado y de salida. O si se tiene un conjunto
de ecuaciones que describe el comportamiento del sistema se pueden simular usando
todos los bloques disponibles tanto en al librera linear (integradores, sumadores,
ganancias, derivadores, etc.) como en la nonlinear (saturacion, reles, productos,
funciones de variables, valor absoluto, zona muerta, etc.).
348 INTRODUCCION AL SIMULINK

Nonlinear Library
Linear Library

+ . Sign Relay Backlash Saturation


+
Sum Inner
Product Quantizer Dead Zone Coulombic Rate Limiter
du/dt Friction
1/s
* Abs
Integrator Derivative
Product Abs Look-Up 2-D Look-Up
Table Table
1 K 1.317
>= AND
Gain Matrix Slider Relational Logical Combinatorial
Gain Gain Operator Operator Logic Switch
1 (s-1) MATLAB
f(u) system Function 1/s
s+1 s(s+1)
Fcn S-Function Reset
MATLAB Fcn
Transfer Fcn Zero-Pole Integrator

x' = Ax+Bu 1/s


y = Cx+Du Memory Transport Variable Limited
Delay Transport Delay Integrator
State-Space

a) Linear b) Nonlinear

Figura C.4 Subsistemas linear y nonlinear del Simulink


Cuando se tienen varias senales que se quieren ver en una misma grafica por ejemplo,
se puede usar un bloque mux que esta en la librera connections el cual sirve para
multiplexar sus entradas en un unico vector a la salida. Tambien esta en la misma
librera el bloque demux el cual separa un vector con varias senales en senales
escalares (demultiplexa).
Otros dos bloques de esta librera son: inport, el cual suministra un enlace a una
entrada externa y para linealizacion; tambien tiene el outport, que suministra un
enlace a una salida externa y sirve tambien para linealizacion.

Connections
Library
1
Inport
1
Outport

Mux
Mux
Demux
Demux

Figura C.5 Librera de connections


Si el sistema que se quiere simular es digital, se pueden usar los bloques de la librera
discrete: unit delay (retardo unitario), discrete transfer fcn (funcion de
C.3 Inicio de una simulacion 349

tranferencia discreta), discrete state space (ecuaciones estado y de salida discretas),


etc.
Cada uno de los bloques discretos tiene un muestrador interno a su entrada y un
retenedor de orden cero en su salida. Cuando bloques discretos se mezclan con bloques
analogos (continuos), la salida entre tiempos de muestreo de los bloques discretos es
mantenida constante.
Las entradas a los bloques discretos son actualizadas unicamente en los instantes de
muestreo. El tiempo de muestreo se da en el campo del tiempo de muestreo de la
caja de dialogo del bloque.

Discrete-Time Library
(z-1)
1/z
z(z-0.5)
Unit Delay
Discrete
Zero-Pole
1 1
1+2z -1 z+0.5
Filter Discrete
Transfer Fcn

x(n+1)=Ax(n)+Bu(n)
y(n)=Cx(n)+Du(n)
Discrete State-Space

Zero-Order First-Order
Hold Hold
1
z-1
Discrete-Time Discrete-Time
Integrator Limited Integrator

Figura C.6 Librera de discrete

C.3 Inicio de una simulacion


Una simulacion puede ser iniciada desde la lnea de comandos del MATLAB o del
menu del SIMULINK: simulation. Todos los metodos usan los mismos argumentos
y parametros.
A. Simulacion desde el menu simulation.
La simulacion se puede arrancar seleccionando start del menu simulation.
Los parametros de la simulacion se pueden ajustar seleccionando parameters en
el menu simulation. En los campos que all aparecen se pueden entrar numeros
o expresiones legales del MATLAB, por ejemplo, las variables tini, tf in, pasomin,
pasomax y tol las cuales se pueden definir en el espacio de trabajo del MATLAB.
Vease Fig. C.7.
350 INTRODUCCION AL SIMULINK

Figura C.7 Panel de control del Simulink


Las variables de retorno [t, x, y] son usadas para poner el tiempo, las trayectorias del
estado y de la salida en el espacio de trabajo del MATLAB.
Los tiempos de inicio y de parada de la simulacion son ajustados en las variables tini
y tf in. Los parametros de integracion tol, pasomin y pasomax controlan el error
local relativo, el mnimo y maximo intervalos de integracion de la simulacion.
Correr una simulacion desde el menu permite desarrollar ciertas operaciones interac-
tivamente durante una simulacion:
a) Cambiar los parametros de un bloque, siempre y cuando no cause un cambio en el
numero de estados, entradas o salidas para ese bloque.
b) Cambiar cualquiera de los parametros de simulacion, excepto las variables de re-
torno y el tiempo de inicio.
c) Cambiar el algoritmo de simulacion.
d) Cambiar el tiempo de muestreo para bloques discretos.
e) Simular otro sistema al mismo tiempo.
f) Seleccionar una lnea para ver su salida en un osciloscopio flotante, el cual consiste
de un bloque scope desconectado. Este muestra la salida de cualquier lnea que se
seleccione.
B. Simulacion desde la lnea de comandos del MATLAB.
Cualquier simulacion que se corra desde el menu tambien se puede correr desde la
lnea de comandos. Por ejemplo, para configurar una simulacion con parametros
identicos a los descritos en el ejemplo anterior y mostrados en la Fig C.7, se debe usar
el comando:

[t, x, y] = linsim(0 modelo0 , [tini, tf in] , ...


C.3 Inicio de una simulacion 351

xo, [tol, pasomin, pasomax]);

en donde modelo es el nombre del diagrama del sistema y linsim es una de las
tecnicas de integracion.
Las condiciones iniciales, que no se pueden ajustar desde el menu de simulation,
se definen en el vector xo. Estas condiciones iniciales prevalecen sobre las condiciones
iniciales ajustadas en los bloques, a menos que xo sea una matriz vaca.
La simulacion desde la lnea de comandos tiene las siguientes ventajas:
a) Se puede definir las condiciones iniciales, las cuales prevalecen sobre las definidas
en los bloques.
b) Si no se especifican los argumentos del lado izquierdo del comando de simulacion,
automaticamente se grafican las salidas o, cuando no hay salidas, las trayectorias del
estado.
c) Entradas externas se pueden especificar usando una variable extra ut, la cual va
al final de los parametros del comando de simulacion. ut puede ser una cadena de
caracteres o una tabla de valores. Por ejemplo ut = 0 sin0 o ut = 0 ones (2, 1)
sin (3 t + 2)0 . Si es una tabla, la primer columna debe ser un vector con los tiempos
en orden ascendente.
d) Una simulacion se puede correr desde un archivo M permitiendo que parametros
en los bloques sean cambiados interactivamente.
e) Para pequenos modelos, la simulacion se ejecuta mas rapido.
Todos los algoritmos de integracion tienen identica sintaxis de modo que los diferentes
metodos se pueden seleccionar simplemente cambiando el nombre de la funcion: euler,
rk23, rk45, linsim, adams y gear.
La velocidad y precision con las cuales se pueden resolver las ecuaciones diferenciales
no solo dependen de los parametros del intervalo de integracion y el error relativo
si no tambien del algoritmo que se escoja. Estas rutinas se pueden usar para una
variedad de problemas:
linsim usa un metodo que extrae la dinamica lineal de un sistema dejando unicamente
la dinamica no lineal del sistema para ser simulado. Este metodo trabaja muy bien
cuando el sistema a ser simulado es relativamente lineal, y se pueden tomar inter-
valos grandes de integracion. Por esto es necesario limitar el maximo intervalo de
integracion si se quieren puntos de salida razonablemente espaciados.
El metodo de euler es un metodo de intervalo unico el cual simplemente multiplica
las derivadas por el tamano del intervalo para producir la actualizacion del estado. Se
incluye por razones historicas. Se deben tomar intervalos de integracion mucho mas
pequenos que los de los otros metodos para lograr la misma precision y, por esto, no
se recomienda para la mayora de problemas.
Los metodos de Runge-Kutta, rk23 y rk45, son metodos buenos de proposito general
que trabajan bien para un buen rango de problemas. Aunque rk45 es generalmente
mas rapido y preciso que rk23, produce menos puntos de salida; por eso rk23 podra
ser preferido para graficas suaves. Son los mejores metodos cuando el sistema a ser
simulado tiene discontinuidades.
adams y gear son metodos predictores-correctores que trabajan bien con problemas
en donde las trayectorias de estado son suaves.
El metodo de gear es fundamentalmente para sistemas con mezcla de dinamicas rapida
352 INTRODUCCION AL SIMULINK

y lenta. Estos metodos no trabajan bien cuando el sistema es discontinuo.


Todos los metodos son de intervalo de integracion variable, el cual se ajusta conti-
nuamente de modo que se mantenga el error relativo. Los metodos, excepto gear y
adams, se pueden convertir a metodos de intervalo fijo haciendo que los intervalos
mnimo y maximo sean iguales.
linsim y euler son metodos de intervalo unico: un nuevo punto de salida se genera
a cada intervalo de tiempo. rk23 y rk45 son metodos de Runge-Kutta que toman
intervalos intermedios entre los puntos generados por las trayectorias de salida.
Las rutinas de adams y gear son metodos predictores-correctores los cuales toman
un numero variable de puntos para generar un punto de salida.
Todos los algoritmos de integracion (excepto euler) podran tomar pasos hacia atras
en el tiempo cuando el error de predicion calculado es mayor que el error relativo. En
este caso el intervalo de integracion es reducido pero nunca por debajo del intervalo
mnimo; por eso, es posible producir resultados imprecisos si cualquiera, el error
relativo o el mnimo intervalo de integracion, son demasiado grandes.
Sistemas puramente discretos se pueden simular usando cualquiera de los metodos
de integracion; no hay diferencia en las soluciones. Para lograr puntos de salida que
reflejen unicamente los instantes de muestreo, se debe ajustar el mnimo intervalo de
integracion a un valor mayor que el maximo tiempo de muestreo.

Ejemplo C.1 .

Este ejemplo sirve para simular el control por realimentacion de variables de estado
de la planta constituida por el pendulo invertido considerado en el Captulo 1, cuya
descripcion matematica es dada por las ecuaciones (1.16) y (1.17). Referirse tambien
al artculo de los autores Frecuencias escondidas en sistemas lineales, en la revista
Scientia et Technica, No. 5 de Abril de 1997.
Si se definen las variables de estado como:

x1 = , x2 = , x3 = y, x4 = y

entonces el modelo matematico mediante variables de estado es:



x1 0 1 0 0 x1 0
x2 a21 0 0 0
= x2 + b2 u
x3 0 0 0 1 x3 0
x4 a41 0 0 0 x4 b4

en donde:

(m + M )mgL (mL)2 g
a21 = , a41 = ,
d d
mL I + mL2
b2 = , b4 = , d = (m + M)I + mML2
d d
La Fig. C.8 muestra el diagrama del Simulink para el control del pendulo invertido,
el cual es archivado con el nombre sipend.
C.3 Inicio de una simulacion 353

ti
Reloj Tiempo
u
Seal de Control
x' = Ax+Bu x
y = Cx+Du Vector de Estado
Pndulo
Invertido
K
Ganancias de
Realimentacin

Figura C.8 Diagrama del Simulink para el control del pendulo invertido
Notese de la Fig. C.8 que:
1) La planta se simula con el bloque state space, ya que su modelo matematico
es dado mediante ecuaciones de estado y de salida.
2) La realimentacion de las variables de estado se hace a traves del bloque matrix gain
de la librera linear.
3) Las variables que se quieren observar (control y estado) se envan al espacio de
trabajo en un bloque to workspace ( Vector de Estado) para ser graficados con un
archivo tipo m o un programa que usa comandos del MATLAB que se muestra mas
adelante. Los instantes de simulacion, contenidos en el bloque clock, tambien son
enviados al espacio de trabajo para ser usados en las graficas de los resultados.
El programa que maneja la simulacion, pide las ganancias por las cuales se deben
multiplicar las variables de estado, calcula las matrices A y B y grafica los resultados
es el siguiente:
% PENDULO INVERTIDO
% Se piden las ganancias de realimentacion
k1=input(Ganancia de realimentacion para x1, k1 = )
k2=input(Ganancia de realimentacion para x2, k2 = )
k3=input(Ganancia de realimentacion para x3, k3 = )
k4=input(Ganancia de realimentacion para x4, k4 = )
% Parametros del pendulo invertido
m=0.05;M=0.5;g=9.8;L=1;
I=m*L2/3;delta=(m+M)*I+m*M*L2;
% Se calculan las matrices A y B
354 INTRODUCCION AL SIMULINK

A=[0 1 0 0;(m+M)*m*g*L/delta 0 0 0;0 0 0 1;-(m*L) 2*g/delta 0 0 0];


B=[0;-m*L/delta;0;(I+m*L 2)/delta];
% Vector de ganancias del controlador
k=[-k1 -k2 -k3 -k4];
% Se simula el sistema en lazo cerrado.
% Todas las condiciones iniciales son nulas, excepto el angulo inicial
% del pendulo que es 10 grados
linsim(sipend,[0,10],[pi/18;0;0;0],[0.001,0.01,0.01])
% Se grafica la posicion angular del pendulo
figure(1)
plot(ti,x(:,1)*180/pi,w-)
ylabel(pos. angular del pendulo, grados);xlabel(segs.)
grid on
% Se grafica el desplazamiento del carro
figure(2)
plot(ti,x(:,3),w-)
ylabel(desplazamiento del carro, metros);xlabel(segs.)
grid on
% Se grafica la fuerza de control
figure(3)
plot(ti,u,w-)
ylabel(fuerza de control, Newtons);xlabel(segs.)
grid on
Los resultados del control con k1 = 65, k2 = 24, k3 = k4 = 0, es decir sin realimentar
y y y se muestran en las Figuras C.9 y C.10. Notese que aunque la posicion angular
es controlada, el desplazamiento del carro es inestable.

10
pos. angular del pndulo, grados

0
0 2 4 6 8 10
segs.

Figura C.9 Posicion angular del pendulo


C.3 Inicio de una simulacion 355

desplazamiento del carro, metros


6

0
0 2 4 6 8 10
segs.

Figura C.10 Desplazamiento del carro


Los resultados del control realimentando todas las variables de estado con k1 =
65, k2 = 24, k3 = 8, k4 = 11, se muestran en las Figuras C.11 y C.12. Notese
que ahora la posicion angular y el desplazamiento del carro estan completamente
controlados.

10
pos. angular del pndulo, grados

-2

-4

-6
0 2 4 6 8 10
segs.

Figura C.11 Posicion angular del pendulo


356 INTRODUCCION AL SIMULINK

0.5

desplazamiento del carro, metros


0.4

0.3

0.2

0.1

0
0 2 4 6 8 10
segs.

Figura C.12 Desplazamiento del carro

Ejemplo C.2 .

Este ejemplo sirve para simular el control optimo usando realimentacion de las va-
riables de estado estimadas de una planta (motor DC y su drive) por medio de un
observador asintotico (Vease Captulo 9). Referirse al artculo de los autores Diseno
de un controlador optimo que utiliza un observador asintotico para realimentar las
variables de estado estimadas, en la revista Scientia et Technica, No. 4 de Octubre
de 1996.
El criterio de optimizacion consiste en minimizar el ndice cuadratico:
Z
J= [xt Qx + ut Ru]dt
0

para lo cual se utiliza la funcion lqr (linear quadratic regulator) de la herramienta


Control del MATLAB. Las matrices ponderantes Q y R que restringen respectiva-
mente, las variables de estado y de control, se escogen como:

1 0 .01 0
0 .1 .01 0
Q= .01 .01 .01 .01

0 0 .01 100

R = .01

Puesto que se introduce un integrador con el fin de eliminar el error de estado esta-
cionario, la planta es de cuarto orden y su modelo matematico mediante ecuaciones
de estado es descrito por las matrices:
C.3 Inicio de una simulacion 357


.1653 .2879 0 0
11.55 3.414 .9177 0
A2 =


0 0 12.3 0
1 0 0 0


0
0
B2 =
147.5 , C2 = 1 0 0 0
0

Puesto que el observador es reducido, ya que no es necesario estimar la salida del


integrador porque se tiene acceso a ella, en la determinacion de las ganancias del
observador se utilizan: la traspuesta de la matriz A1 que se obtiene eliminando en
A2 la cuarta fila y la cuarta columna, y la traspuesta de [1 0 0] que se obtiene de C2
eliminando la cuarta columna.

Seal de control u
x' = Ax+Bu Demux estadore
y = Cx+Du Al espacio de
SaturacinModelo del Demux2 trabajo3
motor Salida y
Error de
x' = Ax+Bu Mux x4 control -
y = Cx+Du 1/s +
Ganancias deMux1 I1 S2 Referencia
realimentacin
ti
Vector de estado Reloj Al espacio de
estimado trabajo2
+
-
Mux x' = Ax+Bu
y = Cx+Du Demux S1 Error del
Mux2 Observador Demux1 observador
asinttico Mux estado
Mux Altrabajo1
espacio de

Figura C.13 Diagrama de simulacion del ejemplo C.2


La Fig. C.13 muestra el diagrama de simulacion del sistema total. Notese que
el bloque state space es usado 3 veces para: simular la planta, el observador
asintotico y las ganancias de realimentacion.
Se usan multiplexores para reunir varias senales en un solo vector, y demultiplexores
para separar las senales de vectores.
Se usan los bloques to workspace para enviar varias senales y el tiempo al espacio
de trabajo con el fin de graficar algunas variables.
358 INTRODUCCION AL SIMULINK

Otros bloques utilizados son: saturation de la librera nonlinear, un sumador y


un integrador de la librera linear y el bloque step de la librera sources para
generar la senal de referencia: un escalon de amplitud 8.15 voltios.
El siguiente es el programa que carga las matrices Q, R, A2 , B2 y C2 , utiliza de
la herramienta Control las funciones lqr que se usa para optimizar y ac ker
que sirve para hallar tanto las ganancias de realimentacion de las variables de estado
como las ganancias del observador asintotico cuando los polos respectivos son dados.
Usa el metodo de integracion rk45 y grafica los resultados.
% CALCULO OPTIMO DE LAS GANANCIAS DE REALIMENTACION
% POR VARIABLES DE ESTADO PARA EL MODELO DEL MOTOR
% SE CARGAN Q Y R OPTIMOS
load qroptim
% SE CARGA PRIMERO EL MODELO DEL MOTOR
load modmotor
% SE CALCULAN LAS GANANCIAS DE REALIMENTACION K1,
% USANDO EL REGULADOR LINEAL CUADRATICO
[K1,S,E]=lqr(A2,B2,Q,R);
K1
% SE CALCULAN LAS GANANCIAS DEL OBSERVADOR ASINTOTICO L
% UTILIZANDO LA FORMULA DE ACKERMAN.
% SUS POLOS ESTAN EN EL VECTOR Po.
Po=[-10;-20;-30];
L1=acker(A1,[1;0;0],Po);
L=L1
% SE SIMULA EL SISTEMA EN LAZO CERRADO CON EL SIMULINK.
% EL PROGRAMA SE LLAMA lqrnue33.
rk45(lqrnue33,[0,4],[],[0.001,0.01,0.01])
% SE GRAFICAN LAS VARIABLES DE ESTADO ESTIMADAS, LAS REALES,
% LA SENAL DE CONTROL Y EL ERROR DEL OBSERVADOR.
for j=1:3
figure(j)
plot(ti,estado(:,j),w-)
hold on
plot(ti,estadore(:,j),w-)
grid on
hold o
xlabel(segs.)
pause
end
for j=4:5
figure(j)
plot(ti,estado(:,j),w-)
grid on
xlabel(segs.)
pause
end
C.3 Inicio de una simulacion 359

10

0
0 1 2 3 4
segs.

Figura C.14 Variables de estado x1 y xo1

80

60

40

20

-20
0 1 2 3 4
segs.

Figura C.15 Variables de estado x2 y xo2

150

100

50

-50

-100
0 1 2 3 4
segs.

Figura C.16 Variables de estado x3 y xo3


360 INTRODUCCION AL SIMULINK

10

0
0 1 2 3 4
segs.

Figura C.17 Senal de control u

-1
0 1 2 3 4
segs.

Figura C.18 Error del observador


En las Figuras C.14 a la C.18 se muestran las variables de estado estimadas compara-
das con las reales, la senal de control y el error del observador. Notese como a pesar
de que el estado energetico inicial de la planta [4.075 2.5 60] es totalmente diferente
del estado inicial del observador [0 0 0], en menos de medio segundo las variables de
estado estimadas convergen asintoticamente a las reales y la salida del sistema, x1 , al-
canza el estado estacionario en aproximadamente 3.5 segundos, haciendo seguimiento
perfecto de la senal de referencia, que en este caso es de 8.15 voltios.

También podría gustarte