Vous êtes sur la page 1sur 87

Universidad del Zulia

ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

Introduccin
Este curso de introduccin a MatLab est orientado a estudiantes de ingeniera
inters por la programacin. Los conocimientos de ingeniera requeridos no
demasiado altos ya que est pensado para estudiantes de todos los cursos. Las
primeras lecciones servirn de repaso para los estudiantes de cursos avanzados y
actuales para los estudiantes de los primeros cursos.

con
son
dos
muy

Los conocimientos que hay que tener sobre ordenadores son los bsicos. Este curso
est pensado para dotar a los asistentes con un instrumento de proceso y clculo. La
razn fundamental por la que esto es importante en el anlisis de ingeniera (al igual
que en otras disciplinas) es que en muchas ocasiones las modernas teoras y los
modelos en las que stas se sustentan no producen soluciones analticas y hay que
buscar por tanto soluciones numricas a los problemas que plantean.
Otra razn de importancia es que incluso en el caso en que la teora produzca
soluciones analticas a veces es conveniente realizar simulaciones de los modelos o
presentar los resultados de un modo que requiere el proceso de datos para problemas
muy particulares.
Un lenguaje de programacin como MatLab permite resolver todos los problemas que
resuelven paquetes de programacin diseados para propsitos generales y adems
permite resolver tambin los problemas particulares que se nos planteen para los
cuales no existen paquetes. MatLab es un lenguaje de programacin tan flexible como
Fortran y, aunque por ser un lenguaje interpretado sea ms lento que Fortran o C,
tiene unas capacidades grficas y una sencillez de manejo que lo hacen perfecto para
iniciarse en la programacin. Adems las ltimas versiones de MatLab permiten el diseo
de interfaces grficas de usuario (gui) que nos permiten disear entornos grficos muy
fciles de usar por aquellos a los que nuestros programas estn dirigidos.
En este curso vamos a ver los comandos bsicos de programacin e iremos amenizando el
aprendizaje con ejercicios de modelos sencillos, para que al tiempo que aprendemos a
manejar el lenguaje vayamos viendo su utilidad con problemas concretos de ingeniera.
Una vez que tengamos los conocimientos bsicos estaremos en condiciones de subir un
nivel con la versin MatLab 6.5 en la que existen una serie de bibliotecas para una
variedad sorprendente de problemas entre los que se encuentran el anlisis de seales,
matemticas control, redes neuronales y un largsimo etctera.
No cabe ninguna duda de que este instrumento de trabajo tiene valor en el mercado y
por tanto es bueno acostumbrarse a manejarlo con soltura. La notacin a utilizar en el
texto indicar en negrita nombres de comandos interpretables por MatLab como disp o
nombres de archivos que MatLab puede leer como programa.m.

El autor

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

Tabla de contenido

Capitulo I:
Informacin general e introduccin al programa Matlab
(Lo bsico antes de comenzar)

ACERCA DE ESTE MANUAL


QUE ES MATLAB ???
Arranque y espacio de trabajo
USO DEL HELP
CONTROL DE LOS FORMATOS DE SALIDA Y DE OTRAS OPCIONES DE MATLAB
OPERACIONES CON MATRICES Y VECTORES
DEFINICIN DE MATRICES DESDE TECLADO
OPERACIONES CON MATRICES
TIPOS DE MATRICES PREDEFINIDOS
FORMACIN DE UNA MATRIZ A PARTIR DE OTRAS
NMEROS REALES DE DOBLE PRECISIN
NMEROS COMPLEJOS: FUNCIN COMPLEX
CADENAS DE CARACTERES
VARIABLES Y EXPRESIONES MATRICIALES
OPERADOR DOS PUNTOS (:)
FUNCIONES MATEMTICAS ELEMENTALES QUE OPERAN DE MODO ESCALAR
FUNCIONES QUE ACTAN SOBRE VECTORES
FUNCIONES QUE ACTAN SOBRE MATRICES
FUNCIONES MATRICIALES ESPECIALES
FUNCIONES DE FACTORIZACIN Y/O DESCOMPOSICIN MATRICIAL
MS SOBRE OPERADORES RELACIONALES CON VECTORES Y MATRICES
FUNCIONES PARA CLCULOS CON POLINOMIOS
OTROS TIPOS DE DATOS DE MATLAB
CADENAS DE CARACTERES
GRFICOS BIDIMENSIONALES
FUNCIN PLOT
ESTILOS DE LNEA Y MARCADORES EN LA FUNCIN PLOT
AADIR LNEAS A UN GRFICO YA EXISTENTE
COMANDO SUBPLOT
CONTROL DE LOS EJES
FUNCIN LINE()
CONTROL DE VENTANAS GRFICAS: FUNCIN FIGURE
Otras funciones grficas 2-D
FUNCIN FPLOT
FUNCIN FILL PARA POLGONOS
ENTRADA DE PUNTOS CON EL RATN
GRAFICOS 2D Y 3D
Graficas de curvas dadas en coordenadas polares y parametricas.
Comandos bsicos de programacin
COMO HACER UN PROGRAMA EN MATLAB (GENERALIDADES)
PROGRAMACIN DE MATLAB
BIFURCACIONES Y BUCLES
Comando END
Comando IF
Comando WHILE
Comando FOR
Comando PLOT
Funciones de dos variables
Comando DISP
Comando INPUT
FICHEROS *.M
FICHEROS DE COMANDOS (SCRIPTS)
RECOMENDACIONES GENERALES DE PROGRAMACIN

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

Capitulo II:
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
Introduccin
Tratamiento mediante funciones de transferencia. (Sistemas continuos)
Dominio Temporal
Dominio Frecuencial
Respuesta en frecuencia
Mrgenes de estabilidad
Efectos de los retardos
Comandos relacionados con operaciones de bloques
Lugar de las races
Estudio temporal y frecuencial de sistemas de primer y segundo orden
Sistemas de primer orden
Sistemas de segundo orden
Anlisis del efecto de un cero en la respuesta temporal de un sistema de segundo
orden
Influencia de polos adicionales.
Polos dominantes
Tratamiento mediante funciones de transferencia. Sistemas discretos
Tratamiento mediante descripcin en el espacio de estados
Manipulacin mediante objetos
Resumen de los comandos mas importantes del Control System Toolbox
Capitulo III:
Simulink
Simulink
Introduccin al Simulink
Librera de bloques.
Crear un nuevo modelo
Agregar un bloque al rea de trabajo
Unir bloques con una lnea.
Sacar una derivacin
Bloques ms comunes (de inters para la materia Control) de la librera de Simulink.
Ejemplo elemental
Parmetros de simulacin
Iniciar y detener una simulacin.
Capitulo IV:
Complementarios
PID. Descripcin y reglas heursticas de Sintonizacin
Introduccin
El sistema a controlar
Controlador PID
Control a lazo cerrado.
Ajuste del PID. Reglas del Ziegler-Nichols.
Primer mtodo de Ziegler-Nichols
Segundo mtodo de Ziegler-Nichols
Comentarios finales:

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

Capitulo I: Informacin general e introduccin al programa Matlab


(Lo bsico antes de comenzar)

1.ACERCA DE ESTE MANUAL


Las primeras versiones de este manual estuvieron dirigidas a alumnos de un curso
introductorio de una aplicacin que, para muchos alumnos, iba a constituir su
primer contacto con los ordenadores y/o con la programacin por lo tanto estaba
estructurado de forma muy sencilla pero a pesar de lo resumido estaban muy bien
explicadas todas las actividades desarrolladas en l.
Desde este momento, este manual se ha adaptado a las asignaturas de Controles
Automticos e Instrumentacin de Plantas de la especialidad de Ingeniera Mecnica
en La Universidad del Zulia, Ncleo Cabimas.
Por encima de la asignatura citada, este manual puede ser til a un pblico ms
amplio, que incluye a alumnos de cursos superiores de las distintas escuelas de
Ingeniera, a alumnos de Tercer Ciclo y a profesores que quieren conocer ms de
cerca las posibilidades que tendra MATLAB en sus asignaturas, asi como a aquellas
personas que esten realizando o piensen realizar cursos de mejoramiento
profesional en el area tecnica, cientifica o industrial en los cuales se requiera
de una herramienta computacional de la talla de MATLAB..
Se ha pretendido llegar a un equilibrio entre el detalle de las explicaciones, la
amplitud de temas tratados y el nmero de pginas. En algunos casos, junto con las
instrucciones introducidas por el usuario se incluye la salida de MATLAB; en otros
casos no se incluye dicha salida, pero se espera que el lector disponga de un PC
con MATLAB y vaya introduciendo esas instrucciones a la vez que avanza en estas
pginas. En muchas ocasiones se anima al lector interesado a ampliar el tema con
la ayuda del programa (toda la documentacin de MATLAB est disponible on-line a
travs del Help).

En cualquier caso recurdese que la informtica moderna, ms que en


saber consiste en saber encontrar lo que se necesita en pocos
segundos.

2.QUE ES MATLAB ???


Eso es una buena Pregunta, MATLAB es el nombre abreviado de MATrix LABoratory o
en cristiano Laboratorio de Matrices. Lo ms fcil es pensar en MATLAB como en
una calculadora programable muy potente, como stas, MATLAB es capaz de realizar
las operaciones bsicas de suma, resta, multiplicacin, divisin, etc.... A la vez
que puede manejar nmeros complejos, logaritmos, operaciones trigonomtricas,
operaciones lgicas, ... Por ltimo, podemos almacenar, procesar y recuperar datos
mediante algoritmos numricos, en realidad, MATLAB es mucho ms que una buena
calculadora Una de las capacidades ms atractivas es la de realizar una amplia
variedad de grficos en dos y tres dimensiones, realiza clculos numricos

con vectores y matrices conformados por nmeros escalares, tanto


reales como complejos. Es la herramienta de clculo numrico por excelencia,
es un lenguaje de programacin fcil de usar y extremadamente potente, posee
poderosas capacidades grficas y es una plataforma de desarrollo de aplicaciones,
ya que cuenta con numerosos grupos de herramientas (Cdigo bsico y libreras

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

especializadas llamados toolboxes) de aplicacin especfica (toolbox de matemtica


simblica, toolbox de procesamiento de seales, toolbox de control,etc)

3.Arranque y espacio de trabajo


MATLAB se puede arrancar como cualquier otra aplicacin de
Windows 95/98/2000/ME/XP/NT, clicando dos veces en el icono
correspondiente en el escritorio (figura 1) (donde quiera que
est ubicado segn la configuracin del ordenador) o por medio
del men INICIO. Al arrancar MATLAB se abre una ventana del tipo
de la indicada en la Figura 2.

Figura 1

En la ventana inicial (ventana de comandos) se


sugieren ya algunos comandos para el usuario
inexperto que quiere echar un vistazo a la
aplicacin. En dicha ventana aparece tambin el
prompt (aviso) caracterstico de MATLAB (). Esto
quiere decir que el programa est preparado para
recibir instrucciones.
Esta ventana ser la mayor parte del tiempo la
ventana de trabajo con la que estaremos casi
siempre interactuando, es decir ser a travs de
Figura 2. Ventana Inicial
ella que intercambiaremos informacin con el
programa al introducir datos y obtener respuesta a lo solicitado.
Como ya se dijo matlab es un programa fundamentalmente de calculo, por lo tanto
seria bueno apreciar desde el principio la potencia de este, se puede comenzar con
algunos ejemplos sencillos sobre tpicos bsicos desde el punto de vista
matemtico. Supongamos que queremos calcular el determinante de una matriz
cuadrada de orden 3, (esto es algo muy comn dentro de cualquier curso bsico de
calculo o de algebra elemental) para lo cual recurrimos el mtodo aquel de la suma
algebraica del producto de los elementos de las diagonales principales, menos la
suma algebraica del producto de las diagonales secundarias. Y listo problema
resuelto, pero cuan engorroso es este procedimiento?, y aun mas a cuantos errores
de calculo estamos propensos?, aun as alguien bien experimentado en el rea de
los nmeros podra pensar que esto no es problema, solo hay que practicar un poco
hasta tener soltura y fluidez de lo que se hace. Pues hagamos una pequea
modificacin en el tamao de la matriz y volvamos a realizar el calculo del
determinante hablemos de pasar de una matriz de orden 3, a una de orden 5 (solo
aumentar el orden en 2 unidades.) la cantidad de clculos relacionados con este
pequeo cambio aumenta en forma exponencial lo cual evidentemente aumenta la
posibilidad de errores, hace la operacin exponencialmente mas engorrosa e
inevitablemente dispara hasta niveles inaceptables el tiempo de calculo, adems de
disminuir por todo lo anterior la confiabilidad de los clculos realizados.
Ahora bien veamos como maneja matlab esto.
Para una matriz cuadrada de orden 3 el procedimiento para calcular el determinante
es el siguiente:
1. definir o introducir la matriz
2. pedir al programa que calcule el determinante
Para una matriz cuadrada de orden 5 el procedimiento es:

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

1. definir o introducir la matriz


2. pedir al programa que calcule el determinante..
Como puede verse el procedimiento es sencillo y no cambia en nada, la nica
diferencia es la introduccin de los datos o elementos de la matriz veamos como
se hace esto, en las siguientes lneas aparece una corrida de el calculo del
determinante de una matriz de orden 3 y luego el calculo para una de orden 5
para el de orden 3:
>> a=[1 2 3;4 5 6;7 8 45]
a =
1
2
3
4
5
6
7
8
45
>> b=det(a)
b =
-108
Para el de orden 5:
>> c=[1 2 3 4 5;4 5 7 5 6;7 8 4 7 5;4 2 5 6 2;7 0 9 0 9]
c =
1
2
3
4
5
4
5
7
5
6
7
8
4
7
5
4
2
5
6
2
7
0
9
0
9
>> d=det(c)
d =
4630
Como puede verse el procedimiento en efecto no cambia, se utilizaron los mismos
comandos e instrucciones para ambos casos, lo nico que cambia son los datos
introducidos (matlab no es adivino para adivinar a cual matriz debe extraerle el
determinante) y constituye la parte en la cual el usuario interacta con el
computador.
En este punto es bueno aclarar que matlab no es un programa que hace milagros ni
resuelve problemas de ningn tipo, matlab es solo una herramienta de trabajo la
cual facilita las cosas pero nunca podr resolver problemas y tomar decisiones en
base a anlisis de nada, ese trabajo es de cada uno de nosotros, ninguna
herramienta,
mecnica,
electrnica
o
computacional
puede
sustituir
los
conocimientos ni puede realizar nuestro trabajo, ellas son solo eso herramientas
que lo facilitan pero no resuelven por si solas nada, por ello es importante el
conocimiento de lo que se esta haciendo, adems como toda herramienta
computacional, el programa (al igual que la computadora en general) es un programa
ESTUPIDO ya que siempre ara lo que tu le pidas que haga, el problema esta en que
en muchsimas ocasiones, lo que le pedimos que haga no es lo que queremos que
haga, y por lo tanto al proporcionar mal informaron de entrada obtendremos datos o
informacin de salida (respuesta) incorrecta o inconsistente lo cual no es culpa
del programa
Ante tal situacin quedan dos soluciones, la primera consiste en no utilizar el
programa al no ser responsables i consientes de lo que escribimos, y la segunda
consiste en que al contrario del caso anterior necesitamos hacernos responsables
de los datos que proporcionamos adems de saber que es lo que quiero hacer o
calcular y pedirle exactamente eso al programa

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

Como ejemplo adicional considrese el trabajo que dara resolver una simple matriz
de 3 por tres pero que sus elementos sean decimales y complejos.
Parta este caso, matlab resuelve de igual manera veamos.
>> e=[1+i 3+5i 0.34+9i;5+8i 0+i 1;0+3i 6 2]
e =
Columns 1 through 2
1.0000 + 1.0000i
3.0000 + 5.0000i
5.0000 + 8.0000i
0 + 1.0000i
0 + 3.0000i
6.0000
Column 3
0.3400 + 9.0000i
1.0000
2.0000
>> f=det(e)
f =
-3.9378e+002 +2.2032e+002i
A= rand(6), B= inv(A), B*A
A=
0.9501
0.2311
0.6068
0.4860
0.8913
0.7621

0.4565
0.0185
0.8214
0.4447
0.6154
0.7919

0.9218
0.7382
0.1763
0.4057
0.9355
0.9169

0.4103
0.8936
0.0579
0.3529
0.8132
0.0099

0.1389
0.2028
0.1987
0.6038
0.2722
0.1988

0.0153
0.7468
0.4451
0.9318
0.4660
0.4186

2.7510
-2.5266
-0.6076
-0.7576
-4.6087
3.3088

3.6505
-1.4681
-2.1058
-0.6076
-4.7057
2.9929

0.1513 -6.2170 -2.4143


-0.5742 5.3399 1.5631
-0.0857 1.5345 1.8561
-0.3681 3.1251 -0.6001
2.5299 6.1284 0.9044
-0.1943 -5.1286 -0.6537

B=
5.7430
-4.4170
-1.3917
-1.6896
-3.6417
2.7183
ans =
1.0000 0.0000
0 0.0000 0.0000 -0.0000
0.0000 1.0000
0.0000 0.0000 -0.0000 0.0000
0
0 1.0000 -0.0000 -0.0000 0.0000
0.0000
0 -0.0000 1.0000 -0.0000 0.0000
-0.0000 0.0000 -0.0000 -0.0000 1.0000 0.0000
-0.0000 -0.0000 -0.0000 -0.0000 -0.0000 1.0000

Para apreciar desde el principio la


Potencia de MATLAB, se puede comenzar
por escribir la siguiente lnea, a
continuacin del prompt. Al final hay
que pulsar intro.
En realidad, en la lnea de comandos
que se muestra se han escrito tres
instrucciones diferentes, separadas
por comas. Como consecuencia, la
respuesta del programa tiene tres
partes tambin, cada una de ellas
correspondiente
a
una
de
las
instrucciones.
Con
la
primera
instruccin se define una matriz
cuadrada
(6x6)
llamada
A,
cuyos
elementos
son
nmeros
aleatorios
entre cero y uno (aunque aparezcan
slo 4 cifras, han sido calculados
con
16
cifras).
En
la
segunda
instruccin se define una matriz B
que es igual a la inversa de A.
Finalmente se ha multiplicado B por
A, y se comprueba que el resultado es
la matriz unidad.
Otro de los puntos fuertes de MATLAB
son los grficos, que se vern con
ms detalle en una seccin posterior.
A ttulo de ejemplo, se puede teclear
la siguiente lnea y pulsar intro:

x=-4:.01:4; y=sin(x);
plot(x,y), grid, title('Funcin seno(x)')
En la Figura 3 se puede observar que se abre una nueva ventana en la que aparece
representada la funcin sin(x). Esta figura tiene un ttulo "Funcin seno(x)" y
una cuadrcula o "grid". En realidad la lnea anterior contiene tambin varias
instrucciones separadas por comas o puntos y comas. En la primera se crea un
vector x con 801 valores reales entre -4 y 4, separados por una centsima. A
continuacin se crea un vector y, cada uno de cuyos elementos es el seno del

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

correspondiente elemento del vector x. Despus se dibujan los valores de y en


ordenadas frente a los de x en abscisas. Las dos ltimas instrucciones establecen
la cuadrcula y el ttulo.
Para
borrar
todas
las
salidas
anteriores
de
MATLAB y dejar limpia la
ventana
principal
se
pueden
utilizar
las
funciones clc y home. La
funcin
clc
(clear
console) elimina todas las
salidas
anteriores,
mientras
que
home
las
mantiene, pero lleva el
prompt ( ) a la primera
lnea de la ventana.

Figura N 3

Si se desea salir del


programa,
basta
teclear
los comandos quit o exit,
o bien elegir Exit MATLAB
en el men File (tambin
se
puede
utilizar
el

Alt+F4 de todas las aplicaciones de Windows).


Como puede observarse matlab con unas simples lneas de cdigo puede ejecutar
tareas extremadamente complejas en las que el usuario de forma manual tardara
muchsimo tiempo y los resultados no serian de la calidad grafica que aqu se
obtiene sin mencionar nada de la precisin y la rapidez

4.USO DEL HELP


MATLAB dispone de un excelente Help con el que
se
puede encontrar la informacin que se
desee. La Figura 4 muestra las distintas
opciones que aparecen en el men Help.
Tambin puede obtenerse ayuda de cualquier
comando tecleando la palabra help seguida
del nombre del comando y matalb responder con
Figura 4
un resumen de la aplicacin de dicho comando
adems de algunos ejemplos sobre su aplicacin.
Tambin puede solicitarse ayuda de la misma forma sobre los tolbox de cualquier
rea, a lo que matlab responder con una lista de los comandos contenidos en dicho
tolbox y el usuario deber seleccionar aquel o aquellos que le interesen para ese
momento

5.CONTROL DE LOS FORMATOS DE SALIDA Y DE OTRAS OPCIONES


DE MATLAB
Los formatos de salida en la ventana principal de MATLAB se pueden controlar
fcilmente a partir del cuadro de dilogo que se abre con el comando Preferences
del men File. En la Figura 5 y en la Figura 6 se ven dos de los tres cuadros de
dilogo a los que se accede al elegir ese comando.

10

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

El cuadro de dilogo de la Figura 5 permite elegir un editor de programas distinto


del que trae MATLAB, as como elegir el directorio donde estn los ficheros Help.

Figura 5

Figura 6

Respecto a los formatos numricos con que MATLAB muestra los resultados
(recurdese que siempre calcula con la mxima precisin), se pueden activar las
mismas posibilidades por medio de comandos tecleados en la lnea de comandos de
MATLAB. Los ms importantes de estos comandos son los siguientes:
format
format
format
format
format
format
format
format
format
format
format

short
long
hex
bank
short e
short g
long e
long g
loose
compact
rat

coma fija con 4 decimales (defecto)


coma fija con 15 decimales
cifras hexadecimales
nmeros con dos cifras decimales
notacin cientfica con 4 decimales
notacin cientfica o decimal, dependiendo del valor
notacin cientfica con 15 decimales
notacin cientfica o decimal, dependiendo del valor
introduce algunas lneas en blanco en la salida (defecto)
elimina las lneas en blanco citadas (opcin recomendada)
expresa los nmeros racionales como cocientes de enteros.

MATLAB aplica un factor de escala general a las matrices cuando los elementos ms
grandes o ms pequeos son superiores o inferiores respectivamente a una
determinada cantidad.

6.OPERACIONES CON MATRICES Y VECTORES


Ya se ha comentado que MATLAB es fundamentalmente un programa para clculo
matricial. Inicialmente se utilizar MATLAB como programa interactivo, en el que
se irn definiendo las matrices, los vectores y las expresiones que los combinan y
obteniendo los resultados sobre la marcha. Si estos resultados son asignados a
otras variables podrn ser utilizados posteriormente en otras expresiones. En este
sentido MATLAB sera como una potente calculadora matricial (en realidad es esto y
mucho ms...).
Antes de tratar de hacer clculos complicados, la primera tarea ser aprender a
introducir matrices y vectores desde el teclado. Ms adelante se vern otras
formas ms potentes de definir matrices y vectores.

6.1. DEFINICIN DE MATRICES DESDE TECLADO


Como en casi todos los lenguajes de programacin, en MATLAB las matrices y
vectores son variables que tienen nombres. Ya se ver luego con ms detalle las
reglas que deben cumplir estos nombres. Por el momento se sugiere que se utilicen
letras maysculas para matrices y minsculas para vectores y escalares (MATLAB no

11

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

exige esto, pero puede resultar til). Para definir una matriz no hace falta
establecer de antemano su tamao (de hecho, se puede definir un tamao y cambiarlo
posteriormente). MATLAB determina el nmero de filas y de columnas en funcin del
nmero de elementos que se proporcionan (o se utilizan). Las matrices se definen
por filas; los elementos de una misma fila estn separados por blancos o comas,
mientras que las filas estn separadas por pulsaciones intro o por caracteres
punto y coma (;). Por ejemplo, el siguiente comando define una matriz A de
dimensin (3x3):

A
1
4
7

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

A'
ans =
1 4 7

A partir de este momento la matriz A est


disponible
para
hacer
cualquier
tipo
de
operacin
con
ella
(adems
de
valores
numricos, en la definicin de una matriz o
vector
se
pueden
utilizar
expresiones
y
funciones
matemticas).
Por
ejemplo,
una
sencilla operacin con A es hallar su matriz
traspuesta. En MATLAB el apstrofo (') es el
smbolo
de
trasposicin
matricial.
Para
calcular A' (traspuesta de A) basta teclear lo
siguiente (se aade a continuacin la respuesta
del programa):

2 5 8
3 6 9

B
1
2
3

B=A'
=
4 7
5 8
6 9

B*A
ans =
66 78 90
78 93 108
90 108 126

A=[1 4 -3; 2 1 5; -2 5 3]
A =
1 4 -3
2 1 5
-2 5 3

B=inv(A)
B =
0.1803 0.2213 -0.1885
0.1311 0.0246 0.0902
-0.0984 0.1066 0.0574

12

Como el resultado de la operacin no ha sido


asignado a ninguna otra matriz, MATLAB utiliza
un nombre de variable por defecto (ans, de
answer), que contiene el resultado de la ltima
operacin. La variable ans puede ser utilizada
como operando en la siguiente expresin que se
introduzca. Tambin podra haberse asignado el
resultado a otra matriz llamada B:
Ahora ya estn definidas las matrices A y B, y
es posible seguir operando con ellas. Por
ejemplo, se puede hacer el producto B*A (deber
resultar una matriz simtrica):
En MATLAB se accede a los elementos de un
vector poniendo el ndice entre parntesis (por
ejemplo x(3) x(i)). Los elementos de las
matrices se acceden poniendo los dos ndices
entre parntesis, separados por una coma (por
ejemplo A(1,2) A(i,j)). Las matrices se
almacenan por columnas (aunque se introduzcan
por filas, como se ha dicho antes), y teniendo
en cuenta esto puede accederse a cualquier
elemento de una matriz con un slo subndice.
Por ejemplo, si A es una
matriz (3x3) se
obtiene el mismo valor escribiendo A(1,2) que
escribiendo A(4). Invertir una matriz es casi
tan fcil como trasponerla. A continuacin se
va a definir una nueva matriz A -no singularen la forma:
Ahora se va a calcular la inversa de A y el
resultado se asignar a B. Para ello basta

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

hacer uso de la funcin inv( ) (la precisin o nmero de cifras con que se muestra
el resultado se puede cambiar con el men File/Preferences/General):
B*A
ans =
1.0000 0.0000 0.0000
0.0000 1.0000 0.0000
0.0
0.0000 1.0000
x=[10 20 30] % vector fila
x =
10 20 30
y=[11; 12; 13] % vector columna
y =
11
12
13

x+y
??? Error using ==> +
Matrix dimensions must agree.

x+y'
ans =
21 32 43

Para
comprobar
que
este
resultado
correcto basta pre-multiplicar A por B;

es

De forma anloga a las matrices, es posible


definir un vector fila x en la forma
siguiente
(si
los
tres
nmeros
estn
separados por blancos o comas, el resultado
ser un vector fila):
Por el contrario, si los nmeros estn
separados por intros o puntos y coma (;) se
obtendr un vector columna:
MATLAB tiene en cuenta la diferencia entre
vectores fila y vectores columna. Por
ejemplo, si se intenta sumar los vectores x
e y se obtendr el siguiente mensaje de
error:
Estas dificultades desaparecen si se suma x
con el vector traspuesto de y:
Aunque ya se ha visto en los ejemplos
anteriores el estilo sencillo e intuitivo
con el que MATLAB opera con matrices y
vectores, a continuacin se va a estudiar
este tema con un poco ms de detenimiento.

6.2. OPERACIONES CON MATRICES


MATLAB puede operar con matrices por medio de operadores y por medio de funciones.
Se han visto ya los operadores suma (+), producto (*) y traspuesta ('), as como
la funcin invertir inv( ).
Los operadores matriciales de MATLAB son los siguientes:
OPERADOR
+

*
'
^
\
/
.*
./ y .\
.^

DESCRIPCION
adicin o suma
sustraccin o resta
multiplicacin
traspuesta
potenciacin
divisin-izquierda
divisin-derecha
producto elemento a elemento
divisin elemento a elemento
elevar a una potencia elemento a elemento

Estos operadores se aplican


tambin a las variables o
valores escalares, aunque con
algunas
diferencias. Todos
estos
operadores
son
coherentes
con
las
correspondientes operaciones
matriciales: no se puede por
ejemplo sumar matrices que no
sean del mismo tamao. Si los
operadores no se usan de modo
correcto
se
obtiene
un
mensaje de error.

Los operadores anteriores se pueden aplicar tambin de modo mixto, es decir con un
operando escalar y otro matricial. En este caso la operacin con el escalar se
aplica a cada uno de los elementos de la matriz. Considrese el siguiente ejemplo:

13

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

A
1
3

A=[1 2; 3 4]
=
2
4

A*2
ans =
2 4
6 8
A-4
ans =
-3 -2
-1 0
Los operadores de divisin requieren una cierta explicacin adicional. Considrese
el siguiente sistema de ecuaciones lineales, Ax = b (1) en donde x y b son
vectores columna, y A una matriz cuadrada invertible. La resolucin de este
sistema de ecuaciones se puede escribir en las 2 formas siguientes (Atencin a la
2 forma, basada en la barra invertida (\), que puede resultar un poco extraa):
x = inv(A)*b (2a)
x = A\b (2b)

A
1
b
2

x
0
1

A=[1 2], b=[2]


=
2
=
x=A\b
=

As pues, el operador divisin-izquierda por


una matriz (barra invertida \) equivale a
premultiplicar por la inversa de esa matriz.
En realidad este operador es ms general y ms
inteligente de lo que aparece en el ejemplo
anterior: el operador divisin-izquierda es
aplicable aunque la matriz no tenga inversa e
incluso no sea cuadrada, en cuyo caso la
solucin que se obtiene (por lo general) es la
que proporciona el mtodo de los mnimos
cuadrados. Cuando la matriz es triangular o
simtrica aprovecha esta circunstancia para
reducir el nmero de operaciones aritmticas.
En algunos casos se obtiene una solucin de
mnima con no ms de r elementos distintos de
cero, siendo r el rango de la matriz. Esto
puede estar basado en que la matriz se reduce
a forma de escaln y se resuelve el sistema
dando
valor
cero
a
las
variables
independientes. Por ejemplo, considrese el
siguiente ejemplo de matriz (1x2) que conduce
a un sistema de infinitas soluciones:
que es la solucin obtenida dando valor cero a
la variable independiente x(1).

A=[1 2; 1 0; 0 1], b=[2 0 0]'


A =
1 2
1 0
0 1
b =
2
0
0
x=A\b, resto=A*x-b
x =
0.3333
0.6667
Por otra parte, en el caso de un sistema de
resto =
ecuaciones redundante (o sobre-determinado) el
-0.3333
resultado de MATLAB es el punto ms cercano
0.3333
-en el sentido de mnima norma del error- a
0.6667
las
ecuaciones
dadas
(aunque
no
cumpla
exactamente ninguna de ellas). Vase el siguiente ejemplo de tres ecuaciones
formadas por una recta que no pasa por el origen y los dos ejes de coordenadas:

14

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

En MATLAB existe tambin la posibilidad de aplicar elemento a elemento los


operadores matriciales (*, ^, \ y /). Para ello basta precederlos por un punto
(.). Por ejemplo:
[1 2 3 4]^2
??? Error using ==> ^
Matrix must be square.
[1 2 3 4].^2
ans =
1 4 9 16
[1 2 3 4]*[1 -1 1 -1]
??? Error using ==> *
Inner matrix dimensions must agree.
[1 2 3 4].*[1 -1 1 -1]
ans =
1 -2 3 4
TIPOS DE DATOS
Ya se ha dicho que MATLAB es un programa preparado para trabajar con vectores y
matrices.
Como caso particular tambin trabaja con variables escalares (matrices de
dimensin 1). MATLAB trabaja siempre en doble precisin, es decir guardando cada
dato en 8 bytes, con unas 15 cifras decimales exactas. Ya se ver ms adelante que
tambin puede trabajar con cadenas de caracteres (strings) y, desde la versin
5.0, tambin con otros tipos de datos: Matrices de ms dos dimensiones, matrices
dispersas, vectores y matrices de celdas, estructuras y clases y objetos.

6.3. TIPOS DE MATRICES PREDEFINIDOS


Existen en MATLAB varias funciones orientadas a definir con gran facilidad
matrices de tipos particulares. Algunas de estas funciones son las siguientes:
eye(4)
zeros(3,5)
zeros(4)
ones(3)
ones(2,4)

forma la matriz unidad de tamao (4x4)


forma una matriz de ceros de tamao (3x5)
dem de tamao (4x4)
forma una matriz de unos de tamao (3x3)
idem de tamao (2x4)
genera un vector con n valores igualmente espaciados entre x1 y
linspace(x1,x2,n)
x2
genera un vector con n valores espaciados logartmicamente
logspace(d1,d2,n) entre 10^d1 y 10^d2. Si d2 es pi 6 , los puntos se generan
entre 10^d1 y pi
forma una matriz de nmeros aleatorios entre 0 y 1, con
rand(3)
distribucin uniforme, de tamao (3x3)
rand(2,5)
idem de tamao (2x5)
forma una matriz de nmeros aleatorios de tamao (4x4), con
randn(4)
distribucin normal, de valor medio 0 y varianza 1.
crea una matriz (4x4) con los nmeros 1, 2, ... 4*4, con la
magic(4)
propiedad de que todas las filas y columnas suman lo mismo
crea una matriz de Hilbert de tamao (5x5). La matriz de
Hilbert es una matriz cuyos elementos (i,j) responden a la
hilb(5)
expresin (1/(i+j-1)). Esta es una matriz especialmente difcil
de manejar por los grandes errores numricos a los que conduce.
invhilb(5)
crea directamente la inversa de la matriz de Hilbert
kron(x,y)
produce una matriz con todos los productos de los elementos del

15

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

vector x por los elementos del vector y. Equivalente a x'*y,


donde x e y son vectores fila
construye una matriz cuyo polinomio caracterstico tiene como
coeficientes los elementos del vector pol (ordenados de mayor
grado a menor)
construye la matriz de Vandermonde a partir del vector v (las
columnas son las potencias de los elementos de dicho vector)

compan(pol)
vander(v)

Existen otras funciones para crear matrices de tipos particulares. Con Help/Help
Window se puede obtener informacin sobre todas las funciones disponibles en
MATLAB, que aparecen agrupadas por directorios. En matlab\elmat aparecen la mayor
parte de las funciones estudiadas en este apartado.

6.4. FORMACIN DE UNA MATRIZ A PARTIR DE OTRAS


MATLAB ofrece tambin la posibilidad de crear una matriz a partir de matrices
previas ya definidas, por varios posibles caminos:
Recibiendo alguna de sus propiedades (como por ejemplo el tamao),
Por composicin de varias submatrices ms pequeas,
Modificndola de alguna forma.
A continuacin se describen algunas de las funciones que crean una nueva matriz a
partir de otra o de otras, comenzando por dos funciones auxiliares:
[m,n]=size(A)
n=length(x)
zeros(size(A))
ones(size(A))
A=diag(x)
x=diag(A)
diag(diag(A))
blkdiag(A,B)

triu(A)
tril(A)
rot90(A,k)
flipud(A)
fliplr(A)
reshape(A,m,n)

devuelve el nmero de filas y de columnas de la matriz A. Si la matriz es


cuadrada basta recoger el primer valor de retorno
calcula el nmero de elementos de un vector x
forma una matriz de ceros del mismo tamao que una matriz A previamente
creada
dem con unos
forma una matriz diagonal A cuyos elementos diagonales son los elementos
de un vector ya existente x
forma un vector x a partir de los elementos de la diagonal de una matriz
ya existente A
crea una matriz diagonal a partir de la diagonal de la matriz A
crea una matriz diagonal de submatrices a partir de las matrices que se
le pasan como argumentos
forma una matriz triangular superior a partir de una matriz A (no tiene
por qu ser cuadrada). Con un segundo argumento puede controlarse que se
mantengan o eliminen ms diagonales por encima o debajo de la diagonal
principal.
dem con una matriz triangular inferior
Gira k*90 grados la matriz rectangular A en sentido antihorario. k es un
entero que puede ser negativo. Si se omite, se supone k=1
halla la matriz simtrica de A respecto de un eje horizontal
halla la matriz simtrica de A respecto de un eje vertical
Cambia el tamao de la matriz A devolviendo una matriz de tamao mn
cuyas columnas se obtienen a partir de un vector formado por las columnas
de A puestas una a continuacin de otra. Si la matriz A tiene menos de
mn elementos se produce un error.

Un caso especialmente interesante es el de crear una nueva matriz componiendo como


submatrices otras matrices definidas previamente. A modo de ejemplo, ejectense
las siguientes lneas de comandos y obsrvense los resultados obtenidos:
A=rand(3)
B=diag(diag(A))

16

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

C=[A, eye(3); zeros(3), B]


En el ejemplo anterior, la matriz C de tamao (6x6) se forma por composicin de
cuatro matrices de tamao (3x3). Al igual que con simples escalares, las
submatrices que forman una fila se separan con blancos o comas, mientras que las
diferentes filas se separan entre s con intros o puntos y comas. Los tamaos de
las submatrices deben de ser coherentes.

7.NMEROS REALES DE DOBLE PRECISIN


Los elementos constitutivos de vectores y matrices son nmeros reales almacenados
en 8 bytes (53 bits para la mantisa y 11 para el exponente de 2; entre 15 y 16
cifras decimales equivalentes). Es importante saber cmo trabaja MATLAB con estos
nmeros y los casos especiales que presentan.
MATLAB mantiene una forma especial para los nmeros muy grandes (ms grandes que
los que es capaz de representar), que son considerados como infinito. Por ejemplo,
obsrvese cmo responde el programa al ejecutar el siguiente comando:

1.0/0.0
Warning: Divide by zero
ans =
Inf

As pues, para MATLAB el infinito se representa como


inf Inf. MATLAB tiene tambin una representacin
especial para los resultados que no estn definidos
como nmeros. Por ejemplo, ejectense los siguientes
comandos y obsrvense las respuestas obtenidas:

0/0
Warning: Divide by zero
ans =
NaN
inf/inf
ans =
NaN

En ambos casos la respuesta es NaN, que es la


abreviatura de Not a Number. Este tipo de respuesta,
as como la de Inf, son enormemente importantes en
MATLAB, pues permiten controlar la fiabilidad de los
resultados de los clculos matriciales. Los NaN se
propagan al realizar con ellos cualquier operacin
aritmtica, en el sentido de que, por ejemplo,
cualquier nmero sumado a un NaN da otro NaN. MATLAB
tiene esto en cuenta. Algo parecido sucede con los

Inf.
MATLAB dispone de tres funciones tiles relacionadas con las operaciones de coma
flotante. Estas funciones, que no tienen argumentos, son las siguientes:

Eps
Realmin
Realmax

devuelve la diferencia entre 1.0 y el nmero de coma flotante


inmediatamente superior. Da una idea de la precisin o nmero de
cifras almacenadas. En un PC, eps vale 2.2204e-016.
devuelve el nmero ms pequeo con que se puede trabajar
(2.2251e-308)
devuelve el nmero ms grande con que se puede trabajar
(1.7977e+308)

8.NMEROS COMPLEJOS: FUNCIN COMPLEX


a=sqrt(-4)
a =
0 + 2.0000i
3 + 4j
ans =
3.0000 + 4.0000i

17

En muchos clculos matriciales los datos y/o los resultados


no son reales sino complejos, con parte real y parte
imaginaria. MATLAB trabaja sin ninguna dificultad con nmeros
complejos. Para ver como se representan por defecto los
nmeros complejos, ejectense los siguientes comandos:

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

En la entrada de datos de MATLAB se pueden


utilizar indistintamente la i y la j para
representar el nmero imaginario unidad (en la
salida, sin embargo, puede verse que siempre
aparece la i). Si la i o la j no estn
definidas como variables, puede intercalarse el
signo (*). Esto no es posible en el caso de que
s estn definidas, porque entonces se utiliza
el valor de la variable. En general, cuando se
est trabajando con nmeros complejos, conviene
no utilizar la i como variable ordinaria, pues
puede dar lugar a errores y confusiones. Por
ejemplo, obsrvense los siguientes resultados:

i=2
i =
2
2+3i
ans =
2.0000 + 3.0000i
2+3*i
ans =
8
2+3*j
ans =
2.0000 + 3.0000i

Cuando i y j son variables utilizadas para


otras finalidades, como unidad imaginaria puede utilizarse tambin la funcin
sqrt(-1), o una variable a la que se haya asignado el resultado de esta funcin.
La asignacin de valores complejos a vectores y matrices desde teclado puede
hacerse de las dos formas, que se muestran en el ejemplo siguiente (conviene hacer
antes clear i, para que i no est definida como variable. Este comando se
estudiar ms adelante):

A = [1+2i 2+3i; -1+i 2-3i]


A =
1.0000 + 2.0000i 2.0000 + 3.0000i
-1.0000 + 1.0000i 2.0000 - 3.0000i
A = [1 2; -1 2] + [2 3; 1 -3]*I % En este caso el * es necesario
A =
1.0000 + 2.0000i 2.0000 + 3.0000i
-1.0000 + 1.0000i 2.0000 - 3.0000i
Puede verse que es posible definir las partes reales e imaginarias por separado.
En este caso s es necesario utilizar el operador (*), segn se muestra en el
ejemplo anterior.
MATLAB dispone asimismo de la funcin complex, que crea un nmero complejo a
partir de dos argumentos que representan la parte real e imaginaria, como en el
ejemplo siguiente:
complex(1,2)
ans =
1.0000 +
2.0000i

Es importante advertir que el operador de matriz traspuesta


('), aplicado a matrices complejas, produce la matriz
conjugada y traspuesta. Existe una funcin que permite hallar
simplemente la matriz conjugada (conj()) y el operador punto y
apstrofo (.') que calcula simplemente la matriz traspuesta.

9.CADENAS DE CARACTERES
MATLAB puede definir variables que contengan cadenas de caracteres. En MATLAB las
cadenas de texto van entre apstrofos o comillas simples (Ntese que en C van
entre comillas dobles: "cadena"). Por ejemplo, en MATLAB:
s = 'cadena de caracteres'
Las cadenas de texto tienen su ms clara utilidad en temas que se vern ms
adelante y por eso se difiere hasta entonces una explicacin ms detallada.

18

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

10. VARIABLES Y EXPRESIONES MATRICIALES


Ya han aparecido algunos ejemplos de variables y expresiones matriciales. Ahora se
va a tratar de generalizar un poco lo visto hasta ahora.
Una variable es un nombre que se da a una entidad numrica, que puede ser una
matriz, un vector o un escalar. El valor de esa variable, e incluso el tipo de
entidad numrica que representa, puede cambiar a lo largo de una sesin de MATLAB
o a lo largo de la ejecucin de un programa. La forma ms normal de cambiar el
valor de una variable es colocndola a la izquierda del operador de asignacin
(=). Una expresin de MATLAB puede tener las dos formas siguientes: primero,
asignando su resultado a una variable,
variable = expresin
y segundo evaluando simplemente el resultado del siguiente modo, expresin en cuyo
caso el resultado se asigna automticamente a una variable interna de MATLAB
llamada ans (de answer) que almacena el ltimo resultado obtenido. Se considera
por defecto que una expresin termina cuando se pulsa intro. Si se desea que una
expresin contine en la lnea siguiente, hay que introducir tres puntos (...)
antes de pulsar intro. Tambin se pueden incluir varias expresiones en una misma
lnea separndolas por comas (,) o puntos y comas (;).
Si una expresin termina en punto y coma (;) su resultado se calcula, pero no se
escribe en pantalla. Esta posibilidad es muy interesante, tanto para evitar la
escritura de resultados intermedios, como para evitar la impresin de grandes
cantidades de nmeros cuando se trabaja con matrices de gran tamao.
A semejanza de C, MATLAB distingue entre maysculas y minsculas en los nombres de
variables. Los nombres de variables deben empezar siempre por una letra y pueden
constar de hasta 31 letras y nmeros. El carcter guin bajo (_) se considera como
una letra. A diferencia del lenguaje C, no hace falta declarar las variables que
se vayan a utilizar. Esto hace que se deba tener especial cuidado con no utilizar
nombres errneos en las variables, porque no se recibir ningn aviso del
ordenador.
El comando clear tiene varias formas posibles:
Clear
sin
argumentos,
clear A, b
clear global
Clear
functions
clear all

clear elimina todas las variables creadas previamente (excepto las


variables globales).
Borra las variables indicadas.
Borra las variables globales.
Borra las funciones.
Borra todas
funciones.

las

variables,

incluyendo

las

globales,

las

11. OPERADOR DOS PUNTOS (:)


Este operador es muy importante en MATLAB y puede usarse de varias formas. Se
sugiere al lector que practique mucho sobre los ejemplos contenidos en este
apartado, introduciendo todas las modificaciones que se le ocurran y haciendo
pruebas abundantes (Probar es la mejor forma de aprender!).
Para empezar, defnase un vector x con el siguiente comando:

19

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

x=1:10
x =
1
2

10

En cierta forma se podra decir que el operador (:) Representa un rango: en este
caso, los nmeros enteros entre el 1 y el 10. Por defecto el incremento es 1, pero
este operador puede tambin utilizarse con otros valores enteros y reales,
positivos o negativos. En este caso el incremento va entre el valor inferior y el
superior, en las formas que se muestran a continuacin:
x=1:2:10
x =
1 3 5 7 9
x=1:1.5:10
x =
1.0000 2.5000 4.0000 5.5000 7.0000 8.5000 10.0000
x=10:-1:1
x =
10
9
8
7
6
5
4
3
2

Puede verse que, por defecto, este operador produce vectores fila. Si se desea
obtener un vector columna basta trasponer el resultado. El siguiente ejemplo
genera una tabla de funciones seno y coseno. Ejectese y obsrvese el resultado
(recurdese que con (;) Despus de un comando el resultado no aparece en
pantalla).
x=[0.0:pi/50:2*pi]';
y=sin(x); z=cos(x);
[x y z]
El operador dos puntos (:) es an ms til y potente y tambin ms complicado
con matrices. A continuacin se va a definir una matriz A de tamao 6x6 y despus
se realizarn diversas operaciones sobre ella con el operador (:).
A=magic(6)
A =
35
1
6
3
32
7
31
9
2
8
28
33
30
5
34
4
36
29

26
21
22
17
12
13

19
23
27
10
14
18

24
25
20
15
16
11

Recurdese que MATLAB accede a los elementos de una matriz por medio de los
ndices de fila y de columna encerrados entre parntesis y separados por una coma.
Por ejemplo:
A(2,3)
ans =
7
El siguiente comando extrae los 4 primeros elementos de la 6 fila:
A(6, 1:4)
ans =
4
36
29
13

20

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

Los dos puntos aislados representan "todos los elementos".


siguiente comando extrae todos los elementos de la 3 fila:
A(3, :)
ans =
31
9

22

27

Por

ejemplo,

el

20

Para acceder a la ltima fila o columna puede utilizarse la palabra end, en lugar
del nmero correspondiente. Por ejemplo, para extraer la sexta fila (la ltima) de
la matriz:
A(end, :)
ans =
4 36 29 13 18 11
El siguiente comando extrae todos los elementos de las filas 3, 4 y 5:
A(3:5,:)
ans =
31
9
8
28
30
5

2
33
34

22
17
12

27
10
14

20
15
16

Se pueden extraer conjuntos disjuntos de filas utilizando corchetes [ ]. Por


ejemplo, el siguiente comando extrae las filas 1, 2 y 5:
A([1 2 5],:)
ans =
35
1
6
3
32
7
30
5
34

26
21
12

19
23
14

24
25
16

En los ejemplos anteriores se han extrado filas y no columnas por motivos del
espacio ocupado por el resultado en la hoja de papel. Es evidente que todo lo que
se dice para filas vale para columnas y viceversa: basta cambiar el orden de los
ndices. El operador dos puntos (:) puede utilizarse en ambos lados del operador
(=). Por ejemplo, a continuacin se va a definir una matriz identidad B de tamao
6x6 y se van a reemplazar filas de B por filas de A. Obsrvese que la siguiente
secuencia de comandos sustituye las filas 2, 4 y 5 de B por las filas 1, 2 y 3 de
A,
B=eye(size(A));
B([2 4 5],:)=A(1:3,:)
B =
1
0
0
0
35
1
6
26
0
0
1
0
3
32
7
21
31
9
2
22
0
0
0
0

0
19
0
23
27
0

0
24
0
25
20
1

Se pueden realizar operaciones an ms complicadas, tales como la siguiente


B=eye(size(A));
B(1:2,:)=[0 1; 1 0]*B(1:2,:)

21

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

Como nuevo ejemplo, se va a ver la forma de invertir el orden de los elementos de


un vector:
x=rand(1,5)
x =
0.9103
0.7622
0.2625
0.0475
0.7361
x=x(5:-1:1)
x =
0.7361
0.0475
0.2625
0.7622
0.9103
Obsrvese que por haber utilizado parntesis en vez de corchetes los valores
generados por el operador (:) afectan a los ndices del vector y no al valor de
sus elementos. Para invertir el orden de las columnas de una matriz se puede hacer
lo siguiente:
A=magic(3)
A =
8
1
6
3
5
7
4
9
2
Se sustituyen las dos primeras filas de B por el producto de dichas filas por una
matriz de permutacin.
A(:,3:-1:1)
ans =
6
1
8
7
5
3
2
9
4
Aunque hubiera sido ms fcil utilizar la funcin fliplr(A), que es especfica
para ello. Finalmente, hay que decir que A(:) representa un vector columna con las
columnas de A una detrs de otra.

12. FUNCIONES MATEMTICAS ELEMENTALES QUE OPERAN DE MODO


ESCALAR
Estas funciones, que comprenden las funciones matemticas trascendentales y otras
funciones bsicas, actan sobre cada elemento de la matriz como si se tratase de
un escalar.
Se aplican de la misma forma a escalares, vectores y matrices. Algunas de las
funciones de este grupo son las siguientes:
Comando
sin(x)
cos(x)
tan(x)
asin(x)
acos(x)
atan(x)

Descripcin
seno
coseno
tangente
arco seno
arco coseno
arco tangente (devuelve un ngulo entre p/2 y p/2)
atan2(x) arco tangente (devuelve un ngulo entre y ); se le pasan 2 argumentos,
proporcionales al seno y al coseno
sinh(x) seno hiperblico
cosh(x) coseno hiperblico
tanh(x) tangente hiperblica

22

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

asinh(x)
acosh(x)
atanh(x)
log(x)
log10(x)
exp(x)
sqrt(x)
sign(x)
rem(x,y)
mod(x,y)
round(x)
fix(x)
floor(x)
ceil(x)
gcd(x)
lcm(x)
real(x)
imag(x)
abs(x)
angle(x)

arco seno hiperblico


arco coseno hiperblico
arco tangente hiperblica
logaritmo natural
logaritmo decimal
funcin exponencial
raz cuadrada
devuelve -1 si <0, 0 si =0 y 1 si >0. Aplicada a un nmero complejo,
devuelve un vector unitario en la misma direccin
resto de la divisin (2 argumentos que no tienen que ser enteros)
similar a rem (Ver diferencias con el Help)
redondeo hacia el entero ms prximo
redondea hacia el entero ms prximo a 0
valor entero ms prximo hacia
valor entero ms prximo hacia
mximo comn divisor
mnimo comn mltiplo
partes reales
partes imaginarias
valores absolutos
ngulos de fase

13. FUNCIONES QUE ACTAN SOBRE VECTORES


Las siguientes funciones actan sobre vectores (no sobre matrices ni sobre
escalares)
Comando
Descripcin
Mximo elemento de un vector. Devuelve el valor mximo xm y la
[xm,im]=max(x)
posicin que ocupa im
Mnimo elemento de un vector. Devuelve el valor mnimo y la
min(x)
posicin que ocupa.
sum(x)
suma de los elementos de un vector
devuelve el vector suma acumulativa de los elementos de un vector
cumsum(x)
(cada elemento del resultado es una suma de elementos del
original)
mean(x)
valor medio de los elementos de un vector
std(x)
desviacin tpica
prod(x)
producto de los elementos de un vector
devuelve el vector producto acumulativo de los elementos de un
Cumprod(x)
vector
ordenacin de menor a mayor de los elementos de un vector x
[y,i]=sort(x) Devuelve el vector ordenado y, y un vector i con las posiciones
iniciales en x de los elementos en el vector ordenado y.
En realidad estas funciones se pueden aplicar tambin a matrices, pero en ese caso
se aplican por separado a cada columna de la matriz, dando como valor de retorno
un vector resultado de aplicar la funcin a cada columna de la matriz considerada
como vector. Si estas funciones se quieren aplicar a las filas de la matriz basta
aplicar dichas funciones a la matriz traspuesta.

14. FUNCIONES QUE ACTAN SOBRE MATRICES


Las siguientes funciones exigen que el(los) argumento(s) sean matrices. En este
grupo aparecen algunas de las funciones ms tiles y potentes de MATLAB. Se
clasificarn en varios subgrupos:

23

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

3.5.1. FUNCIONES
Comando
B = A'
B = A.'
v = poly(A)
t = trace(A)
[m,n] = size(A)
n = size(A)
nf = size(A,1)
nc = size(A,2)

MATRICIALES ELEMENTALES
Descripcin
calcula la traspuesta (conjugada) de la matriz A
calcula la traspuesta (sin conjugar) de la matriz A
devuelve
un
vector
v
con
los
coeficientes
del
polinomio
caracterstico de la matriz cuadrada A
devuelve la traza t (suma de los elementos de la diagonal) de una
matriz cuadrada A
devuelve el nmero de filas m y de columnas n de una matriz
rectangular A
devuelve el tamao de una matriz cuadrada A
devuelve el nmero de filas de A
devuelve el nmero de columnas de A

15. FUNCIONES MATRICIALES ESPECIALES


Las funciones exp(), sqrt() y log() se aplican elemento a elemento a las matrices
y/o vectores que se les pasan como argumentos. Existen otras funciones similares
que tienen tambin sentido cuando se aplican a una matriz como una nica entidad.
Estas funciones son las siguientes (se distinguen porque llevan una "m" adicional
en el nombre):
Comando
expm(A)
sqrtm(A)
logm()

Descripcin
Si A=XDX', expm(A)=X*diag(exp(diag(D)))*X'
devuelve una matriz que multiplicada por s misma da la matriz A
es la funcin recproca de expm(A)

Aunque no pertenece a esta familia de funciones, se puede considerar que el


operador potencia (^) est emparentado con ellas. As, es posible decir que A^n
est definida si A es cuadrada y n un nmero real. Si n es entero, el resultado se
calcula por multiplicaciones sucesivas. Si n es real, el resultado se calcula
como: A^n=X*D.^n*X' siendo [X,D]=eig(A)

16. FUNCIONES
MATRICIAL

DE

FACTORIZACIN

Y/O

DESCOMPOSICIN

A su vez este grupo de funciones se puede subdividir en 4 subgrupos:


Funciones basadas en la factorizacin triangular (eliminacin de Gauss):
Comando
[L,U] = lu(A)

B = inv(A)
d = det(A)
E = rref(A)
[E,xc] = rref(A)
U = chol(A)

24

Descripcin
descomposicin de Crout (A = LU) de una matriz. La matriz L es una
permutacin de una matriz triangular inferior (dicha permutacin
es consecuencia del pivotamiento por columnas utilizado en la
factorizacin)
calcula la inversa de A. Equivale a B=inv(U)*inv(L)
devuelve el determinante d de la matriz cuadrada A. Equivale a
d=det(L)*det(U)
reduccin a forma de escaln (mediante la eliminacin de Gauss con
pivotamiento por columnas) de una matriz rectangular A
reduccin a forma de escaln con un vector xc que da informacin
sobre una posible base del espacio de columnas de A
descomposicin de Cholesky de matriz simtrica y positivodefinida. Slo se utiliza la diagonal y la parte triangular

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

superior de A. El resultado es una matriz triangular superior tal


que A = U'*U
devuelve una estimacin del recproco de la condicin numrica de
la matriz A basada en la norma sub-1. Si el resultado es prximo a
1 la matriz A est bien condicionada; si es prximo a 0 no lo
est.

c = rcond(A)

Funciones basadas en el clculo de valores y vectores propios:


Comando
[X,D] = eig(A)

[X,D] = eig(A,B)

Descripcin
valores propios (diagonal de D) y vectores propios (columnas de X)
de una matriz cuadrada A. Con frecuencia el resultado es complejo
(si A no es simtrica)
valores propios (diagonal de D) y vectores propios (columnas de X)
de dos matrices cuadradas A y B (Ax = lBx).

Funciones basadas en la descomposicin QR:


Comando
[Q,R] = qr()
B = null(A)

Q = orth(A)

Descripcin
descomposicin QR de una matriz rectangular. Se utiliza para
sistemas con ms ecuaciones que incgnitas.
devuelve una base ortonormal del subespacio nulo (kernel, o
conjunto de vectores x tales que Ax = 0) de la matriz rectangular
A
las columnas de Q son una base ortonormal del espacio de columnas
de A. El nmero de columnas de Q es el rango de A

Funciones basadas en la descomposicin de valor singular


Comando
[U,D,V] = svd(A)

B =
r =
nor
nor
c =

pinv(A)
rank(A)
= norm(A)
= norm(A,2)
cond(A)

Descripcin
Descomposicin
de
valor
singular
de
una
matriz
rectangular(A=U*D*V'). U y V son matrices ortonormales. D es
diagonal y contiene los valores singulares
Calcula la pseudo-inversa de una matriz rectangular A
Calcula el rango r de una matriz rectangular A
Calcula la norma sub-2 de una matriz (el mayor valor singular)
Co mismo que la anterior
Condicin numrica sub-2 de la matriz A. Es el cociente entre el
mximo y el mnimo valor singular. La condicin numrica da una
idea de los errores que se obtienen al resolver un sistema de
ecuaciones lineales con dicha matriz: su logaritmo indica el
nmero de cifras significativas que se pierden

Normas de matrices:
Comando
Descripcin
norm(A)
norma sub-2, es decir, mximo valor singular de A, max(svd(A)).
normest(A)
calcula una estimacin o aproximacin de la norma sub-2. til para
matrices grandes en las que norm(A) necesita demasiado tiempo
norm(A,2)
lo mismo que norm(A)
norm(A,1)
norma sub-1 de A, mxima suma de valores absolutos por columnas, es
decir: max(sum(abs((A))))
norm(A,inf)
norma sub- de A, mxima suma de valores absolutos por filas, es

25

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

decir: max(sum(abs((A'))))
Normas de vectores:
Comando
norm(x,p)
norm(x)
norm(x,inf)
norm(x,1)

17. MS

Descripcin
norma sub-p, es
norma eucldea;
norma sub-, es
norma sub-1, es

SOBRE
MATRICES

decir sum(abs(x)^p)^(1/p).
equivale al mdulo o norm(x,2).
decir max(abs(x)).
decir sum(abs(x)).

OPERADORES

RELACIONALES

CON

VECTORES

Cuando alguno de los operadores relacionales vistos previamente (<, >, <=, >=, ==
y ~=) acta entre dos matrices (vectores) del mismo tamao, el resultado es otra
matriz (vector) de ese mismo tamao conteniendo unos y ceros, segn los resultados
de cada comparacin entre elementos hayan sido true o false, respectivamente.
A=magic(3)
A=
816
357
492
M=A>4
M=
101
011
010

Por ejemplo, supngase que se define una matriz magic A de tamao


3x3 y a continuacin se forma una matriz binaria M basada en la
condicin de que los elementos de A sean mayores que 4 (MATLAB
convierte este cuatro en una matriz de cuatros de modo automtico).
Obsrvese con atencin el resultado:
De ordinario, las matrices "binarias" que se obtienen de la
aplicacin de los operadores relacionales no se almacenan en memoria
ni se asignan a variables, sino que se procesan sobre la marcha.
MATLAB dispone de varias funciones para ello. Recurdese que
cualquier valor distinto de cero equivale a true, mientras que un
valor cero equivale a false.

Algunas de estas funciones son:


Comando
any(x)

any(A)
all(x)
all(A)
find(x)

find(A)

Descripcin
funcin vectorial; chequea si alguno de los elementos del vector x cumple una
determinada condicin (en este caso ser distinto de cero). Devuelve un uno un
cero
se aplica por separado a cada columna de la matriz A. El resultado es un vector
de unos y ceros
funcin vectorial; chequea si todos los elementos del vector x cumplen una
condicin. Devuelve un uno un cero
se aplica por separado a cada columna de la matriz A. El resultado es un vector
de unos y ceros
busca ndices correspondientes a elementos de vectores que cumplen una
determinada condicin. El resultado es un vector con los ndices de los
elementos que cumplen la condicin
cuando esta funcin se aplica a una matriz la considera como un vector con una
columna detrs de otra, de la 1 a la ltima.

18. FUNCIONES PARA CLCULOS CON POLINOMIOS


Para MATLAB un polinomio se puede definir mediante un vector de coeficientes. Por
ejemplo, el polinomio:
x4 8x2 + 6x 10 = 0
Se puede representar mediante el vector [1, 0, -8, 6, -10]. MATLAB puede realizar
diversas

26

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

operaciones sobre l, como por ejemplo evaluarlo para un determinado valor de x


(funcin
polyval()) y calcular las races (funcin roots()):
pol=[1 0 -8 6 -10]
pol =
1 0 -8 6 -10
roots(pol)
ans =
-3.2800
2.6748
0.3026 + 1.0238i
0.3026 - 1.0238i
polyval(pol,1)
ans =
-11
Para calcular producto de polinomios MATLAB utiliza una funcin llamada conv() (de
producto de convolucin). En el siguiente ejemplo se va a ver cmo se multiplica
un polinomio de segundo grado por otro de tercer grado:
pol1=[1 -2 4]
pol1 =
1 -2 4
pol2=[1 0 3 -4]
pol2 =
1 0 3 -4
pol3=conv(pol1,pol2)
pol3 =
1 -2 7 -10 20 -16
Para dividir polinomios existe otra funcin
orientadas al
clculo con polinomios son las siguientes:
Comando
poly(A)
roots(pol)

llamada

deconv().

Las

funciones

Descripcin
polinomio caracterstico de la matriz A
races del polinomio pol
evaluacin del polinomio pol para el valor de x. Si x es un
Polyval(pol,x)
vector, pol se evala para cada elemento de x
polyvalm(pol,A)
evaluacin del polinomio pol de la matriz A
conv(p1,p2)
producto de convolucin de dos polinomios p1 y p2
divisin del polinomio p por el polinomio q. En c se devuelve
[c,r]=deconv(p,q)
el cociente y en r el resto de la divisin
descompone el cociente entre p1 y p2 en suma de fracciones
Residue(p1,p2)
simples(ver help residue)
Polyder(pol)
calcula la derivada de un polinomio
Polyder(p1,p2)
calcula la derivada de producto de polinomios
calcula los coeficientes de un polinomio p(x) de grado n que se
Polyfit(x,y,n)
ajusta a los datos p(x(i)) ~= y(i), en el sentido de mnimo
error cuadrtico medio.

27

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

19. OTROS TIPOS DE DATOS DE MATLAB


En los Captulos precedentes se ha visto la especialidad de MATLAB: Trabajar con
vectores y matrices. En este Captulo se va a ver que MATLAB puede tambin
trabajar con otros tipos de datos:
Conjuntos o cadenas de caracteres, fundamentales en cualquier lenguaje de
programacin.
Hipermatrices, o matrices de ms de dos dimensiones.
Estructuras, o agrupaciones bajo un mismo nombre de datos de naturaleza diferente.
Vectores o matrices de celdas (cell arrays), que son vectores o matrices cuyos
elementos pueden ser cualquier otro tipo de dato.
Matrices dispersas o matrices dispersas, que son matrices que pueden ser de muy
gran tamao con la mayor parte de sus elementos cero.

20. CADENAS DE CARACTERES


MATLAB trabaja tambin
diferencias respecto a
del manejo de cadenas
caracteres estn en el
est instalado MATLAB.

con cadenas de
C/C++ y Java.
de caracteres
sub-directorio

caracteres, con ciertas semejanzas y tambin


A continuacin se explica lo ms importante
en MATLAB. Las funciones para cadenas de
toolbox\matlab\strfun del directorio en que

Los caracteres de una cadena se almacenan en un vector, con un carcter por


elemento. Cada carcter ocupa dos bytes. Las cadenas de caracteres van entre
apstrofos o comillas simples, como por ejemplo: 'cadena'. Si la cadena debe
contener comillas, stas se representan por un doble carcter comilla, de modo que
se pueden distinguir fcilmente del principio y final de la cadena. Por ejemplo,
para escribir la cadena ni 'idea' se escribira 'ni''idea'''. Una matriz de
caracteres es una matriz cuyos elementos son caracteres, o bien una matriz cuyas
filas son cadenas de caracteres. Todas las filas de una matriz de caracteres deben
tener el mismo nmero de elementos. Si es preciso, las cadenas (filas) ms cortas
se completan con blancos.
A continuacin se pueden ver algunos ejemplos y practicar con ellos:
c='cadena'
c =
cadena
size(c) % dimensiones del array
ans =
1 6
double(c) % convierte en nmeros ASCII cada carcter
ans =
99 97 100 101 110 97
char(abs(c)) % convierte nmeros ASCII en caracteres
ans =
cadena
cc=char('ms','madera') % convierte dos cadenas en una matriz
cc =
ms
madera
size(cc) % se han aadido tres espacios a 'ms'
ans =
2 6

28

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

Las funciones
siguientes:

ms

importantes

para

manejo

de

cadenas

de

caracteres

son

las

double(c)
char(v)
char(c1,c2)

convierte en nmeros ASCII cada carcter


convierte un vector de nmeros v en una cadena de caracteres
crea una matriz de caracteres, completando con blancos las
cadenas ms cortas
deblank(c)
elimina los blancos al final de una cadena de caracteres
disp(c)
imprime el texto contenido en la variable c
ischar(c)
detecta si una variable es una cadena de caracteres
isletter()
detecta si un carcter es una letra del alfabeto. Si se le pasa
un vector o matriz de caracteres devuelve un vector o matriz de
unos y ceros
isspace()
detecta si un carcter es un espacio en blanco. Si se le pasa un
vector o matriz de caracteres devuelve un vector o matriz de unos
y ceros
strcmp(c1,c2)
comparacin de cadenas. Si las cadenas son iguales devuelve un
uno, y si no lo son, devuelve un cero (funciona de modo diferente
que la correspondiente funcin de C)
strcmpi(c1,c2)
igual que strcmp(c1,c2), pero ignorando la diferencia entre
maysculas y minsculas
strncmp(c1,c2,n) compara los n primeros caracteres de dos cadenas
c1==c2
compara dos cadenas carcter a carcter. Devuelve un vector o
matriz de unos y ceros
s=[s,' y ms']
concatena cadenas, aadiendo la segunda a continuacin de la
primera
findstr(c1,c2)
devuelve un vector con las posiciones iniciales de todas las
veces en que la cadena ms corta aparece en la ms larga
strmatch(cc,c)
devuelve los ndices de todos los elementos de la matriz de
caracteres (o vector de celdas) cc, que empiezan por la cadena c
strrep(c1,c2,c3) sustituye la cadena c2 por c3, cada vez que c2 es encontrada en
c1
[p,r]=strtok(t) separa las palabras de una cadena de caracteres t. Devuelve la
primera palabra p y el resto de la cadena r
int2str(v)
convierte un nmero entero en cadena de caracteres
num2str(x,n)
convierte un nmero real x en su expresin por medio de una
cadena de caracteres, con cuatro cifras decimales por defecto
(pueden especificarse ms cifras, con un argumento opcional n)
str2double(str) convierte una cadena de caracteres representando un nmero real
en el nmero real correspondiente
vc=cellstr(cc)
convierte una matriz de caracteres cc en un vector de celdas vc,
eliminando los blancos adicionales al final de cada cadena. La
funcin char() realiza las conversiones opuestas
sprintf
convierte valores numricos en cadenas de caracteres, de acuerdo
con las reglas y formatos de conversin del lenguaje C.
Con las funciones anteriores se dispone
posibilidades
para trabajar con cadenas de caracteres.

en

MATLAB

de

una

amplia

A continuacin se pueden ver algunos ejemplos:


num2str(pi) % el resultado es una cadena de caracteres, no un nmero
ans =
3.142

29

gama

de

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

num2str(pi,8)
ans =
3.1415927
Es habitual convertir los valores numricos en cadenas de caracteres para poder
imprimirlos como ttulos en los dibujos o grficos. Vase el siguiente ejemplo:
fahr=70; grd=(fahr-32)/1.8;
title(['Temperatura ambiente: ',num2str(grd),' grados centgrados'])

21. GRFICOS BIDIMENSIONALES


MATLAB utiliza un tipo especial de ventanas para realizar las operaciones
grficas. Ciertos comandos abren una ventana nueva y otros dibujan sobre la
ventana activa, bien sustituyendo lo que hubiera en ella, bien aadiendo nuevos
elementos grficos a un dibujo anterior. Todo esto se ver con ms detalle en las
siguientes secciones.
5.1. Funciones grficas 2D elementales
MATLAB dispone de cuatro funciones bsicas para crear grficos 2-D. Estas
funciones se diferencian principalmente por el tipo de escala que utilizan en los
ejes de abscisas y de ordenadas.
Estas cuatro funciones son las siguientes:
Comando
Descripcin
crea un grfico a partir de vectores y/o columnas de matrices, con
plot()
escalas lineales sobre ambos ejes.
loglog()
dem con escala logartmica en ambos ejes
dem con escala lineal en el eje de ordenadas y logartmica en el eje
semilogx()
de abscisas
dem con escala lineal en el eje de abscisas y logartmica en el eje de
semilogy()
ordenadas
En lo sucesivo se har referencia casi exclusiva a la primera de estas funciones
(plot). Las dems se pueden utilizar de un modo similar.
Existen adems otras funciones orientadas a aadir ttulos al grfico, a cada uno
de los ejes, a dibujar una cuadrcula auxiliar, a introducir texto, etc. Estas
funciones son las siguientes:
Comando
title('ttulo')

Descripcin
aade un ttulo al dibujo
aade una etiqueta al eje de abscisas. Con xlabel off
xlabel('tal')
desaparece
aade una etiqueta al eje de ordenadas. Con ylabel off
ylabel('cual')
desaparece
introduce 'texto' en el lugar especificado por las coordenadas
x e y. Si x e y son vectores, el texto se repite por cada par
text(x,y,'texto') de elementos. Si texto es tambin un vector de cadenas de texto
de la misma dimensin, cada elemento se escribe en las
coordenadas correspondientes
Introduce texto con ayuda del ratn: el cursor cambia de forma
gtext('texto')
y se espera un clic para introducir el texto en esa posicin
define rtulos para las distintas lneas o ejes utilizados en
legend()
la figura. Para ms detalle, consultar el Help
grid
activa la inclusin de una cuadrcula en el dibujo. Con grid

30

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

off desaparece la cuadrcula


Borrar texto (u otros elementos grficos) es un poco ms complicado; de hecho, hay
que preverlo de antemano. Para poder hacerlo hay que recuperar previamente el
valor de retorno del comando con el cual se ha creado. Despus hay que llamar a la
funcin delete con ese valor como argumento. Considrese el siguiente ejemplo:
v = text(1,.0,'seno')
v =
76.0001
delete(v)
Los dos grupos de funciones anteriores no actan de la misma forma. As, la
funcin plot dibuja una nueva figura en la ventana activa (en todo momento MATLAB
tiene una ventana activa de entre todos las ventanas grficas abiertas), o abre
una nueva figura si no hay ninguna abierta, sustituyendo cualquier cosa que
hubiera dibujada anteriormente en esa ventana. Para verlo, se comenzar creando un
par de vectores x e y con los que trabajar:
x=[-10:0.2:10]; y=sin(x);
Ahora se deben ejecutar los comandos siguientes (se comienza cerrando la ventana
activa,
para que al crear la nueva ventana aparezca en primer plano):
close % se cierra la ventana grfica activa anterior
grid % se crea una ventana con una cuadrcula
plot(x,y) % se dibuja la funcin seno borrando la cuadrcula
Se puede observar la diferencia con la secuencia que sigue:
close
plot(x,y) % se crea una ventana y se dibuja la funcin seno
grid % se aade la cuadrcula sin borrar la funcin seno
En el primer caso MATLAB ha creado la cuadrcula en una ventana nueva y luego la
ha borrado al ejecutar la funcin plot. En el segundo caso, primero ha dibujado la
funcin y luego ha aadido la cuadrcula. Esto es as porque hay funciones como
plot que por defecto crean una nueva figura, y otras funciones como grid que se
aplican a la ventana activa modificndola, y slo crean una ventana nueva cuando
no existe ninguna ya creada. Ms adelante se ver que con la funcin hold pueden
aadirse grficos a una figura ya existente respetando su contenido.

a.FUNCIN PLOT
Esta es la funcin clave de todos los grficos 2-D
en MATLAB. Ya se ha dicho que el elemento bsico de
los grficos bidimensionales es el vector. Se
utilizan tambin cadenas de 1, 2 3 caracteres para
indicar colores y tipos de lnea. La funcin plot(),
en sus diversas variantes, no hace otra cosa que
dibujar vectores. Un ejemplo muy sencillo de esta
funcin, en el que se le pasa un nico vector como
argumento, es el siguiente:
x=[1 3 2 4 5 3]
x =

31

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

1 3 2 4 5 3
plot(x)
El resultado de este comando es que se abre una ventana mostrando el grfico de la
Figura. Por defecto, los distintos puntos del grfico se unen con una lnea
continua. Tambin por defecto, el color que se utiliza para la primera lnea es el
azul. Cuando a la funcin plot() se le pasa un nico vector real como argumento,
dicha funcin dibuja en ordenadas el valor de los n elementos del vector frente a
los ndices 1, 2, ... n del mismo en abscisas. Ms adelante se ver que si el
vector es complejo, el funcionamiento es bastante diferente.
En la pantalla de su ordenador se habr visto que MATLAB utiliza por defecto color
blanco para el fondo de la pantalla y otros colores ms oscuros para los ejes y
las grficas.
Una segunda forma de utilizar la funcin plot() es con dos vectores como
argumentos. En este caso los elementos del segundo vector se representan en
ordenadas frente a los valores del primero, que se representan en abscisas. Vase
por ejemplo cmo se puede dibujar un cuadriltero de esta forma (obsrvese que
para dibujar un polgono cerrado el ltimo punto debe coincidir con el primero):
x=[1 6 5 2 1]; y=[1 0 4 3 1];
plot(x,y)
La funcin plot() permite tambin dibujar mltiples curvas introduciendo varias
parejas de vectores como argumentos. En este caso, cada uno de los segundos
vectores se dibujan en ordenadas como funcin de los valores del primer vector de
la pareja, que se representan en abscisas. Si el usuario no decide otra cosa, para
las sucesivas lneas se utilizan colores que son permutaciones cclicas del azul,
verde, rojo, cyan, magenta, amarillo y negro. Obsrvese bien cmo se dibujan el
seno y el coseno en el siguiente ejemplo:
x=0:pi/25:6*pi;
y=sin(x); z=cos(x);
plot(x,y,x,z)
Ahora se va a ver lo que pasa con los vectores complejos. Si se pasan a plot()
varios vectores complejos como argumentos, MATLAB simplemente representa las
partes reales y desprecia las partes imaginarias. Sin embargo, un nico argumento
complejo hace que se represente la parte real en abscisas, frente a la parte
imaginaria en ordenadas. Vase el siguiente ejemplo. Para generar un vector
complejo se utilizar el resultado del clculo de valores propios de una matriz
formada aleatoriamente:
plot(eig(rand(20,20)),'+')
Donde se ha hecho uso de elementos que se vern en la siguiente seccin, respecto
a dibujar con distintos tipos de markers (en este caso con signos +), en vez de
con lnea continua, que es la opcin por defecto. En el comando anterior, el
segundo argumento es un carcter que indica el tipo de marker elegido. El comando
anterior es equivalente a:
z=eig(rand(20,20));
plot(real(z),imag(z),'+')

32

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

Como ya
ignoran
hay que
como se
tambin

se ha dicho, si se incluye ms de un vector complejo como argumento, se


las partes imaginarias. Si se quiere dibujar varios vectores complejos,
separar explcitamente las partes reales e imaginarias de cada vector,
acaba de hacer en el ltimo ejemplo. El comando plot puede utilizarse
con matrices como argumentos.

Vanse algunos ejemplos sencillos:


dibuja una lnea por cada columna de A en ordenadas, frente al
ndice de los elementos en abscisas
dibuja las columnas (o filas) de A en ordenadas frente al vector x
en abscisas. Las dimensiones de A y x deben ser coherentes: si la
plot(x,A)
matriz A es cuadrada se dibujan las columnas, pero si no lo es y la
dimensin de las filas coincide con la de x, se dibujan las filas
anlogo al anterior, pero dibujando las columnas (o filas) de A en
plot(A,x)
abscisas, frente al valor de x en ordenadas
dibuja las columnas de B en ordenadas frente a las columnas de A en
plot(A,B)
abscisas, dos a dos. Las dimensiones deben coincidir
anlogo al anterior para cada par de matrices. Las dimensiones de
plot(A,B,C,D) cada par deben coincidir, aunque pueden ser diferentes de las
dimensiones de los dems pares
plot(A)

Se puede obtener una excelente y breve descripcin de la funcin plot() con el


comando help plot o helpwin plot. La descripcin que se acaba de presentar se
completar en la siguiente seccin, en donde se ver cmo elegir los colores y los
tipos de lnea.

b.ESTILOS DE LNEA Y MARCADORES EN LA FUNCIN PLOT


En la seccin anterior se ha visto cmo la tarea fundamental de la funcin plot()
era dibujar los valores de un vector en ordenadas, frente a los valores de otro
vector en abscisas. En el caso general esto exige que se pasen como argumentos un
par de vectores. En realidad, el conjunto bsico de argumentos de esta funcin es
una tripleta formada por dos vectores y una cadena de 1, 2 3 caracteres que
indica el color y el tipo de lnea o de marker. En la tabla siguiente se pueden
observar las distintas posibilidades.

Cuando hay que dibujar varias lneas, por defecto se van cogiendo sucesivamente
los colores de la tabla comenzando por el azul, hacia arriba, y cuando se terminan
se vuelve a empezar otra vez por el azul. Si el fondo es blanco, este color no se
utiliza para las lneas.

33

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

c.AADIR LNEAS A UN GRFICO YA EXISTENTE


Existe la posibilidad de aadir lneas a un grfico ya existente, sin destruirlo o
sin abrir una nueva ventana. Se utilizan para ello los comandos hold on y hold
off. El primero de ellos hace que los grficos sucesivos respeten los que ya se
han dibujado en la figura (es posible que haya que modificar la escala de los
ejes); el comando hold off deshace el efecto de hold on. El siguiente ejemplo
muestra cmo se aaden las grficas de x2 y x3 a la grfica de x previamente
creada (cada una con un tipo de lnea diferente):

plot(x)
hold on
plot(x2,'--')
plot(x3,'-.')
hold off

d.COMANDO SUBPLOT
Una ventana grfica se puede dividir en m particiones horizontales y n verticales,
con objeto de representar mltiples grficos en ella. Cada una de estas
subventanas tiene sus propios ejes, aunque otras propiedades son comunes a toda la
figura. La forma general de este comando es:
subplot(m,n,i)
donde m y n son el nmero de subdivisiones en filas y columnas, e i es la
subdivisin
que
se
convierte
en
activa.
Las
subdivisiones
se
numeran
consecutivamente empezando por las de la primera fila, siguiendo por las de la
segunda, etc. Por ejemplo, la siguiente secuencia de comandos genera cuatro
grficos en la misma ventana:

y=sin(x); z=cos(x); w=exp(-x*.1).*y; v=y.*z;


subplot(2,2,1), plot(x,y)
subplot(2,2,2), plot(x,z)
subplot(2,2,3), plot(x,w)
subplot(2,2,4), plot(x,v)

Se puede practicar con este ejemplo aadiendo ttulos a cada subplot, as como
rtulos para los ejes. Se puede intentar tambin cambiar los tipos de lnea. Para
volver a la opcin por defecto basta teclear el comando:
subplot(1,1,1)

e.CONTROL DE LOS EJES


Tambin en este punto MATLAB tiene sus opciones por defecto, que en algunas
ocasiones puede interesar cambiar. El comando bsico es el comando axis. Por
defecto, MATLAB ajusta la escala de cada uno de los ejes de modo que vare entre
el mnimo y el mximo valor de los vectores a representar. Este es el llamado modo
"auto", o modo automtico. Para definir de modo explcito los valores mximo y
mnimo segn cada eje, se utiliza el comando:
axis([xmin, xmax, ymin, ymax])

mientras que :

axis('auto')

devuelve el escalado de los ejes al valor por defecto o automtico. Otros posibles
usos de este comando son los siguientes:

34

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

Comando

Descripcin
devuelve un vector v con los valores [xmin, xmax,
v=axis
ymin, ymax]
mantiene los ejes en sus actuales valores, de cara a
axis(axis)
posibles nuevas grficas aadidas con hold on
utiliza ejes de pantalla, con el origen en la
axis('ij')
esquina superior izda. y el eje j en direccin
vertical descendente
utiliza ejes cartesianos normales, con el origen en
axis('xy')
la esquina inferior izda. y el eje y vertical
ascendente
axis('equal') el escalado es igual en ambos ejes
axis('square') la ventana ser cuadrada
la ventana tendr las proporciones de la imagen que
se desea representar en ella (por ejemplo la de una
axis('image')
imagen bitmap que se desee importar) y el escalado
de los ejes ser coherente con dicha imagen
elimina las restricciones introducidas por 'equal' y
axis('normal')
'square'
axis('off')
elimina las etiquetas, los nmeros y los ejes
axis('on')
restituye las etiquetas, los nmeros y los ejes

f.FUNCIN LINE()
La funcin line() permite dibujar una o ms lneas que unen los puntos cuyas
coordenadas se pasan como argumentos. Permite adems especificar el color, grosor,
tipo de trazo, marcador, etc. Es una funcin de ms bajo nivel que la funcin
plot(), pero ofrece una mayor flexibilidad. En su versin ms bsica, para dibujar
un segmento de color verde entre dos puntos, esta funcin se llamara de la
siguiente manera:
line([xini, xend]', [yini, yend]', 'color', 'g')
Se puede tambin dibujar dos lneas a la vez utilizando la forma:
line([xini1 xini2; xend1 xend2], ([yini1 yini2; yend1 yend2]);
Finalmente, si cada columna de la matriz X contiene la coordenada x inicial y
final de un punto, y lo mismo las columnas de la matriz Y con las coordenadas y,
la siguiente sentencia dibuja tantas lneas como columnas tengan las matrices X e
Y:
line([X], [Y]);
Se pueden controlar las caractersticas
parmetro/valor, como por ejemplo:

de

la

lnea

por

medio

de

pares

line(x,y,'Color','r','LineWidth',4,'MarkerSize',12,'LineStyle','','Marker','*')

g.CONTROL DE VENTANAS GRFICAS: FUNCIN FIGURE


Si se llama a la funcin figure sin argumentos, se crea una nueva ventana grfica
con el nmero consecutivo que le corresponda. El valor de retorno es dicho nmero.
Por otra parte, el comando figure(n) hace que la ventana n pase a ser la ventana o
figura activa. Si dicha ventana no existe, se crea una nueva ventana con el nmero
consecutivo que le corresponda (que se puede obtener como valor de retorno del

35

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

comando). La funcin close cierra la figura activa, mientras que close(n) cierra
la ventana o figura nmero n.
El comando clf elimina el contenido de la figura activa, es decir, la deja abierta
pero vaca. La funcin gcf devuelve el nmero de la figura activa en ese momento.
El comando figure(gcf) (get current figure) permite hacer visible la ventana de
grficos desde la ventana de comandos.

x=[-4*pi:pi/20:4*pi];
plot(x,sin(x),'r',x,cos(x),'g')
title('Funcin seno(x) -en rojo- y funcin coseno(x) -en verde-')
xlabel('ngulo en radianes'), figure(gcf)
ylabel('valor de la funcin trigonomtrica'), figure(gcf)
axis([-12,12,-1.5,1.5]), figure(gcf)
axis('equal'), figure(gcf)
axis('normal'), figure(gcf)
axis('square'), figure(gcf)
axis('off'), figure(gcf)
axis('on'), figure(gcf)
axis('on'), grid, figure(gcf)

22. Otras funciones grficas 2-D


Existen otras funciones grficas bidimensionales orientadas a generar otro tipo de
grficos distintos de los que produce la funcin plot() y sus anlogas. Algunas de
estas funciones son las siguientes (para ms informacin sobre cada una de ellas
en particular, utilizar help nombre_funcin):
COMANDO
bar()
barh()
bar3()
bar3h()
pie()
pie3()
area()
stairs()
errorbar()
compass()
feather()
hist()
rose()
quiver()

RESULTADO
crea diagramas de barras
diagramas de barras horizontales
diagramas de barras con aspecto 3-D
diagramas de barras horizontales con aspecto 3-D
grficos con forma de tarta
grficos con forma de tarta y aspecto 3-D
similar plot(), pero rellenando en ordenadas de 0 a y
funcin anloga a bar() sin lneas internas
representa sobre una grfica mediante barras valores de errores
dibuja los elementos de un vector complejo como un conjunto de vectores
partiendo de un origen comn
dibuja los elementos de un vector complejo como un conjunto de vectores
partiendo de orgenes uniformemente espaciados sobre el eje de abscisas
dibuja histogramas de un vector
histograma de ngulos (en radianes)
dibujo de campos vectoriales como conjunto de vectores

A modo de ejemplo, genrese un vector de valores aleatorios entre 0 y 10, y


ejectense los
siguientes comandos:

x=[rand(1,100)*10];
plot(x)
bar(x)
stairs(x)
hist(x)

36

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

hist(x,20)
alfa=(rand(1,20)-0.5)*2*pi;
rose(alfa)

23. FUNCIN FPLOT


La funcin plot vista anteriormente dibuja vectores. Si se quiere dibujar una
funcin, antes de ser pasada a plot debe ser convertida en un vector de valores.
Esto tiene algunos inconvenientes, por ejemplo, el que "a priori" es difcil
predecir en que zonas la funcin vara ms rpidamente y habra por ello que
reducir el espaciado entre los valores en el eje de abscisas. La funcin fplot
admite como argumento un nombre de funcin o un nombre de fichero *.m en el cual
est definida una funcin de usuario. La funcin puede ser escalar (un nico
resultado por cada valor de x) o vectorial. La forma general de esta funcin es la
siguiente:
fplot('funcion', limites, 'cadena', tol)
donde 'funcion' representa el nombre de la funcin o del fichero *.m entre
apstrofos (pasado como cadena de caracteres), limites es un vector de 2 4
elementos que puede tomar los valores [xmin,xmax] o [xmin,xmax,ymin,ymax],
'cadena' tiene el mismo significado que en plot y permite controlar el color, los
markers y el tipo de lnea. tol es la tolerancia de error relativo. El valor por
defecto es 2e-03. El mximo nmero de valores en x es (1/tol)+1
Esta funcin puede utilizarse tambin en la forma:
[x,y]=fplot('funcion', limites, 'cadena', tol)
y en este caso se devuelven los vectores x e y, pero no se dibuja nada. El grfico
puede obtenerse con un comando posterior por medio de la funcin plot. Vase un
ejemplo de utilizacin de esta funcin. Se comienza creando un fichero llamado
mifunc.m en el directorio G:\matlab que contenga las lneas siguientes:
function y = mifunc(x)
y(:,1)=200*sin(x)./x;
y(:,2)=x.^2;
y a continuacin se ejecuta el comando:
fplot('mifunc(x)', [-20 20], 'g')
Obsrvese que la funcin mifunc devuelve una matriz con dos columnas, que
constituyen las dos grficas dibujadas. En este caso se ha utilizado para ellas el
color verde.

24. FUNCIN FILL PARA POLGONOS


sta es una funcin especial para dibujar polgonos planos, rellenndolos de un
determinado color. La forma general es la siguiente:
fill(x,y,c)
que dibuja un polgono definido por los vectores x e y, rellenndolo con el color
especificado por c. Si es necesario, el polgono se cierra uniendo el ltimo
vrtice con el primero. Respecto al color:

37

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

Si c es un carcter de color ('r','g','b','c','m','y','w','k'), o un vector


de valores [r g b], el polgono se rellena de modo uniforme con el color
especificado.

Si c es un vector de la misma dimensin que x e y, sus elementos


trasforman de acuerdo con un mapa de colores determinado, y el llenado
polgono no uniforme en este caso se obtiene interpolando entre
colores de los vrtices. Sobre este tema de los colores, se volver
adelante con un cierto detenimiento.

se
del
los
ms

Este comando puede utilizarse tambin con matrices:


fill(A,B,C)
Donde A y B son matrices del mismo tamao. En este caso se dibuja un polgono por
cada par de columnas de dichas matrices. C puede ser un vector fila de colores
uniformes para cada polgono, o una matriz del mismo tamao que las anteriores
para obtener colores de relleno por interpolacin. Si una de las dos, o A o B, son
un vector en vez de una matriz, se supone que ese vector se repite tantas veces
como sea necesario para dibujar tantos polgonos como columnas tiene la matriz.
Considrese un ejemplo sencillo de esta funcin:
x=[1 5 4 2]; y=[1 0 4 3];
fill(x,y,'r')
colormap(gray), fill(x,y,[1 0.5 0.8 0.7])

25. ENTRADA DE PUNTOS CON EL RATN


Se realiza mediante la funcin ginput, que permite introducir las coordenadas del
punto sobre el que est el cursor, al clicar (o al pulsar una tecla). Algunas
formas de utilizar esta funcin son las siguientes:
[x,y] = ginput lee un nmero indefinido de puntos cada vez que se clica o se
pulsa una tecla cualquiera hasta que se termina pulsando la tecla
intro
[x,y]
= lee las coordenadas de n puntos
ginput(n)
[x,y,bot]
= igual que el anterior, pero devuelve tambin un vector de enteros
ginput
bot con el cdigo ASCII de la tecla pulsada o el nmero del botn
del ratn (1, 2, ...) con el que se ha clicado
Como ejemplo de utilizacin de este comando, ejectense las instrucciones
siguientes en la ventana de comandos de MATLAB para introducir un cuadriltero
arbitrario y dibujarlo de dos formas:
clf, [x,y]=ginput(4);
figure(gcf), plot(x,y,'w'), pause(5), fill(x,y,'r')
Donde se ha introducido el comando pause(5) que espera 5 segundos antes de pasar a
ejecutar el siguiente comando. Este comando admite como argumento un tiempo con
precisin de centsimas de segundo.

26. GRAFICOS 2D Y 3D
Ya hemos venido realizando grficos en 2D como lo son las respuestas de los
ejercicios anteriores, ahora vamos a dibujar grficos en 3D.

38

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

Supongamos
que
superficie:
Esto lo hacemos
instrucciones:

queremos

con

la

dibujar

la

secuencia

de

x=-5:.4:5;
y=x;
[X,Y]=meshgrid(x,y);
Z=X.^2.*exp(-Y.^2);
surf(X,Y,Z)
Las primeras dos instrucciones dividen
los ejes de x y y en subintervalos
de largo 0.4; la tercera instruccin
genera una rejilla en el conjunto [5,5]x[-5,5] con cuadraditos de lados
0.4.
La cuarta instruccin evala la funcin en los puntos de la rejilla, y finalmente
trazamos la superficie con surf.
Para crear un fichero llamado sombrero
procedemos de la siguiente forma:
>> w=sin(r)./r;
>> mesh(w)
>> u=-8:0.5:8;
>> v=u;
>> [u,v]=meshgrid(u,v);
>> r=sqrt(u.^2+v.^2)+eps;
>> w=sin(r)./r;
>> mesh(w)
si ingresamos el comando surf(w), nos
muestra la misma grafica pero en vez de
lneas aparece ahora una superficie
faceteada

39

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

27. Graficas de curvas dadas en coordenadas polares y


parametricas.
En muchos casos se hace necesario realizar graficas en forma Parametrica para lo
cual lo nico que debemos
hacer es parametrizar la curva correspondiente como ilustra el ejemplo siguiente.
Dada la curva definida en forma Parametrica por:

t=0:0.1:10;
x=2*cos(t)-cos(2*t);
y=2*sin(t)-sin(2*t);
plot(x,y,'r')
Obtenemos las siguiente salida:
Para realizar graficas en coordenadas polares Matlab cuenta con los siguientes
comandos:
polar(a,r) : Representa la curva en coordenadas polares
polar(a,r,S): Representa la curva en coordenadas polares con el estilo de lneas
especificado por S.
veamos algunos Ejemplos:
a=0:0.01:2*pi;
r=sin(2*a).*cos(2*a);
polar(a,r)

a=0:0.01:2*pi;
r=4*(1+cos(a));
polar(a,r)

28. Comandos bsicos de programacin


a. COMO HACER UN PROGRAMA EN MATLAB (GENERALIDADES)
Es posible realizar un programa en Matlab tal como se hace en otros lenguajes como
el basic, pascal o el lenguaje C. Es necesario utilizar un editor para escribir el
cdigo. Para cargar un editor, se puede hacer desde la ventana options, escogiendo
editor preferente, y cargando el editor que se desee utilizar. Para escribir
cdigo, requerimos crear un archivo *.M. Para esto necesitamos abrir new M.file en
la ventana file. Ahora escribimos el cdigo y salvamos el archivo utilizando la
terminacin archivo.M. Se puede correr el programa desde Matlab simplemente
escribiendo el nombre del archivo que fue creado. Es posible abrir programas con
la terminacin *.M desde Matlab, en el men file, open M.file.

40

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

b. PROGRAMACIN DE MATLAB
Como ya se ha dicho varias veces incluso con algn ejemplo MATLAB es una
aplicacin que se puede programar muy fcilmente. De todas formas, como lenguaje
de programacin pronto ver que no tiene tantas posibilidades como otros lenguajes
(ni tan complicadas...). Se comenzar viendo las bifurcaciones y bucles, y la
lectura y escritura interactiva de variables, que son los elementos bsicos de
cualquier programa de una cierta complejidad.
c. BIFURCACIONES Y BUCLES
Se van a introducir aqu los primeros conceptos de programacin. MATLAB posee
un lenguaje de programacin que como cualquier otro lenguaje dispone de
sentencias para realizar bifurcaciones y bucles. Las bifurcaciones permiten
realizar una u otra operacin segn se cumpla o no una determinada condicin.
La Figura 12 muestra tres posibles formas de bifurcacin.
Los bucles permiten repetir las mismas o anlogas operaciones sobre datos

distintos. Mientras que en C/C++/Java el "cuerpo" de estas sentencias se


determinaba mediante llaves {...}, en MATLAB se utiliza la palabra end con
anloga finalidad. Existen tambin algunas otras diferencias de sintaxis.
La Figura 13 muestra dos posibles formas de bucle, con el control situado al
principio o al final del mismo. Si el control est situado al comienzo del
bucle es posible que las sentencias no se ejecuten ninguna vez, por no haberse
cumplido la condicin cuando se llega al bucle. Sin embargo, si la condicin
est al final del bucle las sentencias se ejecutarn por lo menos una vez,
aunque la condicin no se cumpla. Muchos lenguajes de programacin disponen de
bucles con control al principio (for y while en C/C++/Java) y al final (do

41

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

while en C/C++/Java). En MATLAB no hay bucles con control al final del bucle,
es decir, no existe la construccin anloga a do ... while.
Las bifurcaciones y bucles no slo son tiles en la preparacin de programas o
de ficheros *.m. Tambin se aplican con frecuencia en el uso interactivo de
MATLAB, como se ver ms adelante en algunos ejemplos.
Para la estructura de programacin en MATLAB se requiere conocer por lo menos
los siguientes comandos:
d. Comando END
Determina hasta cual orden llega el efecto
ejemplos de su uso ver if, while y for)
e. Comando IF

de

if,

for,

while.

(Para

Verifica si se cumple cierta condicin, y de acuerdo a si se cumple o no


realiza la accin que se desee.
La sintaxis de la orden es:

if (condicin), (ordenes 1) [else, (ordenes 2)] end;

Donde las ordenes entre [

] son opcionales.

(ordenes 1) son las ordenes que se realizarn si (condicin) se cumple.


(ordenes 2) son las ordenes que se realizarn si (condicin) NO se cumple.
(condicin) Puede ser:
a == b

(verifica si a es igual a b)

a < b

(verifica si a es menor que b)

a > b

(verifica si a es mayor que b)

a <= b

(verifica si a es menor o igual que b)

a >= b

(verifica si a es menor o igual que b)

a ~= b (verifica que a y b sean diferentes)

El siguiente ejemplo ilustra el uso de if:

%Ejemplo de uso de if.


n=0;
if n==0,
n

% al escribir una expresin sin punto y coma final, MATLAB escribe


% su resultado en pantalla.

else,
n = 1
end;

42

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

n = 2;
if n == 0,
n
else,
n =1
end;

La salida que se obtiene con el programa anterior es la siguiente:


n =
0
n =
1
Donde el 0 (cero) proviene de entrar al primer if, y el 1 (uno), de entrar al
else del segundo if.
f. Comando WHILE
Realiza una parte del programa mientras se cumpla alguna condicin.
La sintaxis de la orden es:

while (condicin), (ordenes) end;

(ordenes) son las ordenes que se realizarn mientras (condicin) se cumpla.


(condicin) Puede ser:

a == b

(verifica si a es igual a b)

a < b

(verifica que si a es menor que b)

a > b

(verifica que si a

es mayor que b)

a <= b (verifica si a es menor o igual que b)


a >= b

(verifica que si a es mayor o igual que b)

a ~= b (verifica que a y b sean diferentes)


El siguiente ejemplo ilustra el uso de while:
%Ejemplo de uso de while.
n=0;
while n<=5,
n
%Al escribir el nombre de la variable (sin punto y coma) MATLAB
% imprime su valor.
n = n + 1;
de n.

43

%El punto y coma evita que MATLAB imprima el nuevo valor

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

end;
La salida que se obtiene al correr el programa anterior es:
n =
0
n =
1
n =
2
n =
3
n =
4
n =
5
g. Comando FOR
Muy parecido al While, pero utiliza un contador, es til si se quiere repetir
una parte del programa un nmero. determinado de veces.
La sintaxis de la orden es:
for (contador), (ordenes) end;
(ordenes) son las ordenes que se realizarn (contador) llega a su valor
final.
(contador) Es de la forma:
variable = a [ , b ] : c
Donde:
variable es el contador en s.
a es el valor inicial del contador (variable).
b es el segundo valor del contador (opcional, si se omite, b=a+1), su funcin
es determinar el incremento del contador.
c es el valor final del contador (variable).
El siguiente ejemplo ilustra el uso de for:
% Ejemplo de uso de for.
for i=0,0.5:2.5,
i

%al escribir el nombre de una variable (sin punto y coma)

%MATLAB muestra su valor.


end;
La salida del programa anterior es la siguiente:
i =

44

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

0
i =
0.5
i =
1
i =
1.5
i =
2
i =
2.5
h. Comando PLOT
Sirve para obtener resultados grficos en 2D.
La sintaxis de la orden es:
plot(x, y);
x es el vector que contiene los valores de x. y es el vector que contiene los
valores de y, tal que el valor de y en la posicin uno del vector corresponde
al primer valor del vector x. La grfica se realiza uniendo una serie de
rectas entre los puntos incluidos en los vectores X y Y. Si las curvas quedan
muy mal hechas (se notan las rectas) puede ser necesario disminuir el paso de
los vectores (y aumentar el nmero de puntos.
Para claridad, puede ser necesario leer la parte correspondiente a vectores a
la orden FOR.
El siguiente ejemplo ilustra el uso de plot:
% Ejemplo de uso de plot.
for i =1:101,
x(i) = (i-1) /100;
y(i)=x(i) 3 - 1;

% Organiza en vectores la funcin y=x^3 - 1

end;
plot(x, y);
pause;
%pausa el computador hasta que se presione una teclaesta orden es
necesaria cuando se hace ms de una grfica, para poder ver cada una por
separado. Ya que MATLAB las dibuja en la misma ventana siempre. (a menos que
se use el comando FIGURE).
Al correr el programa se obtiene la grfica de la curva
y=x3 -1 (para 0<=x<=1). La grfica aparecer en una
ventana aparte llamada Figure 1, y la recta se ver
asi:
Otro ejemplo, para la grfica de
y = sin(t) en el
intervalo
t = 0 a
t = 10; donde debemos hacer lo
siguiente:

45

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

>> t = 0:.3:10;
>> y = sin(t);
>> plot( t , y)
Aqu el resultado grfico:
El comando t = 0: .3 :10; define el vector entre los
componentes desde 0 a 10 incrementados de 0.3. La
expresin y = sin(t); va a definir los valores de los
componentes que son: sin(0), sin(0.3), sin(0.6), etc.
Finalmente, plot(t,y) usa el vector de t y los valores
de y para la construccin del grfico.

i. Funciones de dos variables


Vamos a elaborar la grfica de la funcin

z(x,y) = x exp( - x^2 - y^2):

>> [x,y] = meshdom(-2:.2:2, -2:.2:2);


>>

z = x .* exp(-x.^2 - y.^2);

>>

mesh(z)
El primer comando crea una matriz para hacer la
entrada de los puntos en el espacio cuadrado de -2
<= x <= 2, -2 <= y <= 2.
Los cuadrados pequeos
que constituyen la reja son de 0.2 unidades ancho
y 0.2 unidades de alto. La segunda orden crea una
matriz cuyas entradas son los valores de la
funcin
z(x,y) a los puntos de la reja. La
tercera orden usa esta informacin para construir
el grfico.
j. Comando DISP

Sirve para escribir texto de salida o vectores. de resultados.


La sintaxis de la orden es:
disp(X);
X Puede ser:
Un vector.
Una matriz.
Una cadena de texto.
El siguiente ejemplo ilustra el uso de disp:
%Ejemplo de uso de disp.
a = [1, 2, 3, 4, 9 11]; % Un vector
disp(a);
a = [1, 2 , 7 ; 6, 3, 4]; % Una matriz
disp(a);

46

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

a = Texto se puede escribir as ; % Cadena de texto


disp(a);
disp( Tambin se puede escribir as. );
La salida del programa anterior ser:
1

11

Texto se puede escribir as


Tambin se puede escribir as.
k. Comando INPUT
Se utiliza
ejecuta.

para

que

el

programa

pida

valores

de

variables

mientras

se

La sintaxis de la orden es:

variable = input ( texto );

variable es un nombre vlido de variable, en la que se quiere almacenar el


valor que se pregunta.texto puede ser una variable o, Una cadena.

El siguiente ejemplo ilustra el uso de input:

%Ejemplo de uso de input.


a = 0;

% hace vlido el nombre de variable a.

a = input( Teclee el valor de a: );


tex = Cual es el nuevo valor de a? ;
a

% Al escribir el nombre de una variable (sin punto y coma al final)


% MATLAB muestra su valor.

a = input(tex);
a

La salida de este programa ser:

Teclee el valor de a: (espera)


a =

47

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

xxx

% aqu se imprime el valor asignado para a.

Cual es el nuevo valor de a? (espera)


a =
yyy

Donde xxx y yyy son valores introducidos por el usuario en el momento de


correr el programa.

29. FICHEROS *.M


Los ficheros con extensin (.m) son ficheros de texto sin formato (ficheros
ASCII) que constituyen el centro de la programacin en MATLAB. Ya se han
utilizado en varias ocasiones. Estos ficheros se crean y modifican con un
editor de textos cualquiera. En el caso de MATLAB 5.3 ejecutado en un PC bajo
Windows, lo ms sencillo es utilizar su propio editor de textos.
Existen dos tipos de ficheros *.m, los ficheros de comandos (llamados scripts
en ingls) y las funciones. Los primeros contienen simplemente un conjunto de
comandos que se ejecutan sucesivamente cuando se teclea el nombre del fichero
en la lnea de comandos de MATLAB. Un fichero de comandos puede llamar a
otros ficheros de comandos. Si un fichero de comandos se llama desde de la
lnea de comandos de MATLAB, las variables que crea pertenecen al espacio de
trabajo base de MATLAB (recordar Apartado 1.4.4), y permanecen en l cuando
se termina la ejecucin de dicho fichero.
Las funciones
MATLAB, con su

permiten

definir

funciones

enteramente

anlogas

las

de

nombre, sus argumentos y sus valores de retorno. Los ficheros *.m que definen
funciones permiten extender las posibilidades de MATLAB; de hecho existen
bibliotecas de ficheros *.m que se venden (toolkits) o se distribuyen
gratuitamente (a travs de Internet). Las funciones definidas en ficheros *.m
se caracterizan porque la primera lnea (que no sea un comentario) comienza
por la palabra function, seguida por los valores de retorno (entre corchetes
[ ] y separados por comas, si hay ms de uno), el signo igual (=) y el nombre
de la funcin, seguido de los argumentos (entre parntesis y separados por
comas). Recurdese que un fichero *.m puede llamar a otros ficheros *.m, e
incluso puede llamarse a s mismo de forma recursiva. Los ficheros de
comandos se pueden llamar tambin desde funciones, en cuyo caso las variables
que se crean pertenecen a espacio de trabajo de la funcin. El espacio de
trabajo de una funcin es independiente del espacio de trabajo base y del
espacio de trabajo de las dems funciones. Esto implica por ejemplo que no
puede haber colisiones entre nombres de variables: aunque varias funciones
tengan una variable llamada A, en realidad se trata de variables
completamente distintas (a no ser que A haya sido declarada como variable
global).
A continuacin se ver con un poco ms de detalle ambos tipos de ficheros
*.m.

30. FICHEROS DE COMANDOS (SCRIPTS)


Como ya se ha dicho, los ficheros de comandos o scripts son ficheros con un
nombre tal como file1.m que contienen una sucesin de comandos anloga a la

48

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

que se tecleara en el uso interactivo del programa. Dichos comandos se


ejecutan sucesivamente cuando se teclea el nombre del fichero que los
contiene (sin la extensin), es decir cuando se teclea file1 con el ejemplo
considerado.
Cuando se ejecuta desde la lnea de comandos, las variables creadas por file1
pertenecen al espacio de trabajo base de MATLAB. Por el contrario, si se
ejecuta desde una funcin, las variables que crea pertenecen al espacio de
trabajo de la funcin. En los ficheros de comandos conviene poner los puntos
y coma (;) al final de cada sentencia,
para evitar una salida de resultados demasiado cuantiosa. Un fichero *.m
puede llamar a otros ficheros *.m, e incluso se puede llamar a s mismo de
modo recursivo.
31.

RECOMENDACIONES GENERALES DE PROGRAMACIN

Las funciones vectoriales de MATLAB son mucho ms rpidas que sus


contrapartidas escalares. En la medida de lo posible es muy interesante
vectorizar los algoritmos de clculo, es decir, realizarlos con vectores y
matrices, y no con variables escalares dentro de bucles. Aunque los vectores
y matrices pueden ir creciendo a medida que se necesita, es mucho ms rpido
reservarles toda la memoria necesaria al comienzo del programa. Se puede
utilizar para ello la funcin zeros. Adems de este modo la memoria reservada
es contigua.
Es importante utilizar el profile para conocer en qu sentencias de cada
funcin se gasta la mayor parte del tiempo de clculo. De esta forma se
descubren cuellos de botella y se pueden desarrollar aplicaciones mucho ms
eficientes.
Conviene desarrollar los programas incrementalmente, comprobando cada funcin
o componente que se aade. De esta forma siempre se construye sobre algo que
ya ha sido comprobado y que funciona: si aparece algn error, lo ms probable
es que se deba a lo ltimo que se ha aadido, y de esta manera la bsqueda
de errores est acotada y es mucho ms sencilla.
Recurdese que de ordinario el tiempo de correccin de errores en un programa
puede ser 4 5 veces superior al tiempo de programacin. El debugger es una
herramienta muy til a la hora de acortar ese tiempo de puesta a punto. En
este mismo sentido, puede decirse que pensar bien las cosas al programar
(sobre una hoja de papel en blanco, mejor que sobre la pantalla del PC)
siempre es rentable, porque se disminuye ms que proporcionalmente el tiempo
de depuracin y eliminacin de errores.
Otro objetivo de la programacin debe ser mantener el cdigo lo ms sencillo
y ordenado posible. Al pensar en cmo hacer un programa o en cmo realizar
determinada tarea es conveniente pensar siempre primero en la solucin ms
sencilla, y luego plantearse otras cuestiones como la eficiencia.
Finalmente, el cdigo debe ser escrito de una manera clara y ordenada,
introduciendo comentarios, utilizando lneas en blanco para separar las
distintas partes del programa, sangrando las lneas para ver claramente el
rango de las bifurcaciones y bucles, utilizando nombres de variables que
recuerden al significado de la magnitud fsica correspondientes, etc. En
cualquier caso, la mejor forma (y la nica) de aprender a programar es
programando.

49

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

Capitulo II: ANLISIS Y CONTROL DE SISTEMAS USANDO MATLAB


1.Introduccin
En lo que sigue, se va a realizar una introduccin a los comandos de matlab
relacionados con la teora de control de sistemas. Casi todas las funciones que se
describen pertenecen al Control System Toolbox. Las funciones principales se van a
explicar sobre ejemplos demostrativos, con el fin de que su uso y comprensin sean
lo mas sencillos posible. Se realizaran ejemplos tanto en el dominio temporal,
continuo y discreto, como en el frecuencial. Tambin se mostrara la forma de dar
la descripcin de un sistema lineal mediante funcin de transferencia, conjunto de
polos y ceros, o variables de estado. Asimismo se comentara la forma de manipular
una funcin de transferencia como un objeto.

2.Tratamiento mediante funciones de transferencia.


(Sistemas continuos)
Este apartado muestra el uso de algunas de las herramientas con las que cuenta
matlab para el diseo y anlisis de sistemas de control. Para el ejemplo se va a
partir de una descripcin de la planta en forma de funcin de transferencia:

En matlab las funciones de transferencia se introducen dando el par de polinomios


numerador denominador:

num = [.2 .3 1];


den1 = [1 .4 1];
den2 = [1 .5];

El polinomio del denominador es el producto de dos trminos. Para obtener el


polinomio resultante se usa el producto de convolucin (o de polinomios).

den = conv(den1,den2)

Para ver los polos (o los ceros) de la funcin de transferencia, podemos usar:
roots(den) (roots(num)). Una forma mas completa de convertir una funcin de
transferencia dada por dos polinomios numerador y denominador, en un conjunto de
factores de grado 1, correspondientes a los polos (z1, z2, z3) y ceros (c1, c2),
de la forma:

50

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

es mediante el comando tf2zp:


[ceros ,polos ,gan] = tf2zp (N,D);
que devuelve un vector conteniendo los ceros de la funcin de transferencia, un
vector conteniendo los polos, y un escalar correspondiente a la ganancia esttica.
La funcin complementaria a sta tambin existe:
[N,D] = zp2tf (ceros,polos,gan);
Como curiosidad, cabe mencionar que el nombre de estas funciones es bastante
descriptivo:
tf-two-zp procede de transfer-function to zero-pole form.

2.1.

Dominio Temporal

La respuesta ante un escaln a la entrada se puede analizar en sistemas que tengan


una descripcin en forma de funcin de transferencia o una representacin en el
espacio de estados,
generando un vector de tiempos y usando la funcin step:
t = [0:.3:15];
y = step(num,den,t);
plot (t,y);
title (Respuesta a un escaln unitario);
xlabel (tiempo(seg));
grid;
La respuesta al escaln unitario puede verse en la Fig. 1.1. Seleccionando con el
ratn en la curva, pueden modificarse algunos atributos de la misma. Tambin
pueden modificarse las propiedades de los ejes de forma anloga. Las figuras
guardarse en ficheros .Fig. propios de matlab, o exportarse en diferentes formatos
grficos estndar.
No es necesario recuperar el resultado de la simulacin ante
escaln que realiza step para despus representarlo con
plot, sino que el propio comando step, si lo utilizamos sin
parmetros de salida, realiza la representacin. Es mas, en
este segundo caso, la representacin grafica es algo mas
interactiva, puesto que si pinchamos con el botn
izquierdo en algn punto de la grafica, nos dice los valores
correspondientes al tiempo y al valor de la salida en ese
punto.
La respuesta impulsional se puede obtener del mismo modo,
pero usando en este caso la funcin impulse, que tiene una

51

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

sintaxis similar al comando step. Ntese que el vector de tiempos ya ha sido


definido con anterioridad.
impulse (num,den,t);
La respuesta al impulso puede verse en la Fig. 1.2.

La respuesta del sistema a cualquier tipo de entrada


tambin puede obtenerse. Para ello es necesario tener la
seal de entrada en un vector u, que lgicamente deber
tener la misma dimensin que el vector de tiempos. En
sistemas multivariables, en vez de un vector de entradas
tendremos una matriz. A estos efectos se usa la funcin
lsim. Un ejemplo caracterstico es la respuesta a una
entrada en rampa:

ramp = t;
y = lsim (num,den,ramp,t);
plot (t,y,t,ramp);
title (Respuesta a una rampa);
xlabel (tiempo(seg));

La respuesta a la rampa puede verse en la Fig. 1.3.

Otro ejemplo caracterstico es la respuesta a un


ruido uniforme aleatorio. Recordamos que rand(m,n)
genera
una
matriz
mn
de
nmeros
aleatorios
uniformemente distribuidos entre 0 y 1. Es importante
darse cuenta del filtrado que se produce en la seal
cuando pasa por el sistema (hace de filtro paso
bajas).
noise = rand (size(t));
y = lsim (num,den,noise,t);
plot (t,y,t,noise);
title (Respuesta a un ruido aleatorio);
xlabel (tiempo(seg));

La respuesta al ruido puede verse en la Fig. 1.4.

2.2.

Dominio Frecuencial

Respuesta en frecuencia
La respuesta en frecuencia de los sistemas se puede obtener usando las funciones
bode,

52

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

nyquist y nichols. Si no se le ponen argumentos a la izquierda, estas funciones


generan las
grficas por si solas. En caso contrario, vuelcan los datos en los vectores de
salida oportunos.
A continuacin se presentan ejemplos de las tres posibles sintaxis de la funcin
bode:
1.- bode(num,den)
2.- [mag,phase,w] = bode (num,den)
3.- [mag,phase] = bode (num,den,w)
La primera de ellas produce un grafico con la magnitud en decibelios (dB) y la
fase en grados.
En las otras dos la magnitud se devuelve en el vector mag y esta expresada en
unidades absolutas, no en dB. Por su parte, la fase, devuelta en el vector phase,
sigue siendo en grados.
En esta forma, la representacin es mas interactiva, en el sentido de que
pinchando con el ratn en un punto de la curva, podemos ver los valores
correspondientes. La segunda forma automticamente genera los puntos de frecuencia
en el vector w. En la tercera forma es el usuario el que escoge los rangos de
frecuencia, y resulta muy adecuado cuando se quieren representar varias graficas
conjuntamente, que habrn de compartir una misma escala frecuencial.
El resultado de los dos ltimos comandos se puede representar usando funciones
conocidas:
subplot(211), loglog(w,mag), title(Magnitud), xlabel(rad/s);
subplot(212), semilogx(w,phase), title(Fase), xlabel(rad/s);
El resultado para la funcin de transferencia del ejemplo anterior puede verse en
la Fig. 1.5. Cabe comentar que el comando subplot(n,m,i) permite dividir una
ventana grafica en una matriz de n m sub-graficas, seleccionando como activa la
numero i (numeradas consecutivamente de izquierda a derecha y de arriba abajo).

El
comando
sintaxis:

nyquist

tiene

la

misma

nyquist (num,den,w);
[re,im] = nyquist (num,den,w);
Computa las partes real e imaginaria de
G(jw) y realiza la representacin si no se
le ponen parmetros de salida. Para
obtener la representacin grafica por
nosotros mismos, slo hay que dibujar la
parte real frente a la imaginaria. El
resultado obtenido mediante el ejemplo
anterior puede verse en la Fig. 1.6.
El comando nichols computa el diagrama de
Nichols de un sistema a partir de la
funcin de transferencia en bucle abierto.
Para verlo basta dibujar la magnitud del
bucle abierto en dB (en el eje de
ordenadas) frente a fase del bucle abierto en grados (en eje de abscisas), o

53

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

llamar a la funcin sin argumento de salida. Si se quiere en forma de baco, se


puede usar el comando ngrid.
nichols (num,den,w), ngrid;
[mag,phase] = nichols (num,den,w);

Mrgenes de estabilidad
Como es bien sabido en la teora clsica del control, los mrgenes de estabilidad
son el margen de fase y el margen de ganancia. Estos mrgenes se calculan usando
el comando margin.
margin (num,den);
[mg,mf,wmg,wmf] = margin (num,den);
Como tercer parmetro de entrada se le
puede pasar el rango de frecuencias
deseado. En el primer caso indicado, en
el que no se le especifican parmetros
de salida, se realiza la representacin
del diagrama de Bode, junto con una
indicacin, mediante lneas verticales
de los puntos donde se mide cada uno de
los mrgenes y los valores de los
mismos. En la segunda variante, como
salidas se obtienen los valores de los
mrgenes de ganancia (no en dB), el
margen de fase (en grados) y sus
correspondientes frecuencias. Si existen
varias frecuencias de corte marca los
mas desfavorables (ver Fig. 1.8).

54

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

Efectos de los retardos


Los retardos existen en numerosas aplicaciones de control automtico. En sistemas
lineales continuos invariantes en el tiempo, el retardo viene representado por
esT . La forma mas sencilla de manipular los retardos en matlab es en el dominio
de la frecuencia. Ntese que ejwT = 1|wT . Por tanto los retardos dejan la
magnitud invariable y afectan al desfase, tendiendo a inestabilizar al sistema
controlado. Para propsitos de representacin mediante el comando bode, todo lo
que habra que hacer es restar la fase del retardo a la de la funcin de
transferencia. Por ejemplo:
num = [0.2 0.3 1];
den = [1 0.9 1.2 0.5];
T = 1; % Tiempo de retardo puro
w = logspace (-2,1,100);
[mag,fase] = bode (num,den,w);
faseDelay = fase - (T*w*180/pi); % Sustrae la fase tras convertirla a grados
subplot(211); semilogx (w, 20*log10(mag)); grid;
subplot(212); semilogx (w, [fase, faseDelay]); grid;

2.3.

Comandos relacionados con operaciones de bloques

Existen una serie de


diagramas de bloques:

comandos

relacionados

con

las

operaciones

tpicas

en

[N12,D12] = series (N1,D1,N2,D2): Devuelve la resultante de colocar en serie dos


Funciones de transferencia (Fig. 1.9). El mismo resultado podra obtenerse
llamando dos veces al comando conv, que recurdese permita multiplicar dos
polinomios.

[N12,D12] = parallel (N1,D1,N2,D2): Devuelve la resultante de colocar en


paralelo dos funciones de transferencia (Fig. 1.10).

55

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

[Nbc,Dbc] = feedback (N1,D1,N2,D2,-1): A partir de un sistema en bucle


abierto, dado por el numerador y denominador N1,D1, proporciona el
correspondiente en bucle cerrado, considerando que en la cadena de
realimentacin hay otra funcin de transferencia, dada por N2, D2 (Fig.
1.11). El ultimo parmetro indica el signo de la realimentacin (1 para
realimentacin negativa y 1 para positiva).
[Nbc,Dbc] = cloop (N1,D1,-1): En el caso en que se pretenda obtener la
funcin de transferencia en bucle cerrado con realimentacin unitaria, puede
emplearse este comando mas compacto, en el que se evita tener que
especificar una segunda funcin de transferencia.
Conviene tener claro que
para todos estos comandos
relacionados
con
operaciones
por
bloques,
se
podra
perfectamente
estar
trabajando
con
funciones de transferencia
discretas,
sin
ninguna
diferencia.

Para operaciones de bloques ms


complejas, resulta ms adecuado
usar la herramienta simulink que
tambin se explicarla en estas
notas.
Lugar de las races
El anlisis mediante el lugar de las races se puede obtener definiendo un vector
de ganancias deseadas (que es el parmetro usado habitualmente para ver la
evolucin de los polos en bucle cerrado). L sintaxes ES:
r = rlocus (N,D,K);
rlocus (N,D);
En la primera forma, calcula el lugar de las races de 1+KN(s) /D(s) = 0, para un
vector de ganancias
especificado, K. rlocus devuelve una matriz r con length(K) filas y length(den)
columnas, conteniendo la localizacin de las races complejas. Cada fila de la
matriz corresponde a una ganancia del vector K. El lugar de las races puede ser
dibujado con plot(r,x).
En la segunda forma, que es la usada habitualmente, la
funcin directamente dibuja el lugar de las races.
Adems, como vemos, no es imprescindible indicar un
vector de ganancias. Para la funcin de transferencia
que venamos utilizando en los ejemplos, se obtendra
el lugar de las races mostrado en la Fig. 1.12 Un
comando muy til como complemento a rlocus es rlocfind,
cuya sintaxis general es:
[K,polos] = rlocfind (num,den) Antes de introducir
dicho comando es necesario haber dibujado el lugar de
las races. Al introducir rlocfind, se pide que se
seleccione con el ratn un punto determinado del lugar,

56

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

proporcionando como resultado la ganancia K en dicho punto y la localizacin de


los polos correspondientes a esa ganancia. Para mejorar la precisin, puede
realizarse un zoom en torno a una zona de internes en la
grafica, antes de ejecutar rlocfin. Otra utilidad para ver la sobre oscilacin que
correspondera a un par de polos complejos conjugados situados en el lugar, seria
dibujar los lugares geomtricos de factor de amortiguamiento () y frecuencia
natural (n) constantes, mediante el comando sgrid.
Ejemplo: Los siguientes comandos dibujan el lugar de las races de una funcin de
transferencia, realizando una conveniente ampliacin y resaltando las lneas de
factor de amortiguamiento 0.5, 0.6 , 0.7 y de frecuencia natural 0.5 rad/s (Fig.
1.13).
N = 1;
D = [1 3 2 0];
rlocus(N,D);
sgrid ([0.5:0.1:0.7],0.5);
axis([-2.5,1,-3,3]);
Las nuevas versiones de matlab van ms all y
ofrecen una herramienta interactiva para ir
viendo en vivo las variaciones que sufre el
lugar de las races, conforme se aaden,
eliminan y mueven los polos y ceros de bucle
abierto. A esta herramienta se accede mediante
el comando rltool. Merece la pena que el alumno
dedique unos minutos a esta herramienta de gran
valor didctico.

3.Estudio temporal y frecuencial de sistemas de primer y


segundo orden
3.1.

Sistemas de primer orden

La representacin en forma de funcin de transferencia viene dada por:

que en notacin matlab se introduce:


K =
tau
num
den

1;
= 1;
= K;
= [tau 1];

La respuesta a un escaln unitario de entrada


se obtiene con la funcin step. El resultado
puede verse en la Fig. 1.14
t = [0:0.1:10];
ye = step(num,den,t);
plot(t,ye);
title (Respuesta a un escaln unitario);
xlabel (tiempo(seg));
grid;

57

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

Las dos caractersticas fundamentales de un sistema de primer orden son su


ganancia esttica K y su constante de tiempo . La constante de tiempo es el
tiempo que tarda en alcanzar el 63% de la salida. La ganancia
esttica es el
cociente entre la amplitud de salida y la de entrada en el rgimen permanente.
Estos valores se pueden comprobar directamente en la grafica o analizando el
vector de datos resultante:

La respuesta a una rampa unitaria de entrada para nuestro sistema de primer orden
se puede simular mediante:

El resultado se muestra en la Fig.


1.15, en la que aparecen, tanto la
rampa de entrada como la salida. El
error de seguimiento en posicin en
rgimen permanente puede obtenerse,
al
igual
que
se
ha
hecho
anteriormente, midiendo directamente
en la grafica o bien a partir del
vector de datos resultante.

La respuesta impulsin al se puede


obtener del mismo modo, pero usando en
este caso la funcin impulse (Fig.
1.16), que tiene una sintaxis similar al
comando step.

58

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

Para finalizar con la seccin de sistemas de primer orden, se va a comprobar que


los resultados coinciden con los esperados en la teora. Como es bien sabido, los
sistemas lineales de primer orden de ganancia unidad invariantes en el tiempo
tienen las siguientes caractersticas (nos remitimos a la bibliografa):
Respuesta a escaln unitario: ye2(t) = 1 e(t/), (t 0)
Respuesta a rampa unitaria: yr2(t) = t + e(t/), (t 0)
Respuesta a impulso: yi2(t) = (1/)e(t/), (t 0)
Si se dibujan estas funciones con el vector de tiempos definido anteriormente, y
se superponen con las graficas vistas anteriormente, puede apreciarse que
coinciden perfectamente (Fig. 1.17).
ye2 = 1 - exp(-t/tau);
yr2 = t - tau + tau * exp(-t/tau);
yi2 = (1/tau) * exp(-t/tau);
plot (t,ye,t,ye2,o);
title(Respuesta terica a escaln unitario);
grid;
pause;
plot (t,yr,t,ramp,t,yr2,o);
title(Respuesta terica a rampa unitaria);
grid;
pause;
plot (t,yi,t,yi2,o);
title (Respuesta terica a impulso);
grid;

3.2. Sistemas de segundo orden


La representacin normal de un sistema de segundo orden en forma de funcin de
transferencia viene dada por:

donde:
K: ganancia esttica del sistema. Se va a suponer en el anlisis siguiente, sin
perdida de generalidad, que K = 1.
: Coeficiente de amortiguamiento.
wn: Frecuencia natural no amortiguada del sistema.
Del polinomio caracterstico se tiene que las dos races son s1,2 = wnwn2
1, pudiendo distinguirse los siguientes casos:

59

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

Caso 1: Si > 1 2 races reales distintas en SPI (sobr amortiguado).


Caso 2: Si = 1 2 races reales iguales en SPI (limite sobre-sub), sistema
crticamente amortiguado.
Caso 3: Si 0 < < 1 races complejas conjugadas en SPI (subamortiguado)
Caso 4: Si = 0 Respuesta oscilatoria. Sistema crticamente estable. Races en
eje imaginario.
Caso 5: Si < 0 Sistema inestable, races en SPD.
Se va a analizar el comportamiento para el conjunto de valores de en la
respuesta a un escaln unitario. Se supone wn = 1. Dado que el caso 3 se ver con
mas detalle, dado su mayor inters, se presentara en ultimo lugar.
Primer caso: 2 races reales distintas (Fig. 1.18).
t = [0:0.2:20];
wn = 1;
d = 2;
num = [wn^2];
den = [1,2*d*wn,wn^2];
ye = step (num,den,t);
plot (t,ye);
title (Respuesta a un escaln unitario);
xlabel (tiempo(seg));
grid;

Segundo caso: 2 races reales iguales (crticamente amortiguado)


(Fig. 1.19). El sistema, en este caso es lo mas rpido posible, antes de hacerse
subamortiguado.
d = 1;
den = [1,2*d*wn,wn^2];
ye = step (num,den,t);
plot (t,ye);
title (Respuesta a un escaln unitario);
xlabel (tiempo(seg));
grid;

60

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

Cuarto caso: Sistema en punto critico de oscilacin (Fig. 1.20).


d = 0;
den = [1,2*d*wn,wn^2];
ye = step (num,den,t);
plot (t,ye);
title (Respuesta a un escalon unitario);
xlabel (tiempo(seg));
grid;

Quinto caso: Sistema inestable (Fig. 1.21).


d = -0.1;
den = [1,2*d*wn,wn^2];
ye = step (num,den,t);
plot(t,ye);
title (Respuesta a un escalon unitario);
xlabel (tiempo(seg));
grid;

61

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

Tercer caso: Dos raises complejas conjugadas (Fig. 1.22).


d = 0.5;
den = [1,2*d*wn,wn^2];
ye = step (num,den,t);
plot (t,ye);
title (Respuesta a un escaln unitario);
xlabel (tiempo(seg));
grid;

Se puede tambin analizar para este tercer caso de dos races complejas el efecto
de modificar el factor de amortiguamiento. Se muestra para valores = {0.1, 0.2,
...0.9} (Fig. 1.23).
t = [0:0.2:20];
wn = 1;
vectDelta = [0.1:0.1:0.9];
num = wn^2;
Y = [];
for ind = 1:length(vectDelta)
d = vectDelta(ind);
den = [1,2*d*wn,wn^2];
y = step (num,den,t);
Y = [Y, y];

62

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

end
plot (t,Y);
title (Respuesta a un escaln unitario);
xlabel (tiempo(seg));
grid;
Se mantiene el valor de = 0.2 para el siguiente anlisis:

d = 0.2;
den = [1,2*d*wn,wn^2];
ye = step (num,den,t);
La salida del sistema viene dada por la ecuacin:

ev1 = 1 + ((exp(-d*wn*t)/(sqrt(1-d^2))));
ev2 = 1 - ((exp(-d*wn*t)/(sqrt(1-d^2))));
plot (t,ye,t,ev1,t,ev2);
title (Respuesta de sist. segundo orden)
xlabel (tiempo (s));
ylabel (salida);
grid;
Los parmetros caractersticos del transitorio vienen dados por:

63

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

Estos valores se pueden calcular analticamente y compararlos con los obtenidos


directamente de la grafica o analizando el vector de resultados.
% Valor de la salida en reg. perm:
yeRP = 1;
% Calculo SO teorica:
SOana = exp (-(d*pi)/(sqrt(1-d^2)));
% A partir de la respuesta obtenida:
SO = max(ye) - yeRP;
% Tiempo de pico teorico:
Tpana = pi/(Wn*sqrt(1-d^2));
% A partir de la respuesta. Aunque existen muchas formas de calcularlo,
% una trivial es la siguiente (la precisin viene determinada por la
% primera cifra decimal, debido al modo de definir el vector de tiempos):
for i = 1:length(ye)
if ye(i) == max(ye)
Tp = t(i);
break;
end
end
% Tiempo de subida teorico:
fi = atan (sqrt(1-d^2)/d);
Tsana = (pi-fi) / (wn*sqrt(1-d^2));
% A partir de la respuesta. Por definicin, el tiempo de subida es aquel
% para el cual la salida iguala por primera vez al valor en reg. perm.
for i = 1:length(t)
if (ye(i) <= yeRP & ye(i+1) >= yeRP)
Ts = t(i);
break;
end
end
disp Sobreoscilaciones; [SOana SO]
disp Tiempos de pico; [Tpana Tp]
disp Tiempos de subida; [Tsana Ts]

64

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

3.3. Anlisis del efecto de un cero en la respuesta


temporal de un sistema de segundo orden
Los ceros afectan al valor de la ganancia y a la forma de respuesta transitoria,
pero no a la estabilidad. Supongamos la funcin de transferencia siguiente:

Segn la posicin de los polos y los ceros se tendran comportamientos diferentes.


Si el valor absoluto del cero es mucho mayor que el valor absoluto de la parte
real de los polos, apenas vara la forma de la respuesta tpica (polos
dominantes). Ver Fig. 1.25.
t = [0:0.2:20];
K = 1;
wn = 1;
d = 0.5;
c = 10;
% Numeradores sin cero y con cero:
num = K * wn^2;
num2 = K * (wn^2/c) * [1 c];
den = [1 2*d*wn wn^2];
% Comparamos la salida con la correspondiente al mismo sistema sin cero:
y = step (num,den,t);
y2 = step (num2,den,t);
plot (t,y2,t,y,o);
title (Influencia de un cero lejos del eje imaginario);
polos = roots(den);
disp Magnitud de la parte real polos:;
abs(real(polos(1)))

Si el cero est entre dos races reales no varia la forma de la respuesta, pero
varia su rapidez (Fig. 1.26), pues se introduce accin derivativa.

65

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

t = [0:0.2:20];
K=1; wn=1; d=2; c=0.5;
num = K*wn^2;
num2 = K*(wn^2/c)*[1 c];
den = [1 2*d*wn wn^2];
y = step (num,den,t);
y2 = step (num2,den,t);
plot (t,y2,t,y,o);
title(Influencia del cero entre polos reales);
disp Magnitud de los polos:;
abs(roots(den))
Si el cero est mas cerca del eje imaginario que los polos reales, aumenta la
rapidez de la respuesta (Fig. 1.27), pudiendo la salida rebasar ampliamente su
valor de rgimen permanente. Como el efecto derivativo es muy grande, aunque el
sistema sin el cero no sobrepasara el valor de rgimen permanente, el efecto del
cero hace que si sobrepase dicho valor.
t = [0:0.2:20];
K=1; wn=1; d=2; c=0.05;
num = K*wn^2;
num2 = K*(wn^2/c)*[1 c];
den = [1 2*d*wn wn^2];
y = step (num,den,t);

y2 = step (num2,den,t);
plot (t,y2,t,y,o);
title(Influencia del cero cercano al eje imag.);
disp Magnitud de los polos:;
abs(roots(den))

66

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

Si el cero pasa al semiplano derecho (sistema de fase no mnima) modifica


sensiblemente la oscilacin (tpico por ejemplo en arranque de turbinas). Ver Fig.
1.28. En este caso, la accin derivativa inicial va en sentido contrario a la
salida del sistema, por lo que si dicha accin derivativa es grande (cero cercano
al eje imaginario), la salida ira inicialmente en sentido contrario a la de
rgimen permanente.
t = [0:0.2:20];
K=1; wn=1; d=2; c=-0.5;
num = K*wn^2;
num2 = K*(wn^2/c)*[1 c];
den = [1 2*d*wn wn^2];
y = step (num,den,t);
y2 = step (num2,den,t);
plot (t,y2,t,y,o);
title(Influencia de un cero positivo);

3.4.

Influencia de polos adicionales.

Polos dominantes
Al rgimen transitorio afectan fundamentalmente los polos y ceros cercanos al eje
imaginario. El efecto de un cero adicional se ha visto anteriormente. Analizamos
ahora el de un polo adicional. Supongamos la funcin de transferencia siguiente:

67

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

Se va a tomar para el estudio el caso de comportamiento subamortiguado analizado


en las secciones anteriores. En dicho caso, la funcin de transferencia
correspondiente tenia los polos con su parte real en 0.5. Si la distancia entre
esos polos y el resto es del orden de 5wn (con cercano a 1) todos los polos y
ceros a partir de esa distancia no afectan al transitorio. De hecho, en el
anlisis de sistemas, normalmente cuando un sistema tiene un nmero grande de
polos, se trata de simplificar para obtener un sistema aproximado de segundo orden
con sus polos localizados en los polos dominantes citados. La influencia de un
polo lejano y uno cercano puede verse en las Fig. 1.29 y 1.30. En ambas figuras se
muestra la salida del sistema con y sin el polo p adicional comparadas ante una
entrada en escaln.
t = [0:0.2:20];
K=1; wn=1; d=0.5; p=10;
num = K*wn^2;
num2 = wn^2*K*p;
den = [1 2*d*wn wn^2];
den2 = conv (den,[1 p]);
y = step (num,den,t);
y2 = step (num2,den2,t);
plot (t,y2,t,y,o);
title (Influencia de un polo lejano);
disp Situacion de los polos:;
roots(den2)
Como se observa en la Fig. 1.29 la influencia es muy pequea o casi inexistente en
este caso.

Si se analiza el caso de un polo cercano al eje imaginario:


t = [0:0.2:20];
K=1; wn=1; d=0.5; p=0.2;
num = K*wn^2;
num2 = wn^2*K*p;
den = [1 2*d*wn wn^2];
den2 = conv (den,[1 p]);
y = step (num,den,t);
y2 = step (num2,den2,t);
plot (t,y2,t,y,o);
title (Influencia de un polo lejano);
disp Situacion de los polos:;
roots(den2)

68

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

4. Tratamiento
mediante
Sistemas discretos

funciones

de

transferencia.

Se incluyen en esta seccin algunas aclaraciones sobre comandos para tiempo


discreto, cuya sintaxis suele ser similar, en su caso, a su equivalente continuo,
aadiendo una d delante. Se van a exponer slo unas pocas, dejando al lector el
anlisis por su cuenta del resto.
[Nz,Dz] = c2dm (N,D,Ts,metodo): Discretizacin de un modelo en tiempo
continuo, cuya funcin de transferencia viene dada por los polinomios numerador y
denominador. Como tercer parmetro se especifica el periodo de muestreo. El ultimo
parmetro proporciona una cadena de caracteres que indica el mtodo con el que se
va a hacer la discretizacin, las posibilidades son:

zoh: Discretizacin utilizando mantenedor de orden cero (ZOH).


opcin
por defecto.
foh: Discretizacion utilizando mantenedor de orden uno (FOH).
tustin: Discretizacin mediante aproximacin trapezoidal.
prewarp: Discretizacin trapezoidal con prewarping.
matched: Discretizacin mediante emparejamiento de polos y ceros

Es

la

Se echa de menos en esta funcin la posibilidad de usar otros mtodos de


discretizacin como son el rectangular hacia delante o hacia atrs. Tambin da
numerosos problemas cuando se intenta discretizar una funcin no propia (como
pueda ser la funcin de transferencia de un controlador PID). No es el nico
comando de matlab que tiene esta limitacin.
funcin contraria a la anterior.
Transforma un sistema discreto en uno continuo, mediante alguno de los mtodos
citados.
secuencia
escaln.
Esta
funcin
dibuja
directamente
la
respuesta.
Esta
representacin no tendra en el eje horizontal valores temporales absolutos, sino
que apareceran mltiplos del periodo de muestreo. Por otro lado, si indicamos un
parmetro de salida en la llamada al comando, y = dstep (Nz,Dz);, no se realiza la

69

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

representacin, deberemos hacerlo nosotros mismos. En este caso, seria conveniente


pintar la curva con puntos, en lugar de con un trazo continuo (como por defecto
hace el comando plot). Vemoslo con el siguiente ejemplo, que dar como resultado
la figura que aparece a la izquierda en Fig. 1.31:
N = [0.2 0.3 1];
D = [1 0.9 1.2 0.5];
[Nz,Dz] = c2dm (N,D,1,zoh);
y = dstep (Nz,Dz);
plot (y,.);
title (Respuesta escal{\o}n de un sistema discreto);
xlabel (Periodo de muestreo);
ylabel (Salida);
grid;

stairs(y): Para obtener una respuesta como la de que aparece a la derecha en Fig.
1.31, con la forma escalonada tpica de sistemas digitales, simulando que la
salida se mantiene constante entre dos periodos de muestreo, bastara con
reemplazar la instruccin plot(y,.) del ejemplo anterior por stairs(y).

tiempo discreto. Siendo w un vector con las frecuencias donde queremos que se
evalen magnitud y fase de la funcin de transferencia.

embargo, se usa una rejilla distinta para que la representacin tenga en cuenta el
crculo de radio unidad. Por ejemplo, para el sistema discretizado anterior, si
hacemos:
rlocus (Nz,Dz);
zgrid;

70

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

Podremos obtener analizar el lugar de las races en relacin con los lugares
geomtricos de constante y wn Ts constante, en el plano z (Fig. 1.32).

5.Tratamiento
estados

mediante

Se va a utilizar para
apareci anteriormente:

el

descripcin

anlisis

la

misma

en

funcin

el

espacio

de transferencia

de

que

ya

El sistema se puede representar en el espacio de estados

Existen comandos que permiten obtener una descripcin de un sistema en espacio de


estados (ss) a partir de una funcin de transferencia, venga esta dada mediante
polinomios numerador-denominador
(tf) o mediante polos-ceros (zp), y viceversa:
[A,B,C,D]
[A,B,C,D]
[num,den]
[z,p,k] =

= tf2ss(num,den) Paso de funcin de transferencia a espacio de estados


= zp2ss(z,p,k) Paso de descripcin polo-cero a espacio de estados
= ss2tf(A,B,C,D) Paso de espacio de estados a funcin de transferencia
ss2zp(A,B,C,D) Paso de espacio de estados a descripcin polo-cero

Supongamos que disponemos de nuestra funcin de transferencia dada mediante:


num = [.2 .3 1];
den = conv([1 .4 1],[1 .5]);
con el comando tf2ss, podemos obtener
descripcin en espacio de estados:
[A,B,C,D] = tf2ss (num,den).

71

las

matrices

correspondientes

su

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

La mayora de las funciones que se han comentado en secciones anteriores para la


manipulacin y simulacin de sistemas lineales dados por un par numeradordenominador, tienen su correspondencia para espacio de estados. Valgan los
ejemplos siguientes:
step (A,B,C,D,1,t);
impulse (A,B,C,D,1,t);
[Abc,Bbc,Cbc,Dbc] = cloop (A,B,C,D,-1);
[A12,B12,C12,D12] = series (A1,B1,C1,D1,A2,B2,C2,D2);
[Ad,Bd] = c2dm (A,B,Ts,metodo)};
Como es bien sabido, una propiedad fundamental de los sistemas es el concepto de
estabilidad. Si se considera la ecuacin no forzada x = Ax, x(0) = x0, se dice que
el sistema es asintticamente estable si el estado alcanza el valor cero
asintticamente con el tiempo, es decir, x(t) 0 con t . Se puede demostrar
que esto ocurre cuando los autovalores de la matriz A tienen partes reales
negativas. Por tanto, se puede analizar la estabilidad encontrando los autovalores
de la matriz A, usando el comando:
evalues = eig (A)

6.Manipulacin mediante objetos


En las nuevas versiones del paquete de control (en consonancia con la nueva
filosofa de matlab), se ofrece la posibilidad de manipular los sistemas mediante
unas estructuras de datos especficas para modelos de sistemas lineales. Estos
objetos harn mas fcil la manipulacin de los sistemas, pudiendo ser tratados
de forma mas abstracta, independientemente de que vinieran descritos mediante
funciones de transferencia, conjuntos de polos y ceros o matrices correspondientes
a una descripcin en espacio de estados.
Para empezar, veamos justamente las tres formas de crear un objeto de tipo
sistema, en funcin de como proporcionemos la descripcin de dicho sistema:
sys = tf(num,den)
sys = zpk(ceros,polos,k)
sys = ss(A,B,C,D)
En cualquiera de los casos, se puede aadir un parmetro adicional que seria
indicativo de un periodo de muestreo, y por tanto, el sistema seria discreto.
Para cada una de las tres posibilidades el objeto que se crea tiene una estructura
diferente, puesto que tiene que almacenar datos de distinto tipo.
Supongamos que creamos dos sistemas mediante sendas funciones de transferencia:
sys1 = tf (1,[1 3 1]);
sys2 = tf ([1,2],1);
sys1
Transfer function:
1
------------s^2 + 3 s + 1

72

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

Como vemos, al pedirle el valor de sys1 nos lo da de una forma monoltica, que
har muy cmoda su manipulacin. Por ejemplo, podramos sumar o poner en serie
ambos sistemas sin mas que:
sys1+sys2
Transfer function:
s^3 + 5 s^2 + 7 s + 3
--------------------s^2 + 3 s + 1
sys12 = sys1*sys2
Transfer function:
s + 2
------------s^2 + 3 s + 1
Por otra parte, las propiedades que estn asociadas a estos objetos pueden verse
mediante:
get(sys1)
num: {[0 0 1]}
den: {[1 3 1]}
Variable: s
Ts: 0
InputDelay: 0
OutputDelay: 0
ioDelayMatrix: 0
InputName: {}
OutputName: {}
InputGroup: {0x2 cell}
OutputGroup: {0x2 cell}
Notes: {}
UserData: []
Nos informa del numerador y denominador de la funcin de transferencia en s. Al
ser continua, su periodo de muestreo es Ts = 0. Se pueden asociar retardos a las
entradas o salidas, asociar nombres a entradas o salidas, etc. Si en un momento
dado, quisiramos cambiar alguna propiedad podramos hacerlo mediante el operador
.:
sys1.Ts = 1;
sys1.num{1} = [0 0 2];
sys1
Transfer function:
2
------------z^2 + 3 z + 1
El nuevo sistema es discreto, con periodo de muestreo Ts = 1 y con un polinomio
ganancia 2 en el numerador (no confundir esta manipulacin con una discretizacin,
en este caso el sistema continuo original y el discreto no tienen porqu guardar
ninguna relacin).

73

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

Estos objetos tambin estn pensados para poder manipular cmodamente sistemas de
mltiples entradas y mltiples salidas. De hecho, podramos haber creado un
sistema de la siguiente forma:
num1 = 0.5; num2 = [1 1];
den1 = [1 2 1]; den2 = [1 0];
sys = tf ({num1,num2},{den1,den2})
Transfer function from input 1 to output:
0.5
------------s^2 + 2 s + 1
Transfer function from input 2 to output:
s + 1
----s
% O lo que hubiera sido igual:
sys1 = tf (num1,den1);
sys2 = tf (num2,den2);
sys = [sys1, sys2];

7.Resumen de los
System Toolbox

comandos

mas

importantes

del

Control

Normalmente, en la nomenclatura usada en este paquete de control, los comandos


referentes a tiempo discreto que posean un equivalente para tiempo continuo, se
denominan igual que estos, pero precedidos de una d. Por ejemplo: step y dstep.

74

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

75

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

Capitulo III: Simulink


Introduccin al Simulink
Simulink es una herramienta para la simulacin de sistemas dinmicos. Esto es
decir que resuelve ecuaciones diferenciales ordinarias usando mtodos numricos
(Euler, Runge Kuta, etc.).
Los sistemas dinmicos (representados por ecuaciones diferenciales) se deben
introducir a este programa por medio de su descripcin en diagramas de bloques. La
descripcin por diagrama en bloques usa lneas para representar variables y
bloques para representar funciones. Las lneas son usadas para interconectar los
bloques entre s.

Librera de bloques.
Para la elaboracin del diagrama de bloques, se dispone de una
bloques. sta librera se invocar ejecutando el siguiente comando:

librera

de

simulink
En la siguiente figura se puede ver la ventana que se abre en consecuencia.

Crear un nuevo modelo


Una vez abierta la librera de bloques, se debe crear un nuevo modelo en blanco.
Para ello se puede usar la barra de herramientas o el men, como se muestra en la
siguiente figura.

76

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

El modelo en blanco se ver como se muestra a continuacin.

Sobre este modelo en blanco se debern colocar los bloques que se


interconectarn por medio de lneas. Los bloques son funciones tanto algebraicas
como dinmicas. Las lneas son variables (locales) que sern usadas para
interrelacionar las funciones. Las lneas pueden ser reales, complejas escalares
y/o vectoriales.
Bloques Funciones.
Lneas Variables.

Agregar un bloque al rea de trabajo


Estando abiertas y visibles la librera de bloques y el modelo, se pueden agregar
bloques al modelo, seleccionndola de la librera y arrastrndola al modelo.

Ms adelante se har una breve descripcin de los bloques ms comunes para el uso
en esta materia.

77

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

Unir bloques con una lnea.


Se debe notar que los bloques tienen entradas de seal o salidas de seal o ambas,
y se refieren respectivamente al argumento y resultado de la funcin. En
consecuencia para armar un sistema se debern conectar salidas con entradas usando
lneas. Para unir bloques, se deber presionar el botn izquierdo del ratn sobre
la salida de un bloque, y manteniendo el botn presionado, arrastrarlo hasta la
entrada de otro bloque, como se muestra en las siguientes figuras.

Obsrvese que el puntero se transforma en una cruz cuando


puede iniciar una lnea (una entrada, una salida u otra
lnea) y en una doble cruz cuando puede finalizar una
lnea sin que sta quede abierta.
Se puede trazar una lnea desde una salida a una entrada,
de una entrada a una salida, de una lnea (sacando una
derivacin) a una entrada, o de una entrada a una lnea.
Al igual que las variables en un sistema de ecuaciones,
las lneas pueden ir a varios destinos, pero tendrn un
solo origen.

Sacar una derivacin


Para sacar una derivacin de una lnea existente se debe
colocar el puntero sobre el mismo (el puntero se
transformar en una cruz) y presionando el botn derecho
del ratn, y mantenindolo presionado, arrastrarlo hasta
el destino final o intermedio. No es necesario finalizar
la lnea inmediatamente. Se puede trazar un segmento,
soltar el botn del ratn, y continuar ms adelante (una
vez iniciada la derivacin, el siguiente segmento se deber continuar usando el
botn izquierdo).
Otra alternativa para iniciar una derivacin es usando el botn izquierdo del
ratn mientras se mantiene presionada la tecla Control del teclado.

Bloques ms comunes (de inters para la


materia Control) de la librera de
Simulink.
Se describir brevemente la lista de los bloques ms
comunes y de inters para la materia Control. Una vez
que el bloque ha sido agregado al modelo, se puede
acceder a sus parmetros haciendo doble clic sobre el
mismo. El dialogo que se abre para ingresar los
parmetros incluye, adems de los campos para cargar
stos, una breve descripcin y asistencia para el uso,
un botn Ok para aceptar y cerrar, Cancel para
rechazar los cambios y cerrar, Help para acceder a la
ayuda (Muy til! por favor usarlo para aprender ms
sobre el bloque!) y Apply para aceptar los cambio sin
cerrar el dialogo.

78

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

79

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

Ejemplo elemental
Supngase que desee ver una curva senoidal y su integral en el tiempo. Esto
responde a la siguiente ecuacin diferencial:
que puede ser escrita en forma integral:

Para ello arme el siguiente diagrama en un modelo en blanco.

Se debe considerar que la variable tiempo (t) que aparece en la ltima ecuacin es
una variable implcita del Simulink, por lo que no est relacionado con ninguna
lnea, pero es considerado en el bloque "Integrator". Una vez armado el sistema,
se debern ajustar los parmetros de simulacin como se muestra en la siguiente
seccin.

Parmetros de simulacin
Una vez creado un modelo se deben ajustar los parmetros de simulacin, que se
pueden acceder desde el men "Simulation"->"Simulation parameters...", como se
muestra a continuacin:

80

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

Por medio de este dilogo se pueden ajustar, entre otros, los siguientes
parmetros:

Iniciar y detener una simulacin.


Para iniciar la simulacin se debe seleccionar el men "Simulation"-> "Start" como
se muestra a continuacin:

Alternativamente se puede iniciar la simulacin con el botn


herramientas.

de la barra de

En la barra de estados del modelo se muestra el estado de la simulacin y en


consecuencia si finaliz la misma. Una vez finalizada la simulacin se puede abrir
el bloque "Scope" del modelo y ver el resultado de la simulacin.

81

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

Capitulo IV: Complementarios


PID. Descripcin y reglas heursticas de Sintonizacin
1. Introduccin
El objetivo de esta prctica es que el alumno se familiarice y profundice en el
conocimiento de la estructura de control PID, profusamente usada en el mundo
industrial.
Para ello se empleara el software de simulacin de sistemas dinmicos SIMULINK
asociado al paquete de computacin tcnica MATLAB .
La descripcin de la prctica y los puntos a tratar en la misma se recogen en los
siguientes apartados.
2. El sistema a controlar
Para comenzar abordaremos el problema del control de un sistema simple de primer
orden con retardo, definido por la funcin de transferencia.

donde k representa la ganancia esttica del sistema, t es su constante de tiempo y


L es el retardo del mismo.
Este tipo de sistemas, a pesar de su sencillez, modelan bastante bien una amplia
clase de sistemas dinmicos que involucran generalmente fenmenos de transporte de
materia como sucede en muchos procesos qumicos, trmicos y muchos otros muy
comunes en la industria de procesos.
Comenzaremos viendo la respuesta de este sistema a lazo abierto ante una entrada
en escaln, y para ello construiremos el siguiente sistema en SIMULINK

para un sistema con los siguiente parmetros: 2 = k , s 5 . 0 = t y L=0.8 s.


En la simulacin observaremos la respuesta esperada, es decir la respuesta de un
sistema de primer orden con un retardo de 0.8 segundos respecto a la entrada en
escaln marcada.
3. Controlador PID
El controlador PID es una estructura de control en la que la seal de control del
proceso se
expresa en funcin del error, e(t)=yref (t) - y(t), segn la expresin estandar:

donde p K , i K y d K corresponden respectivamente a las constantes Proporcional,


Integral y Derivativa del controlador.
La expresin anterior puede igualmente expresarse como la siguiente funcin de
transferencia del controlador PID

82

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

Esta funcin
distintos:

de

transferencia

puede

implementarse

en

SIMULINK

de

dos

modos

1) Empleando el bloque PID que proporciona el software para este controlador que
puede encontrarse en Simulink Extras -> Additional Linear Pulsando dos veces sobre
este bloque obtenemos la ventana de dilogo donde podemos introducir los
parmetros del controlador arriba indicados

2) Tambin es posible construir la estructura


elementales de SIMULINK del siguiente modo

del

PID

partiendo

de

bloques

Esta segunda estructura ser la que emplearemos en lo sucesivo en la prctica.


4. Control a lazo cerrado.
Para comprobar la influencia del controlador PID en el
construiremos la siguiente estructura de control realimentada

83

sistema

propuesto

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

Esta estructura representa un control PID clsico que incluye el controlador en la


cadena directa del sistema.
5. Ajuste del PID. Reglas del Ziegler-Nichols.
Para un ajuste inicial del controlador anterior, emplearemos las conocidas reglas
de Ziegler- Nichols.
a) Primer mtodo de Ziegler-Nichols
Las caractersticas del sistema estudiado permiten emplear el mtodo de respuesta
a escaln de Ziegler-Nichols que caracteriza un sistema mediante dos parmetros, L
y T, obtenidos a partir de la respuesta a lazo abierto del mismo como representa
la figura 1.
Segn este procedimiento de sintonizacin los parmetros del controlador pueden
obtenerse de acuerdo con las expresiones de la siguiente tabla.

De este modo a partir de la respuesta a lazo abierto del sistema, calcularemos los
controladores P, PI y PID apropiados para nuestro sistema. Para cada uno de los
tres controladores anteriores se pide:
1) Calcular las respuesta en el dominio temporal y caracterizar la respuesta segn
la ganancia esttica a lazo cerrado (K0), sobreoscilacin (SO), tiempo de subida,
(ts), tiempo de establecimiento (te) y ratio de decaimiento (rd).

84

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

2) Modificar los parmetros de cada controlador para un ajuste fino de la


respuesta anotando la influencia del aumento o disminucin de cada parmetro en la
respuesta temporal.
b) Segundo mtodo de Ziegler-Nichols
El segundo mtodo de Ziegler-Nichols, o mtodo de respuesta en frecuencia es un
mtodo alternativo de sintonizacin de PIDs que puede describirse como sigue:
En primer lugar es necesario ajustar las ganancias integral y derivativa a cero,
esto es
0 = i K y 0 = d K .
A continuacin, partiendo de un valor bajo de la ganancia proporcional, p K ,
vamos aumentando sta gradualmente hasta conseguir un comportamiento oscilatorio
mantenido en la respuesta del sistema tal como muestra la grfica. A esta ganancia
la llamaremos U K .
El otro parmetro que nos hace falta es el periodo de oscilacin del sistema para
esta ganancia, que llamaremos U T , y que se calcula como muestra la grfica.
Con los valores de U K y U T entramos en la tabla 2 de Ziegler-Nichols y
calculamos los parmetros correspondientes.

Para cada uno de los tres controladores, P, Pi y PID, se pide:


1) Calcular las respuesta en el dominio temporal y caracterizar la respuesta segn
la ganancia esttica a lazo cerrado (K0), sobreoscilacin (SO), tiempo de subida,
(ts), tiempo de establecimiento (te) y ratio de decaimiento (rd).

85

Universidad del Zulia


ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

Comentarios finales:
Ante la gran cantidad de material necesario para cubrir en el rea en cuestin y
la gran cantidad de informacin disponible en este manual se pretendi tomar los
aspectos bsicos necesarios para introducir a los participantes del curso a lo que
es este extenso mudo, pero es de hacer notar que como dijo ISAAC NEWTON: Lo que
conocemos es una gota, y lo que ignoramos es el ocano, y por lo tanto,
no
importa cuan largo sea este material y el curso donde se dicta, el aprendizaje, y
las aplicaciones de este sofguard son se podra decir infinitas.
En virtud de lo anterior no queda mas que invitarles a adentrarse cada dia mas en
este mundo, adentrarse segn sus necesidades, sus problemas diarios y tener en
cuenta que el aprendizaje debe ser continuo y constante y sobre todo tener en
cuenta que La practica hace al maestro
Cualquier sugerencia y /o correccin a este material ser bien recibido ya que la
intencin es de mejorar continuamente para que todos aquellos que en un futuro
transiten por estos caminos encuentren mejores opciones y oportunidades que
aquellos que pasamos primero
MF.

86