Está en la página 1de 65

TEORÍA DE CONTROL

Didier Giraldo B. e Iván Tabares G.

1997
APENDICE B
PROGRAMA MATLAB

B.1 Introducción
Programa que sirve para cálculo numérico y visualización de alto desarrollo. El ambi-
ente es tal que los problemas y soluciones se expresan como se escriben matemática-
mente, sin la tradicional programación. Es un sistema interactivo cuyo elemento
básico de datos es una matriz que no requiere dimensionamiento.
MATLAB también tiene cajas de herramientas, ”toolboxes”, que resuelven clases
particulares de problemas tales como procesamiento de señales, diseño de sistemas de
control, simulación de sistemas dinámicos, identificación de sistemas, redes neurales,
sistemas de control robustos, optimización y otros (Matemática simbólica).
La cualidad mas importante del MATLAB es que es fácilmente extendible. Esto
permite crear nuestras propias aplicaciones.
El contenido de este apéndice describe:
a) Como entrar matrices simples, los elementos para construirlas, declaraciones y
variables del MATLAB.
b) Como conseguir información del espacio de trabajo y como guardarla.
c) Números y expresiones aritméticas.
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 numérica
rectangular con elementos posiblemente complejos.
Se pueden entrar de diferentes maneras:
a) Una lista explı́cita 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 explı́cita 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 declaración 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” ó ”ENTER”.
Se pueden entrar matrices desde archivos de disco si su nombre tiene extensión ·m.
Si un archivo llamado gena · m tiene las siguientes lı́neas de texto:

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

B.3 Elementos de las matrices


Estos pueden ser cualquier expresión 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 paréntesis.
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 tamaño de x se incrementa automáticamente para acomodar el nuevo


elemento y que los elementos no definidos se igualan a cero.
Se pueden construir matrices grandes usando matrices pequeñas 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 pequeñas 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 expresión. Es decir, interpreta y evalúa las expresiones
escritas. Las declaraciones son frecuentemente de la forma:
variable = expresión
ó simplemente
expresión.
Las expresiones se pueden componer de operadores y otros caracteres especiales, fun-
ciones y nombres de variables. La evaluación de la expresión 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 automáticamente crea
una variable con el nombre ans.
300 PROGRAMA MATLAB

Ejemplo B.5 .

1900/81

produce:

ans = 23.4568

Una declaración normalmente termina con ”RETURN” ó ”ENTER”. Sin embargo,


si el último caracter es punto y coma (;) antes del ”RETURN” ó ”ENTER” el
resultado no se muestra en la pantalla pero sı́ se realiza la asignación.

Ejemplo B.6 .

p = eig (A) ;

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


Si es necesaria más de una lı́nea para la expresión se puede usar · · · (3 puntos) y el
”RETURN” para indicar que continúa en la próxima lı́nea.
Se pueden formar variables y nombre de funciones con una letra, seguida por cualquier
número de letras y digitos. MATLAB recuerda sólo los primeros 19 caracteres de un
nombre. Además, distingue entre mayúsculas y minúsculas. Todos los nombres de
funciones deben ser en minúsculas.
Ası́, inv (A) invierte A, pero INV (A) se refiere a una función no definida.

B.5 Información sobre el espacio de trabajo


Para listar las variables en el espacio de trabajo escriba:
who . Para ver el tamaño 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 = 2−52 ≈ 2.22·10−16 .
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 Cómo terminar el programa y guardar el


espacio de trabajo
Para terminar el programa escribir quit ó 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 próxima 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, ó también guardar únicamente 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
también importar y exportar archivos de datos ASCII.

B.7 Números y expresiones aritméticas


Usa notación convencional decimal, con el punto decimal opcional. Se puede incluir la
potencia 10 como un factor de escala ó una unidad compleja como un sufijo. Ejemplos
de números son:

3 − 99 0.001

9.6397238 1.602e − 20 6.022e 23

2i − 3.14159i 3e5i

La precisión relativa de los números es eps que equivale a, aproximadamente, 16


digitos decimales significativos. El rango es ≈ de 10−308 hasta 10308 .
Se pueden construir expresiones con las operaciones aritméticas usuales y con reglas
de precedencia: + (suma), − (resta), ∗ (multiplicación), / (división por la derecha),
\ (división por la izquierda), ˆ (potenciación).
Los paréntesis sirven para afectar la precedencia.
La función pi calcula π (usa 4 ∗ atan (1)).
La función Inf es usada para infinito.

Ejemplo B.7 .

s = 1/0 = Inf

La variable NaN implica ”no un número”. Cálculos como Inf /Inf ó 0/0 la producen.
MATLAB maneja números 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 función interna puede ser un nombre de una variable, pero en este
caso no es disponible la función interna dentro del actual área 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 cómo se calculan ó guardan. MATLAB desarrolla todos los cálculos en doble
precisión.
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 dı́gitos decimales significativos. Los otros formatos muestran más dı́gitos
significativos ó usan notación cientı́fica.

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 División 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 ó menor que 0.001, la matriz total se muestra con un factor de escala común.

B.9 Funciones
Gran parte de la potencia del MATLAB proviene de su extensivo conjunto de fun-
ciones. Algunas son intrı́nsecas, otras son disponibles en la librerı́a de archivos exter-
nos tipo m, distribuı́da con el MATLAB (las herramientas). El usuario puede crear
sus propias funciones para aplicaciones mas especializadas (posteriormente se hablará
de los archivos m).
Usar el help para ver las diferentes categorı́as de funciones analı́ticas disponibles
en el MATLAB (matemática 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 máximo valor del vector x en y, y el ı́ndice respectivo en i.
MATLAB nunca modifica la entrada o argumentos de entrada a la función. Siempre
retorna las salidas de una función en los argumentos del miembro izquierdo.

B.10 Operaciones matriciales


0
El caracter (prima o apóstrofe) denota la transpuesta de una matriz. Si z es una
0
matriz con complejos, z es³la ´transpuesta de la conjugada z. Para la transpuesta no
0 0
conjugada, usar z. ó 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, éste es sumado ó restado de todos los
elementos del otro operando.

Ejemplo B.10 .

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

∗ denota multiplicación de matrices. Válida si hay conformabilidad en la multipli-


cación de las matrices.

B.11 División de matrices


Se usan 2 sı́mbolos: \ y /. Si A es cuadrada no singular, A\B y B/A corresponden
formalmente a la multiplicación 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
cálculo de la inversa. En general:

x = A\B es una solución a A ∗ x = B


x = B/A es una solución a x ∗ A = B

Aˆp = A · · · · · A} , si p es un entero > 1


| · A {z
p
Aˆp = 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 también funciones trascenden-
tales matriciales, tales como la matriz exponencial y la matriz logaritmo, las cuales
se definen solo para matrices cuadradas (son generalmente difı́ciles de calcular).
Una función matemática trascendental se interpreta como una función matricial si
se adiciona una m al nombre de la función, ejemplo: expm (A) y sqrtm (A). Hay 3
definidas expm, logm y sqrtm.
Otras funciones matriciales elementales incluyen:
poly, polinomio caracterı́stico.
det, determinante.
trace, la traza, y otras.

B.13 Operaciones sobre arreglos


Esto se refiere a operaciones aritméticas sobre cada elemento de una matriz.
0
Un punto (.) precediendo un operador (∗, \, /, ˆ, ) indica una operación sobre
arreglos.
B.15 Operaciones lógicas 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 multiplicación 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 lógicas


Los operadores &, | y ∼ son los operadores lógicos ”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 útiles con operaciones lógicas.
any (x) retorna 1 si cualquiera de los elementos de x son diferentes de cero, retorna
cero de otra manera.
all (x) retorna 1 sólo si todos los elementos de x son diferentes de cero. Estas funciones
son útiles 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 lógicas:
any, all, find, exist, isnan, isinf , f inite, isempty, isstr, isglobal, issparse, usar
help para saber que hacen.

B.16 Funciones matemáticas


Un conjunto de funciones matemáticas 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 trigonométricas 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 más avanzadas:
bessel, beta, gamma, rat, erf , erf inv, ellipk, ellipj.
Ası́ como las funciones elementales, las especiales también operan sobre arreglos
cuando los argumentos son matrices.
B.18 Referencia a los elementos de una matriz 307

B.17 Manipulación de vectores y matrices


Generación de vectores.
La declaración x = 1 : 5 genera un vector fila que contiene los números 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 también pueden ser negativos:

z = 6 : −1 : 1

da:
z=654321

La notación (:) permite la generación fácil de tablas. Para obtener una tabla en forma
vertical se traspone el vector fila obtenido de la notación (:), se calcula una columna
de los valores de una función 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 logarı́tmicamente espaciados, y linspace, la cual permite especificar el número 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 posición
en paréntesis. Por ejemplo A (i, j) se refiere al elemento de la i-ésima fila, j-ésima
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 supóngase que A es una matriz de 10×10, enotnces A (1 : 5, 3)
especifı́ca la submatriz de 5×1 (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 5×4 cuyos
elementos son las primeras 5 filas y las últimas 4 columnas de A.
Usar (:) (”colon”) en lugar de un ı́ndice indica todas las correspondientes filas ó
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
declaración de asignación.

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 declaración de asignación 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 declaración de asignación denota una matriz con
las mismas dimensiones de A pero con el nuevo contenido de lado derecho de la
asignación. 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 vacı́as


La declaración x = [ ] asigna una matriz de dimensión 0 × 0 a x. El uso subsecuente
de esta matriz no conduce a una condición de error, propaga matrices vacı́as.
La función exist sirve para probar la existencia de una matriz, y la función isempty
sirve para indicar si una matriz es vacı́a.
Una manera eficiente de remover filas y columnas de una matriz es asignarles una
matriz vacı́a.

Ejemplo B.20 .
310 PROGRAMA MATLAB

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

B.21 Matrices especiales


Una colección de funciones generan matrices especiales del álgebra lineal y en proce-
samiento de señales:
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 raı́ces 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 más
detalles).

B.22 Construcción de matrices más grandes


Se pueden formar matrices mas grandes de matrices pequeñas,
h delimitándolas coni
0
corchetes, [ y ]. Por ejemplo, si A es cuadrada, C = A A ; ones (size (A)) A.ˆ2
crea una matriz dos veces el tamaño de A. Las dimensiones de las matrices más
pequeñas deben ser consistentes.
Otras funciones que manipulan matrices son:
rot90, f liplr, flipud, diag, tril, triu, etc.
La función size devuelve un vector con dos elementos: el número de filas y el número
de columnas de una matriz.
La función length devuelve la longitud de un vector.
B.24 Polinomios y procesamiento de señales 311

B.23 Funciones matriciales


Factorización triangular : la función lu factoriza una matriz cuadrada con el producto
de dos matrices esencialmente triangulares. Para obtener las dos matrices utilizar:

[L, u] = lu (A)

Factorización ortogonal : la función qr, útil 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)

Descomposición en valores singulares: la asignación [U, S, V ] = svd (A) produce los


tres factores en esta descomposición (”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 asignación [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 señales


Representación 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 ecuación caracterı́stica se calcula con:

p = poly (A)

p = [1 − 6 − 72 − 27]

que es la representación del polinomio s3 − 6s2 − 72s − 27.


Las raı́ces de esta ecuación son:

r = roots (p)

 
12.1229
r =  −5.7345 
−0.3884
312 PROGRAMA MATLAB

Estas raı́ces son, por supuesto, los mismos valores propios de la matriz A. También
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 convolución de los coeficientes.

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

c = conv (a, b)

c = [4 13 28 27 18]

Se usa deconvolución 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 (evaluación polinomial), polyvalm (evaluación de un polinomio
matricial), residue (expansión en fracciones parciales), polyder, polyfit.

B.25 Procesamiento de señales


En procesamiento de señales, los vectores pueden contener datos de señales muestradas
ó secuencias. Para sistemas con múltiples 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 señales son:
abs, angle, conv, cov, deconv, f ft, if f t.
La herramienta ”signal processing” del MATLAB suminitra muchas funciones para
el procesamiento de señales.
B.27 Funciones como función 313

B.26 Filtraje de datos


La función 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 ecuación 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)
ó la función 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 función freqz retorna la respuesta frecuencial de filtros digitales.
La respuesta frecuencial es H (z) evaluada alrededor del cı́rculo 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 diseño de
filtros digitales. Sabiendo algunas técnicas de diseño de filtros, muchos métodos son
posibles. Por ejemplo, las técnicas de la transformación 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 rápida de Fourier de cada columna de
x.
if f t (x) es la transformada rápida inversa del vector x.
314 PROGRAMA MATLAB

B.27 Funciones como función


Una clase de funciones en MATLAB no trabaja con matrices numéricas, si no con
funciones matemáticas. Estas funciones como función incluyen:
a) Integración numérica.
b) Ecuaciones no lineales y optimización.
c) Solución de ecuaciones diferenciales.
MATLAB representa funciones matemáticas declarándolas como función en archivos
tipo m. Por ejemplo, la función:
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 gráfica de esa función 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 Gráfica de la función ”humps”


B.30 Funciones de ecuaciones diferenciales. 315

B.28 Integración numérica


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

q = 29.8583
Nótese que el primer argumento de la función quad es el nombre del archivo, que
contiene la función matemática, entre comillas simples.

B.29 Ecuaciones no lineales y funciones de


optimización
fmin mı́nimo de una función de una variable.
fmins mı́nimo de una función multivariable.
fzero cero de una función de una variable.
Ejemplo B.22 .

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

xm = 0.6370
es el mı́nimo de la función definida en humps.m en la región 0.5 a 1.
El valor de la función en el mı́nimo 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 optimización.
316 PROGRAMA MATLAB

B.30 Funciones de ecuaciones diferenciales


Las funciones para resolver ecuaciones diferenciales ordinarias son:
ode23 método de Runge-Kutta de orde 2/3.
ode45 método de Runge-Kutta de orde 4/5.
Sea la ecuación diferencial de Vander Pol:
.. ¡ ¢
x + x2 − 1 ẋ + x = 0

Reescribiéndola como ecuaciones de estado:


¡ ¢
ẋ1 = x1 1 − x22 − x2

ẋ2 = x1

El primer paso es crear una función 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 ecuación diferencial definida en vdpol.m en el intervalo 0 ≤ t ≤ 20, se


usará 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 Gráficos en dos dimensiones. 317

-1

-2

-3
0 5 10 15 20

Figura B.2 Gráficas de las variables de estado de la ecuación de Vander Pol


Para trabajar con ecuaciones diferenciales ó simulación, el MATLAB tiene otra her-
ramienta especializada llamada ”Simulink”, la cual se estudiará en detalle posterior-
mente.

B.31 Gráficos
El sistema de gráficos del MATLAB suministra una variedad de técnicas sofisticadas
para presentar y visualizar datos. Este sistema utiliza objetos gráficos, tales como
lı́neas 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 gráficas de alto nivel (en 2 y 3 dimensiones), la mayorı́a de las veces no es
necesario accesar estos objetos gráficos a bajo nivel.
Se describirá como usar las capacidades gráficas de alto nivel del MATLAB para
presentar los datos.

B.32 Gráficos en dos dimensiones


Existe una variedad de funciones para presentar datos como gráficos en dos dimen-
siones. Cada una acepta entradas en forma de vectores o matrices y automáticamente
escalan los ejes para acomodar los datos de entrada.
plot crea una gráfica de vectores ó columnas de matrices.
loglog crea una gráfica usando escalas logarı́tmicas en ambos ejes.
semilogx crea una gráfica usando una escala logarı́tmica para el eje x y una escala
lineal para el eje y.
semilogy grafica con escala logarı́tmica para el eje y y escala lineal para el x.
Se pueden adicionar tı́tulos, etiquetas de ejes, cuadrı́culas y texto al gráfico usando:
318 PROGRAMA MATLAB

title adiciona un tı́tulo al gráfico.


xlabel adiciona una etiqueta al eje x.
ylabel adiciona una etiqueta al eje y.
text muestra una cadena de caracteres en la localización que se especifique.
gtext coloca texto en el gráfico usando el ratón (”mouse”).
grid habilita la cuadrı́cula.
ginput permite leer valores del gráfico con el ratón.

B.33 Creación de un gráfico


Si y es un vector, plot (y) produce un gráfico 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 gráfico de y contra x.
También se pueden especificar múltiples conjuntos de datos y definir el color y estilo
de lı́nea 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 r−0 , x, y2,0 g − −0 )

plot genera un gráfico de y1 contra x y y2 contra x en los mismos ejes.


El primer conjunto de datos serı́a graficado con una lı́nea sólida roja y el segundo
conjunto con una lı́nea discontinua verde. Con el fin de mostrar las gráficas, en lugar
del comando anterior se usará:

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

el cual permite ver las gráficas 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 tı́tulo al gráfico y etiquetas a los ejes:

title (0 f ase0 )

¡ ¢
xlabel 0 x = sen (t)0
B.34 Estilos de lı́neas, 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 lı́neas, marcadores y colores


En la declaración plot (x, y, s), s es una cadena de 1, 2 ó 3 caracteres (entre comillas
simples) para especificar el estilo de lı́nea y colores en la gráfica. Los caracteres usados
se muestran en la siguiente tabla:

sı́mbolo color sı́mbolo color


y amarillo • punto
m f ucsia ◦ cı́rculo
c cyan x x
r rojo + más
g verde ∗ estrella
b azul − continua
w blanco .. punteada
k negro −. raya − punto
−− discontı́nua
si no se especifica un color, la función plot automáticamente usa los colores de arriba.
Para una lı́nea, el color por defecto es amarillo, ya que éste es el color más visible
sobre un fondo negro. Para múltiples lı́neas, la función plot utiliza en forma cı́clica
320 PROGRAMA MATLAB

los 6 primeros colores de la tabla.


Los sı́mbolos •, ◦, x, + y ∗ son marcadores escalables.

B.35 Adición de lı́neas a un gráfico existente


Se pueden adicionar lı́neas a un gráfico existente utilizando el comando hold.
Cuando se usa la declaración hold on, MATLAB no remueve las lı́neas existentes y se
pueden adicionar nuevas lı́neas en los ejes actuales. Sin embargo, los ejes se pueden
reescalar si los nuevos datos están fuera del rango de los datos anteriores. Por ejemplo,
utilizando los mismos datos del ejemplo anterior:

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

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


Estas declaraciones producen un gráfico 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 Gráficas 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 sólo. En este caso, se obtiene una gráfica de la
parte real contra la parte imaginaria.
Ası́, plot (z), en donde z es un vector ó una matriz de complejos, es equivalente a
plot (real (z) , imag (z)) .
B.38 Gráficos de matrices. 321

Ejemplo B.24 .

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


Esta gráfica se muestra en la Fig. B.5.

-1

-2

-3

-4
-5 0 5

Figura B.5 Gráfica del ejemplo B.24


Para graficar más de una matriz compleja, se deben tomar explı́citamente 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 función de dos variables que tiene máximos y
mı́nimos:
2 2
³x ´ 2 2 1 2 2
f (x, y) = 3 (1 − x)2 e−x −(y+1) − 10 − x3 − y5 e−x −y − e−(x+1) −y
5 3
El archivo peaks crea una matriz que contiene los valores de la función para valores
de x y y en el rango de −3 a 3. Los valores de x varı́an a lo largo de las columnas y
los de y a lo largo de las filas. Se puede especı́ficar el tamaño de la matriz cuadrada
pasándole 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 tamaño es 49.

B.38 Gráficos de matrices


La función 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 número de filas en Y . Por ejemplo, plot (peaks,0 w−0 )
produce un gráfico con 49 curvas. Véase Fig. B.6.

10

-5

-10
0 10 20 30 40 50

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


Esta gráfica es una vista desde la superficie peaks mirando a lo largo del eje x (es
decir, una vista desde el azimuth = 90◦ y elevación = 0◦ ).
La función plot también acepta dos vectores o dos matrices como argumentos. Por
ejemplo, plot (peaks, rot90 (peaks) ,0 w−0 ) . Véase Fig. B.7.

10

-5

-10
-10 -5 0 5 10

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


B.38 Gráficos de matrices. 323

En general, si plot es usada con dos argumentos y si X ó Y tienen más de una fila ó
columna, entonces:
a) Si Y es una matriz y x es un vector, plot (x, Y ) grafica sucesivamente las filas ó
columnas de Y contra el vector x, usando diferentes colores ó tipos de lı́neas para
cada una. La orientación por filas ó columnas se selecciona dependiendo del número
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 w−0 )


Véase 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 tamaño, plot (X, Y ) grafica las columnas de X
contra las columnas de Y.
Se puede usar la función plot con múltiples pares de argumentos matriciales:

plot (X1 , Y1 , X2 , Y2 , · · ·)
Cada par X −Y es graficado generando múltiples 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) ;

después de usar la declaración mweather, almacena las columnas de temperatura y


precipitación en vectores individuales.
Graficar la temperatura contra el número del mes y la precipitación contra el número
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 Gráficas del ejemplo B.26


La Fig. B.9 muestra las dos curvas.
Las siguientes declaraciones producen un gráfico como se muestra en la Fig. B.10 que
muestra la relación entre temperatura y precipitación mes a mes:
B.39 Funciones especiales para gráficas 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 Relación entre temperatura y precipitación cada mes


La declaración axis en el ejemplo anterior adiciona espacio extra al gráfico, definien-
do explı́citamente el escalamiento de los ejes a valores mayores que el rango de datos.
Esto permite que el texto permanezca dentro de los lı́mites del cuadro del gráfico.
326 PROGRAMA MATLAB

B.39 Funciones especiales para gráficas en dos


dimensiones
bar crea una gráfica de barras.
compass crea una gráfica de ángulos y magnitudes de números complejos con flechas
emanando desde el origen.
errorbar crea una gráfica con barras de error.
feather crea una gráfica de ángulos y magnitudes de números complejos con flechas
emanando desde puntos igualmente espaciados a lo largo de un eje horizontal.
fplot evalua una función y grafica los resultados.
hist crea un histograma.
polar crea una gráfica en coordenadas polares.
quiver crea una gráfica de un gradiente u otro campo vectorial.
rose crea un histograma de ángulos.
stairs crea una gráfica similar a una de barras, pero sin las lı́neas internas.
fill dibuja un polı́gono y lo llena con colores sólidos ó interpolados.

Ejemplo B.27 .
Crear la función:

f unction y = f ofx (x)

y = cos (tan (pi ∗ x)) ;

con el nombre f of x.m. Después, dentro del MATLAB correr:

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

para graficar la función correspondiente en el intervalo (0, 1) .


Esta gráfica 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 gráficos 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 Gráficos en 3 dimensiones. Gráficos de lı́neas. 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 Gráficos del ejemplo B.27


La función f plot tiene la ventaja de que muestrea la función a intervalos más cercanos
en la región en donde la rata de cambio es mayor, generando ası́ una figura más precisa
cerca a x = 0.5 en este caso particular.

B.40 Gráficos en 3 dimensiones. Gráficos de lı́neas.


El análogo tridimensional a la función plot es plot3. Si x, y, z son 3 vectores de la
misma longitud, plot3 (x, y, z) genera una lı́nea que pasa a través de los puntos cuyas
coordenadas son los elementos de x, y, z y luego produce una proyección bidimensional
de esa lı́nea 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. Véase Fig. B.12.

40

30

20

10

0
1
1
0
0
-1 -1

Figura B.12 Figura del ejemplo B.28


También 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 función plot.
O también se pueden combinar los gráficos definidos por las cuádruples (x, y, z, s) :

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

en donde todas las xi, yi y zi son vectores ó matrices y las si cadenas como en la
función plot.

B.41 ”Meshgrid”
MATLAB define una superficie en forma de malla mediante las coordenadas z de
puntos por encima de una cuadrı́cula rectangular en el plano x − y. La gráfica se
forma uniendo puntos adyacentes con lı́neas rectas.
Estas superficies son útiles para visualizar matrices que son demasiado grandes para
mostrar en forma numérica, ó para graficar funciones de dos variables.
El primer paso para mostrar (en pantalla) una función 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 función. Después se usan estas matrices para
evaluar y graficar la función.
La función 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 dimensión n × m y Y también.

Ejemplo B.29 .
Considere la función sinc (r) = sin(r)
r que produce la superficie popularmente conocida
como el ”sombrero” como se muestra en la Fig. B.13. Se evaluará esta función 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 gráficas 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 más información.

B.42 Pseudocolor en gráficas


pcolor (Z) muestra en cada punto Z(i, j) un color. Éste se determina de un mapa de
colores con un ı́ndice (número) 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 número 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 gráficos 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 están en el rango [Cmı́n, Cmáx], a un arreglo de ı́ndices, K, en el rango
[1, m] .
Los valores de Cmı́n y Cmáx son min (min (C)) y max (max (C)), o son especificados
por caxis. El mapeo es lineal, con Cmı́n mapeando el ı́ndice 1 y Cmáx 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 información sobre


la misma escala. De hecho, a veces es útil superponer las dos. Para eliminar las lı́neas
de la cuadrı́cula en el gráfico pcolor se debe cambiar el modo ”shading” a f lat. Para
usar lı́neas negras para todos los contornos, especificar 0 k0 para su color.
B.43 Gráficas 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 también maneja la función image que es similar a pcolor. Ambas pro-
ducen figuras bidimensionales con valores de brillo ó color proporcionales a los elemen-
tos de una matriz dada. Sin embargo, image está diseñada para mostrar fotografı́as,
pinturas, etc., mientras pcolor es diseñada para visualizar objetos matemáticos más
abstractos. Usar help para más información.

B.43 Gráficas 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 cuadrı́cula 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 cuadriláteros en malla de color constante,
delineados con lı́neas negras. La función shading permite eliminar las lı́neas en malla
ó escoger interpolación 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) ; % función 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 localización 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 más información.
B.44 Algunas funciones para gráficos de propósito general. 333

B.44 Algunas funciones para gráficos de propósito


general
La función view permite especificar el ángulo desde el cual se ve un gráfico tridimen-
sional. Se debe especificar el azimuth y la elevación 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 función es: view(azimuth, elevación). Como ejemplo se puede
utilizar la matriz peaks para ver su superficie desde varios puntos.

Figura B.15 Convención para los ángulos azimuth y elevación


La función axis permite seleccionar el escalamiento, orientación y relación de ejes de
los gráficos.
Generalmente, el MATLAB encuentra el máximo y el mı́nimo de los datos a graficar y
escoger una caja apropiada para el gráfico (lı́mites). Los lı́mites de los ejes se pueden
cambiar ası́:
axis ([xmı́n xmáx ymı́n ymáx zmı́n zmáx])
Para gráficos bidimensionales se omiten los últimos 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 lı́mites 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 relación ancho-altura del gráfico y la relación
entre las escalas de los ejes x y y.
axis manipula el objeto axes, el cual es un objeto gráfico.
subplot (m, n, p) divide la ventana de la pantalla para m × n subgráficos y escoge
el gráfico p como el actual. Los gráficos se numeran a lo largo de la fila, luego la
segunda, etc.
Usar la función figure sin argumentos abre una nueva ventana.
figure (N) hace la figura N la figura actual.
Usar help para información sobre la función moviein, movie.
La función ginput permite usar el mouse o las teclas de dirección para escoger puntos
en un gráfico. Ella retorna las coordenadas de la posición del ”señalador”, ya sea
cuando el botón del mouse o una tecla se presiona.
Las cualidades gráficas discutidas hasta ahora comprenden la interfase a alto nivel
del sistema gráfico del MATLAB. Sin embargo, este sistema también suministra un
conjunto de funciones a bajo nivel que permiten crear y manipular lı́neas, superficies
y otros objetos gráficos que el MATLAB usa para producir gráficos sofisticados.
Para más información referirse a la guı́a del usuario del MATLAB (págs 2-101 a
2-123).

B.45 Flujo de control


MATLAB tiene declaraciones de flujo de control como las encontradas en la mayorı́a
de los lenguajes de computador. Esto permite que el MATLAB sea utilizado como
un lenguaje de programación de alto nivel.

B.46 Lazos f or
La forma general para el lazo f or es:
f or v = expresión
declaraciones
end
La expresión 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 más clara
de lograr lo mismo es ası́:
E = expresión ;
[m, n] = size (E) ;
for J = 1 : n
v = E (: , J) ;
declaraciones
end
Usualmente, expresión 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 escalón unitario de un sistema de segundo orden con frecuencia
natural 1 rad
seg y relación 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 escalón
% 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 expresión
declaraciones
end
Las declaraciones se ejecutan repetidamente siempre y cuando todos los elementos
en la matriz expresión sean diferentes de cero. La matriz expresión es casi siempre
una expresión relacional 1 × 1, en este caso expresión 6= 0 corrsponde a true (cierto).
Cuando la matriz expresión 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 número de 100 dı́gitos.
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 cálculo se puede dividir en tres casos, dependiendo del signo y
la paridad de n :
n = input(0 Entre un número 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 número 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 algún 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 última parte del nombre del archivo
(la extensión). 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 referencı́as 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 más extensible el MATLAB. Gran parte
de la potencia del MATLAB consiste en que permite crear nuevas funciones que re-
suelven problemas especı́ficos 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 útiles para desarrollar análisis, resolver problemas o diseñar largas
secuencias de comandos que se vuelven difı́ciles 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 números 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 números de F ibonacci y crea una gráfica.
Después de que la ejecución del archivo está 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 más complicadas. Cuando se invoca el MATLAB, automáticamente
ejecuta un archivo llamado ”matlabrc.m”,el cual corre el archivo ”startup.m”, si éste
existe, en el cual se pueden entrar constantes fı́sicas, factores de conversión, o cualquier
otra cosa que se quiera predefinir en el espacio de trabajo.

B.51 Archivos función


Un archivo m que contiene la palabra ”function” al comienzo de la primera lı́nea es
un archivo función. Este difiere del ”script” en que se le pueden pasar argumentos,
y las variables definidas y manipuladas dentro del archivo son locales a la función y
no operan globalmente en el espacio de trabajo. Los archivos función son útiles 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 función:

function [med, desv] = media (x)


% Retorna el valor medio y la desviación estándar de los elementos del vector x.
% Retorna un vector fila que contiene el valor medio y la desviación estándar
% 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

Nótese que:
1) La primera lı́nea declara el nombre ”function”, los argumentos de entrada x (si
es más de uno, se separan por comas) y los argumentos de salida, med y desv.
2) El sı́mbolo ” % ” indica que el resto de la lı́nea es un comentario y debe ser ignorada.
3) Las primeras pocas lı́neas documentan el archivo M y la muestra cuando se escribe
”help media ”.
4) Las variables m, n, med y desv son locales a la función media y no existen en
el espacio de trabajo después de que media ha terminado (o si existı́an previamente,
permanecen sin cambiar).
5) El vector z que contenı́a los enteros de 1 a 99 fué pasado o copiado en media en
donde llega a ser una variable local llamada x.

B.52 Ayuda en lı́nea para los archivos m


Se puede crear ayuda en lı́nea para los archivos m entrando texto en una o más lı́neas
de comentario, empezando con la segunda lı́nea del archivo.
Ası́ cuando se entra help media (ver ejemplo anterior), las lı́neas 2, 3 y 4 se muestran.
Son las primeras lı́neas contiguas de comentarios. El sistema de ayuda ignora las lı́neas
que aparecen posteriores a cualquier declaración ejecutable o aún una lı́nea 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 útil para depuración o para demostraciones.
La función 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 expresión


entrada por el teclado.
La función keyboard invoca el teclado del computador como un ”script”. Cuando
se usa en archivos m es útil para depuración o para modificar variables durante la
ejecución.
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 función 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 única de esa variable. Cualquier
asignación a esa variable, en cualquier función, es disponible a todas las otras funciones
que la declaran global. El formato es:
global Nombrevariable1 Nombrevariable2 ...
En las funciones esta declaración se puede hacer después de las primeras lı́neas 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 función ”eval”. 341

abs (s)

ans =
72 111 108 97

la función setstr permite mostrar el vector como texto en lugar de mostrar los valores
ASCII. disp muestra el texto en la variable.
Otras funciones útiles 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 numéricos son convertidos a caracteres con sprintf , num2str, int2str. Los
valores numéricos son a veces concatenados para poner tı́tulos en gráficos que incluyen
valores numéricos:

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

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

B.56 La función ”ev al”


La función 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 expresión o declaración 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 declaración o como un factor en una expresión.

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 número de elemento : 0 ) ;

eval (elementos (K, :))

Nótese que el número de columnas en elementos implica que cada fila debe tener el
mismo número 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 máxima 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 números 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 versión con vectores del mismo código es:

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

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


cando los vectores en los cuales los resultados son almacenados. Por ejemplo, al incluir
la primer declaración que usa la función zeros, el lazo f or se ejecuta mas rápido 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 tamaño


del vector y a un elemento más grande cada vez en el lazo de iteración. Si el vector
es prelocalizado, se elimina este paso y ejecuta más rápido.
El esquema de prelocalización tiene un segundo beneficio: usa memoria más eficiente-
mente. Durante una sesión del MATLAB, la memoria tiende a fragmentarse. Aunque
se haya dejado mucha memoria libre, podrı́a no haber suficiente espacio contiguo para
sostener una variable grande. Ası́, preubicación ayuda a reducir la fragmentación.

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.
Información adicional se puede encontrar en la guı́a del usuario del MATLAB.
APENDICE C
INTRODUCCION AL SIMULINK

C.1 Introducción
El SIMULINK es una herramienta del MATLAB que permite simular sistemas tanto
lineales como no lineales interactuando con el usuario de una manera gráfica.
Para entrar al programa se escribe simulink una vez se esté dentro del MATLAB.
Se presenta un pantallazo con varias ventanas (cajas) que contienen los diferentes
bloques de simulación. 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 Librerı́as del Simulink


Una sesión tı́pica comienza por definir un modelo o traer un modelo ya definido y
luego se procede al análisis del modelo.
Los modelos se crean y editan principalmente con comandos manejados por el ”mouse”.
Después de definir un modelo se puede analizar escogiendo opciones de los menús del
SIMULINK o entrando comandos en la ventana de comandos del MATLAB.
El progreso de una simulación se puede ver mientras está corriendo, y los resultados
finales se pueden hacer disponibles en el área de trabajo del MATLAB cuando la
simulación está completa.

345
346 INTRODUCCION AL SIMULINK

C.2 Construcción de un modelo


La definición de un sistema en el SIMULINK es como la representación del sistema
en diagramas de bloques, en donde éstos son copiados de las librerı́as de bloques del
SIMULINK (las anteriores ventanas) o las que se contruyan. La librerı́a estándar se
organiza en varios subsistemas, agrupando bloques de acuerdo a su comportamiento,
por ejemplo ”sources” contiene bloques para generar señales. Se pueden abrir pre-
sionando dos veces el botón izquierdo (doble click) del mouse. Los bloques que allı́
se presentan se pueden copiar donde se desee, por ejemplo en el modelo que se esté
creando, señalizandolos con el botón izquierdo del mouse y arrastrándolo (sin soltar
el botón).
Un sistema nuevo se puede abrir seleccionando ”new” del menú ”file”, a lo cual
aparece una ventana vacı́a.
La mayorı́a de los bloques se pueden abrir para mostrar sus parámetros en ventanas
separadas. Éstas permiten controlar el comportamiento del bloque modificando los
valores de sus parámetros. Por ejemplo, el bloque ”signal generator” (generador de
señales) del subsistema ”sources” tiene como parámetros 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 señal
o señales que se deseen del MATLAB en una matriz cuya primer columna tiene los
instantes de tiempo y las demás columnas las señales 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 Librerı́a de ”sources”


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

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


(al espacio de trabajo) el cual sirve para mandar las señales (respuestas, por ejemplo)
que se deseen de la simulación 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 simulación. 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 Librerı́a 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 botón 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 dirección 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 señalados con
pequeños cuadrados sólidos. Una vez que la lı́nea es seleccionada se puede eliminar
del modelo presionando la tecla ”delete”.
La simulación de un sistema fı́sico en el SIMULINK depende del modelo matemático
que se tenga. Por ejemplo, un sistema lineal descrito mediante una función de trans-
ferencia se puede simular usando el bloque ”transf er f cn” del subsistema ”linear”.
También se puede usar el bloque ”state − space” de la misma librerı́a, 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 librerı́a ”linear” (integradores, sumadores,
ganancias, derivadores, etc.) como en la ”nonlinear” (saturación, relés, 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 señales que se quieren ver en una misma gráfica por ejemplo,
se puede usar un bloque ”mux” que está en la librerı́a ”connections” el cual sirve para
multiplexar sus entradas en un único vector a la salida. También está en la misma
librerı́a el bloque ”demux” el cual separa un vector con varias señales en señales
escalares (demultiplexa).
Otros dos bloques de esta librerı́a son: ”inport”, el cual suministra un enlace a una
entrada externa y para linealización; también tiene el ”outport”, que suministra un
enlace a una salida externa y sirve también para linealización.

Connections
Library
1
Inport
1
Outport

Mux
Mux
Demux
Demux

Figura C.5 Librerı́a de ”connections”


Si el sistema que se quiere simular es digital, se pueden usar los bloques de la librerı́a
”discrete”: ”unit delay” (retardo unitario), ”discrete transfer fcn” (función de
C.3 Inicio de una simulación 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
análogos (continuos), la salida entre tiempos de muestreo de los bloques discretos es
mantenida constante.
Las entradas a los bloques discretos son actualizadas únicamente en los instantes de
muestreo. El tiempo de muestreo se da en el campo del tiempo de muestreo de la
caja de diálogo 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 Librerı́a de ”discrete”

C.3 Inicio de una simulación


Una simulación puede ser iniciada desde la lı́nea de comandos del MATLAB o del
menú del SIMULINK: ”simulation”. Todos los métodos usan los mismos argumentos
y parámetros.
A. Simulación desde el menú ”simulation”.
La simulación se puede arrancar seleccionando ”start” del menú ”simulation”.
Los parámetros de la simulación se pueden ajustar seleccionando ”parameters” en
el menú ”simulation”. En los campos que allı́ aparecen se pueden entrar números
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.
Véase 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 simulación son ajustados en las variables tini
y tf in. Los parámetros de integración tol, pasomin y pasomax controlan el error
local relativo, el mı́nimo y máximo intervalos de integración de la simulación.
Correr una simulación desde el menú permite desarrollar ciertas operaciones interac-
tivamente durante una simulación:
a) Cambiar los parámetros de un bloque, siempre y cuando no cause un cambio en el
número de estados, entradas o salidas para ese bloque.
b) Cambiar cualquiera de los parámetros de simulación, excepto las variables de re-
torno y el tiempo de inicio.
c) Cambiar el algoritmo de simulación.
d) Cambiar el tiempo de muestreo para bloques discretos.
e) Simular otro sistema al mismo tiempo.
f) Seleccionar una lı́nea para ver su salida en un ”osciloscopio flotante”, el cual consiste
de un bloque ”scope” desconectado. Este muestra la salida de cualquier lı́nea que se
seleccione.
B. Simulación desde la lı́nea de comandos del MATLAB.
Cualquier simulación que se corra desde el menú también se puede correr desde la
lı́nea de comandos. Por ejemplo, para configurar una simulación con parámetros
idénticos 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 simulación 351

xo, [tol, pasomin, pasomax]);

en donde ”modelo” es el nombre del diagrama del sistema y linsim es una de las
técnicas de integración.
Las condiciones iniciales, que no se pueden ajustar desde el menú 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 vacı́a.
La simulación desde la lı́nea 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 simulación,
automáticamente 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 parámetros del comando de simulación. 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 simulación se puede correr desde un archivo M permitiendo que parámetros
en los bloques sean cambiados interactivamente.
e) Para pequeños modelos, la simulación se ejecuta más rápido.
Todos los algoritmos de integración tienen idéntica sintaxis de modo que los diferentes
métodos se pueden seleccionar simplemente cambiando el nombre de la función: euler,
rk23, rk45, linsim, adams y gear.
La velocidad y precisión con las cuales se pueden resolver las ecuaciones diferenciales
no sólo dependen de los parámetros del intervalo de integración y el error relativo
si no también del algoritmo que se escoja. Estas rutinas se pueden usar para una
variedad de problemas:
linsim usa un método que extrae la dinámica lineal de un sistema dejando únicamente
la dinámica no lineal del sistema para ser simulado. Este método trabaja muy bien
cuando el sistema a ser simulado es relativamente lineal, y se pueden tomar inter-
valos grandes de integración. Por esto es necesario limitar el máximo intervalo de
integración si se quieren puntos de salida razonablemente espaciados.
El método de euler es un método de intervalo único el cual simplemente multiplica
las derivadas por el tamaño del intervalo para producir la actualización del estado. Se
incluye por razones históricas. Se deben tomar intervalos de integración mucho más
pequeños que los de los otros métodos para lograr la misma precisión y, por ésto, no
se recomienda para la mayorı́a de problemas.
Los métodos de Runge-Kutta, rk23 y rk45, son métodos buenos de propósito general
que trabajan bien para un buen rango de problemas. Aunque rk45 es generalmente
más rápido y preciso que rk23, produce menos puntos de salida; por eso rk23 podrı́a
ser preferido para gráficas ”suaves”. Son los mejores métodos cuando el sistema a ser
simulado tiene discontinuidades.
adams y gear son métodos predictores-correctores que trabajan bien con problemas
en donde las trayectorias de estado son suaves.
El método de gear es fundamentalmente para sistemas con mezcla de dinámicas rápida
352 INTRODUCCION AL SIMULINK

y lenta. Estos métodos no trabajan bien cuando el sistema es discontinuo.


Todos los métodos son de intervalo de integración variable, el cual se ajusta conti-
nuamente de modo que se mantenga el error relativo. Los métodos, excepto gear y
adams, se pueden convertir a métodos de intervalo fijo haciendo que los intervalos
mı́nimo y máximo sean iguales.
linsim y euler son métodos de intervalo único: un nuevo punto de salida se genera
a cada intervalo de tiempo. rk23 y rk45 son métodos de Runge-Kutta que toman
intervalos intermedios entre los puntos generados por las trayectorias de salida.
Las rutinas de adams y gear son métodos predictores-correctores los cuales toman
un número variable de puntos para generar un punto de salida.
Todos los algoritmos de integración (excepto euler) podrı́an tomar pasos hacia atrás
en el tiempo cuando el error de predición calculado es mayor que el error relativo. En
este caso el intervalo de integración es reducido pero nunca por debajo del intervalo
mı́nimo; por eso, es posible producir resultados imprecisos si cualquiera, el error
relativo o el mı́nimo intervalo de integración, son demasiado grandes.
Sistemas puramente discretos se pueden simular usando cualquiera de los métodos
de integración; no hay diferencia en las soluciones. Para lograr puntos de salida que
reflejen únicamente los instantes de muestreo, se debe ajustar el mı́nimo intervalo de
integración a un valor mayor que el máximo tiempo de muestreo.

Ejemplo C.1 .

Este ejemplo sirve para simular el control por realimentación de variables de estado
de la planta constituida por el péndulo invertido considerado en el Capı́tulo 1, cuya
descripción matemática es dada por las ecuaciones (1.16) y (1.17). Referirse también
al artı́culo 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 = ẏ

entonces el modelo matemático mediante variables de estado es:


      
ẋ1 0 1 0 0 x1 0
 ẋ2   a21 0 0 0     
 =   x2  +  b2  u
 ẋ3   0 0 0 1   x3   0 
ẋ4 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 péndulo invertido,
el cual es archivado con el nombre ”sipend”.
C.3 Inicio de una simulación 353

ti
Reloj Tiempo
u
Señal de Control
x' = Ax+Bu x
y = Cx+Du Vector de Estado
Péndulo
Invertido
K
Ganancias de
Realimentación

Figura C.8 Diagrama del Simulink para el control del péndulo invertido
Nótese de la Fig. C.8 que:
1) La planta se simula con el bloque ”state − space”, ya que su modelo matemático
es dado mediante ecuaciones de estado y de salida.
2) La realimentación de las variables de estado se hace a través del bloque ”matrix gain”
de la librerı́a ”linear”.
3) Las variables que se quieren observar (control y estado) se envı́an 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 más
adelante. Los instantes de simulación, contenidos en el bloque ”clock”, también son
enviados al espacio de trabajo para ser usados en las gráficas de los resultados.
El programa que maneja la simulación, 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:
% PÉNDULO INVERTIDO
% Se piden las ganancias de realimentación
k1=input(’Ganancia de realimentación para x1, k1 = ’)
k2=input(’Ganancia de realimentación para x2, k2 = ’)
k3=input(’Ganancia de realimentación para x3, k3 = ’)
k4=input(’Ganancia de realimentación para x4, k4 = ’)
% Parámetros del péndulo invertido
m=0.05;M=0.5;g=9.8;L=1;
I=m*Lˆ2/3;delta=(m+M)*I+m*M*Lˆ2;
% 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 ángulo inicial
% del péndulo que es 10 grados
linsim(’sipend’,[0,10],[pi/18;0;0;0],[0.001,0.01,0.01])
% Se grafica la posición angular del péndulo
figure(1)
plot(ti,x(:,1)*180/pi,’w-’)
ylabel(’pos. angular del péndulo, 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 ẏ se muestran en las Figuras C.9 y C.10. Nótese que aunque la posición angular
es controlada, el desplazamiento del carro es inestable.

10
pos. angular del péndulo, grados

0
0 2 4 6 8 10
segs.

Figura C.9 Posición angular del péndulo


C.3 Inicio de una simulación 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. Nótese
que ahora la posición angular y el desplazamiento del carro están completamente
controlados.

10
pos. angular del péndulo, grados

-2

-4

-6
0 2 4 6 8 10
segs.

Figura C.11 Posición angular del péndulo


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 óptimo usando realimentación de las va-
riables de estado estimadas de una planta (motor DC y su ”drive”) por medio de un
observador asintótico (Véase Capı́tulo 9). Referirse al artı́culo de los autores ”Diseño
de un controlador óptimo que utiliza un observador asintótico para realimentar las
variables de estado estimadas”, en la revista Scientia et Technica, No. 4 de Octubre
de 1996.
El criterio de optimización consiste en minimizar el ı́ndice cuadrático:
Z ∞
J= [xt Qx + ut Ru]dt
0

para lo cual se utiliza la función ”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 matemático mediante ecuaciones
de estado es descrito por las matrices:
C.3 Inicio de una simulación 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 élla, en la determinación 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.

Señal de control u
x' = Ax+Bu Demux estadore
y = Cx+Du Al espacio de
SaturaciónModelo del Demux2 trabajo3
motor Salida y
Error de
x' = Ax+Bu Mux x4 control -
y = Cx+Du 1/s +
Ganancias deMux1 I1 S2 Referencia
realimentación
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
asintótico Mux estado
Mux Altrabajo1
espacio de

Figura C.13 Diagrama de simulación del ejemplo C.2


La Fig. C.13 muestra el diagrama de simulación del sistema total. Nótese que
el bloque ”state − space” es usado 3 veces para: simular la planta, el observador
asintótico y las ganancias de realimentación.
Se usan multiplexores para reunir varias señales en un sólo vector, y demultiplexores
para separar las señales de vectores.
Se usan los bloques ”to workspace” para enviar varias señales 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 librerı́a ”nonlinear”, un sumador y


un integrador de la librerı́a ”linear” y el bloque ”step” de la librerı́a ”sources” para
generar la señal de referencia: un escalón 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 realimentación de las variables de estado
como las ganancias del observador asintótico cuando los polos respectivos son dados.
Usa el método de integración ”rk45” y grafica los resultados.
% CÁLCULO ÓPTIMO DE LAS GANANCIAS DE REALIMENTACIÓN
% POR VARIABLES DE ESTADO PARA EL MODELO DEL MOTOR
% SE CARGAN Q Y R ÓPTIMOS
load qroptim
% SE CARGA PRIMERO EL MODELO DEL MOTOR
load modmotor
% SE CALCULAN LAS GANANCIAS DE REALIMENTACIÓN K1,
% USANDO EL REGULADOR LINEAL CUADRÁTICO
[K1,S,E]=lqr(A2,B2,Q,R);
K1
% SE CALCULAN LAS GANANCIAS DEL OBSERVADOR ASINTÓTICO L
% UTILIZANDO LA FÓRMULA DE ACKERMAN.
% SUS POLOS ESTÁN 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 SEÑAL 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 off
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 simulación 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 Señal 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 señal de control y el error del observador. Nótese como a pesar
de que el estado energético 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 asintóticamente a las reales y la salida del sistema, x1 , al-
canza el estado estacionario en aproximadamente 3.5 segundos, haciendo seguimiento
perfecto de la señal de referencia, que en este caso es de 8.15 voltios.

También podría gustarte