You are on page 1of 173

Captulo 6: Programacin de MATLAB pgina 63

Captulo I
INTRODUCCION AL USO DEL MATLAB
MATLAB fue originalmente desarrollado en lenguaje FORTRAN para ser usado en
computadoras mainframe. Fue el resultado de los proyectos Linpack y Eispack desarrollados
en el Argonne National Laboratory. Su nombre proviene de MATrix LABoratory. Al pasar de
los aos fue complementado y reimplementado en lenguaje C. Actualmente la licencia de
MATLAB es propiedad de MathWorks nc .
La empresa MathWorks ofrece MatLab como su principal producto para computacin
numrica, anlisis y visualizacin de datos. Tambin ofrece Simulink como un anexo a
MatLab y que interactua con l en lenguaje de MatLab y lenguaje de bajo nivel C. Simulink
es usado para simulacin modelado no lineal avanzado. Se ofrecen adems numerosas
herramientas especiales en "Toolboxes" para resolver problemas de aplicaciones
especficas, por ejemplo control, procesamiento de seales, redes neuronales, etc. Estas
herramientas son colecciones de rutinas escritas en MatLab.
1.1 Librera de Aplicacione de MATLAB
MATLAB tiene una gran coleccin de funciones para el procesamiento de seal en el Signal
Processing Toolbox. Este incluye funciones para:
Anlisis de filtros digitales incluyendo respuesta en frecuencia, retardo de grupo,
retardo de fase.
mplementacin de filtros, tanto directo como usando tcnicas en el dominio de la
frecuencia basadas en la FFT.
Diseo de filtros R, incluyendo Butterworth, Chebyschev tipo , Chebyshebv tipo y
elptico.
Diseo de filtros FR mediante el algortmo ptimo de Parks-McClellan.
Procesamiento de la transformada rpida de Fourier FFT, incluyendo la
transformacin para potencias de dos y su inversa, y transformada para no potencias
de dos.
Captulo 6: Programacin de MATLAB pgina 63
La MATLAB C Math Library proporciona al usuario la capacidad computacional de MATLAB
en una libreria en formato objeto enlazable. El objetivo principal de la C Math Library es
soportar el desarrollo de aplicaciones 'stand alone' utilizando MATLAB y su compilador.
Puede ser utilizada independientemente de MATLAB por programadores avezados en
lenguaje C que necesiten prestaciones computacionales robustas y de alto rendimiento.
Junto con el compilador de MATLAB, la C Math Library permitir a los programadores de
aplicaciones utilizar MATLAB para la creacin de aplicaciones 'stand alone'. Para los
usuarios clsicos de MATLAB, se elimina as cualquier necesidad de volver a reescribir
algoritmos en lenguaje C para ser utilizada por programas externos. Para aquellos usuarios
que sean nuevos en la tecnologa MATLAB, esta tecnologa ofrece una nueva va para la
reduccin del tiempo de desarrollo y puesta a punto de aplicaciones.
La MATLAB C Math Library proporciona una amplia gama de funciones clsicas del
programa MATLAB, proporcionadas como libreras objeto, incluyendo bsicamente las
siguientes categoras de funciones presentes en MATLAB y ficheros M compilados:
Algebra lineal.
Funciones matemticas elementales y especializadas.
Operadores lgicos y aritmticos.
Matrices elementales y manipulacin
Matrices especiales.
Estadstica bsica y anlisis de datos.
Polinomios e interpolacin.
Gestin de cadenas de caracteres.
Entradas y Salidas.
Gestin de memoria y errores.
1.! Iniciando MATLAB
Despus de ejecutar el programa MatLab desde el sistema operativo empleado, aparece el
indicador de comandos el cual est listo para recibir instrucciones en lenguaje MatLab. Este
indicador es de la siguiente forma:
>>
Captulo 6: Programacin de MATLAB pgina 63
Al iniciar el uso de MatLab estn disponibles dos comandos de ayuda y demostracin. Para
ejecutarlos se escribe el comando en la lnea de comandos despus del smbolo >> y se
presiona la tecla Enter. Por ejemplo:
>>help
Permite obtener una ayuda sobre los diferentes comandos de MatLab.
>>demo
Hace una demostracin de las diferentes aplicaciones de MatLab. Para cerrar o finalizar el
uso de MatLab se usa el comando quit .
>>quit
1." Uo de co#ando
La primera forma de interactuar con MatLab es a travs de la lnea de comandos. Puede
ejecutarse un comando si este est escrito despus del smbolo >> y se presiona la tecla
Enter.
MATLAB trabaja esencialmente con matrices numricas rectangulares. La manera ms fcil
de entrar matrices pequeas es enumerando los elementos de sta de tal manera que:
Los elementos estn separados por blancos comas.
Los elementos estn cerrados entre corchetes, [ ].
Muestre el final de cada fila con; (punto y coma).
Ejemplo:
A = [ 1 2 3; 4 5 6; 7 8 9 ]
resultara en la matriz
A =
1 2 3
4 5 6
7 8 9
MATLAB guarda esta matriz para utilizarla luego bajo el nombre de A. Si la matriz a
introducir es muy grande se puede utilizar el siguiente formato:
A = [1 2 3
4 5 6
7 8 9]
Captulo 6: Programacin de MATLAB pgina 63
El comando load y la funcin fread pueden leer matrices generadas en sesiones anteriores
generadas por otros programas.
Ya que MatLab se basa en el lgebra de matrices como ejemplo crearemos una matriz.
Estas pueden estar formadas por un slo elementos (escalar), por una fila o una columna
(vector) o por una serie de filas y columnas (matriz propiamente dicha).
>>A=1
define A como un escalar de valor 1. Al definir A automticamente MatLab presenta en
pantalla su valor.
A =
1
Para no presentar el valor de la variable creada, debe agregarse punto y coma (;) al final del
comando.
Despus de crear una variable, puede presentarse su valor en pantalla escribiendo la
variable despus del prompt (>>).
>>A
Se pueden redefinir variables, por ejemplo:
>>A=[1 2 3]
define A como un vector de tres elementos, A(1)=1, A(2)=2 y A(3)=3. Estos elementos
deben separase con espacios en blanco o comas (,).
Para definir una matriz se deben separar las filas con punto y coma (;) o con retorno (Enter).
>>A=[1 2 3; 4 5 6]
o
>>A=[1 2 3
4 5 6]
ambos comandos producen el mismo efecto:
A =
1 2 3
4 5 6
Si al final de la introduccin de un comando cualquiera no se pone punto y coma (;),
aparecer explcitamente en pantalla el resultado de dicho comando. En caso contrario, el
comando se ejecutar pero no se mostrar su resultado. Dicho resultado se habr
Captulo 6: Programacin de MATLAB pgina 63
almacenado en la variable a la que se asigna o, si no se realiza asignacin, se guardar en
una variable de entorno llamada ans. En caso de que se asigne a una variable, esta se
crear automticamente, sin necesidad de una declaracin previa.
Las variables a las que se asignan resultados, as como las variables de entorno, se
almacenan en lo que se denomina el espacio de trabajo de matlab (workspace).
Los elementos de una matriz pueden ser cualquier expresin de MATLAB.
Ejemplo:
x = [-1.3,sqrt(3),(1+2+3) *4/5]
resultara en
x =
-1.3000 1.7321 4.8000
Nos podemos referir a elementos individuales de la matriz con ndices entre parntesis.
Ejemplo: En el ejemplo anterior
x(4) = abs(x(1))
resultara
x =
-1.3000 1.7321 4.8000 0 1.3000
Para aadir otra fila a la matriz A de arriba podemos hacer lo siguiente:
r = [10 11 12];
A = [A; r]
y resultara
A =
1 2 3
4 5 6
7 8 9
10 11 12
Los ejemplos que hemos dado se han guardado en variables que estn en el espacio de
trabajo de MATLAB. Para listar las variables en el espacio de trabajo se utiliza el comando
who. Para ver informacin adicional acerca de estas variables se utiliza el comando whos.
Las variables permanentes son aquellas con significado especial, y que no se pueden
eliminar. Estas son por ejemplo las variables ans y eps. La variable eps es una tolerancia
Captulo 6: Programacin de MATLAB pgina 63
para determinar. Por ejemplo la singularidad y el rango. Su valor inicial es la distancia de 1.0
al prximo nmero de punto flotante mayor.
Otra serie de variables predefinidas en matlab, son las siguientes:
pi:
i, j: 1 . Constante imaginaria
inf: . Se trata de un valor excesivamente grande para ser almacenado.
NaN: Not a number. Es el resultado que se proporciona si durante una operacin se
produce una indeterminacin, del tipo
etc , ,
0
0
, , 0

clock: Reloj.
Date: Fecha
flops: Nmero de operaciones en punto flotante realizadas hasta el momento.
El comando who muestra las variables existentes en el espacio de trabajo generadas por el
usuario, pero no las variables especiales.
Para borrar alguna variable de memoria se utiliza clear nombre-variables separadas por
espacios. Pueden borrarse todas las variables a la vez si no se especifica ningn nombre a
continuacin del nombre del comando.
Adems de variables numricas, escalares o matriciales, en matlab pueden usarse cadenas
de caracteres. Para ello se delimita una secuencia de caracteres mediante apostrofes:
cadena = 'ejemplo de cadena de caracteres'
Para hacer referencia a cualquiera de los caracteres que componen una cadena, podemos
hacerlo como si de un vector se tratara.
Para salir de MATLAB se escribe quit exit. Al terminar una sesin de MATLAB, las
variables en el espacio de trabajo se borran. Si deseas guardar tu espacio de trabajo
escribes save, guarda todas las variables en un archivo llamado matlab.mat. Se puede
utilizar save y load con otros nombres de archivos, para guardar solo variables
seleccionadas
Ejemplo:
save temp X Y Z
Captulo 6: Programacin de MATLAB pgina 63
Este ejemplo guarda las variables X, Y, Z en el archivo temp.mat. Usando el comando load
temp las obtienes nuevamente del archivo temp.mat. load y save tambin pueden importar y
exportar informacin de archivos ASC.
1.$ Operacione con %ectore & #atrice
Se puede generar un vector utilizando dos puntos. Los dos puntos, :, son importantes en
MATLAB. Por ejemplo
x = 1:5
genera un vector fila que contiene los nmeros enteros del 1 al 5:
x =
1 2 3 4 5
No necesariamente se tiene que incrementar por nmeros enteros, pueden ser decimales,
nmeros negativos constantes.
Podemos referirnos a elementos individuales de matrices encerrando sus ndices en
parntesis.
Ejemplo:
A =
1 2 3
4 5 6
7 8 9
A(3, 3) = A(1, 3) + A(3, 1)
resultara
A =
1 2 3
4 5 6
7 8 10
Un ndice puede ser un vector. Si x y v son vectores, entonces x(v) es [x(v(1)), x(v(2)),
...,x(v(n))]. Para matrices, los ndices de vectores permiten acceso a submatrices contiguas y
no contiguas.
Por ejemplo, suponga que A es una matriz 10 por 10. Entonces
A(1:5, 3)
Captulo 6: Programacin de MATLAB pgina 63
especifica la submatriz 5 x 1, vector columna, que consiste de los primeros cinco
elementos en la tercera columna de A.
Tambin
A(1:5, 7:10)
es la submatriz 5 x 4 de las primeras cinco filas y las ltimas cuatro columnas.
Utilizando solo los dos puntos denota todo lo correspondiente a la fila columna. Podramos
tener una instruccin como:
A(:, [3 5 10]) = B(:, 1:3)
que reemplaza la tercera, quinta y dcima columna de A con las primeras tres columnas de
B.
Entonces los dos puntos sirven para generar secuencias. Por ejemplo:
1:0.1:10
Generara una secuencia comenzando por 1 hasta 10, cada elemento de la secuencia
estara separado del anterior en 0.1.
1:10 Si se obvia el valor central, la separacin entre cada dos elementos de la secuencia
seria 1.
[1:0.1:10]
Si lo ponemos entre corchetes, estaremos generando un vector con los elementos de la
secuencia.
En la forma mas directa, los elementos de una matriz se referencian mediante A(i; j), donde i
y j son los ndices del elemento correspondiente. Podemos usar una secuencia que facilite la
indexacin de mltiples elementos, como en los siguientes ejemplos:
A(1,2:3)
dara como resultado los elementos de las columnas 2 y 3 pertenecientes a la primera fila.
A(:,2)
dara como resultado todos los elementos pertenecientes a la segunda columna.
Lgicamente, en estos casos, los elementos especificados como inicio, final e incremento
para producir la secuencia deben ser enteros.
Otra forma de generar datos secuencialmente es usando los comandos linspace y logspace,
su formato es:
t = linspace(n1,n2,n);
Captulo 6: Programacin de MATLAB pgina 63
w = logspace(n1,n2,n);
El comando linspace genera un vector desde n1 a n2 de longitud n, cuyos componentes
poseen valores espaciados linealmente. Por su parte, logspace produce tambin un vector
de n elementos, pero sus valores estn espaciados logaritmicamente desde 10
n1
a 10
n2
. Este
ultimo comando resultar til para la generacin de escalas frecuenciales para el anlisis de
sistemas mediante diagramas de Bode, Nyquist, etc.
1.$.1 Tranpueta de una #atri'
El caracter ' (apstrofe) denota la transpuesta de la matriz. Si tenemos la matriz A y
llamamos B = A', B es la transpuesta de la matriz A.
1.$.! Su#a & reta de #atrice
Las operaciones suma (+) y resta (-) son definidas para las matrices siempre y cuando stas
tengan la misma dimensin. Es decir, si A y B son matrices 3 x 3, entonces A + B se puede
calcular.
Las operaciones suma y resta tambin est definidas si uno de los operandos es un escalar,
es decir, una matriz 1 x 1.
Ejemplo:
x =
-1
0
2
y = x - 1
resultara
y =
-2
-1
1
Ejemplo:
>>A=[1 2 3;4 5 6]; B=[6 5 4; 3 2 1];
define las matrices A y B. Para sumarlas se escribe la operacin:
>>A+B
El resultado de la operacin es por defecto almacenado en la variable ans e inmediatamente
presentado en pantalla:
ans =
Captulo 6: Programacin de MATLAB pgina 63
7 7 7
7 7 7
Para almacenar la suma de A y B en la variable C:
>>C=A+B
C =
7 7 7
7 7 7
1.$." Multiplicaci(n de Matrice
La operacin de multiplicacin de matrices est definida siempre que el nmero de
columnas de la primera matriz sea igual a el nmero de filas de la segunda matriz.
1.$.$ Di%ii(n de Matrice
En divisin de matrices, si A es una matriz cuadrada no-singular, entonces A\B y B/A
corresponden a la multiplicacin izquierda y derecha de B por el inverso de A, esto es, inv(A)
* B y B * inv(A) respectivamente. El resultado es obtenido directamente sin la computacin
del inverso.
X = A\B es una solucin a A * X = B
X = B/A es una solucin a X * A = B
A\B es definido cuando B tiene la misma cantidad de filas que A. Si A es cuadrada, el
mtodo usado es la Eliminacin Gaussiana. El resultado es una matriz X con las mismas
dimensiones que B.
Si A no es cuadrada, se factoriza utilizando la ortogonalizacin de Householder con pivoteo
de columnas.
Los factores son usados para resolver sistemas de ecuaciones sub-determinados y sobre
-determinados. El resultado es una matriz X m-por-n donde m es el nmero de columnas de
A y n es el nmero de columnas de B. Cada columna de X tiene, al menos, k componentes
diferentes de cero, donde k es el rango efectivo de A.
3.3. 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 de- cimales 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 dimensio- nes, matrices dispersas, vectores y
Captulo 6: Programacin de MATLAB pgina 63
matrices de celdas, estructuras y clases y objetos. Algunos de estos tipos de datos ms
avanzados se vern en la ltima parte de este manual.
3.3.1. NMEROS REALES DE DOBLE PRECSN
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 =
nf
As pues, para MATLAB el infinito se representa como inf nf. MATLAB tiene tambin una
re- presentacin especial para los resultados que no estn definidos como nmeros. Por
ejemplo, ejec- tense 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 nf, son enormemente importantes en MATLAB, pues permiten
controlar la fiabili- dad de los resultados de los clculos matriciales. Los NaN se propagan al
realizar con ellos cual- quier 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 nf.
MATLAB dispone de tres funciones tiles relacionadas con las operaciones de coma
flotante. Estas funciones, que no tienen argumentos, son las siguientes:
Captulo 6: Programacin de MATLAB pgina 63

eps devuelve la diferencia entre 1.0 y el nmero de coma flotante inmediatamente supe-
rior. Da una idea de la precisin o nmero de cifras almacenadas. En un PC, eps va- le
2.2204e-016.
realmin devuelve el nmero ms pequeo con que se puede trabajar (2.2251e-308)
realmax devuelve el nmero ms grande con que se puede trabajar (1.7977e+308)
3.3.2. OTROS TPOS DE VARABLES: NTEGER, FLOAT Y LOGCAL
Como ya se ha comentado, por defecto MATLAB trabaja con variables de punto flotante y
doble precisin (double). Con estas variables pueden resolverse casi todos los problemas
prcticos y con frecuencia no es necesario complicarse la vida declarando variables de tipos
distintos, como se hace con cualquier otro lenguaje de programacin. Sin embargo, en
algunos casos es conveniente decla- rar variables de otros tipos porque puede ahorrarse
mucha memoria y pueden hacerse los clculos mucho ms rpidamente.
MATLAB permite crear variables enteras con 1, 2, 4 y 8 bytes (8, 16, 32 y 64 bits). A su vez,
estas variables pueden tener signo o no tenerlo. Las variables con signo representan
nmeros en interva- los "casi" simtricos respecto al 0; las variables sin signo representan
nmero no negativos, desde el 0 al nmero mximo.
Los tipos de los enteros con signo son int8, int16, int32 e int64, y sin signo uint8, uint16,
uint32 y uint64. Para crear una variable entera de un tipo determinado se pueden utilizar
sentencias como las siguientes:
>> i=int32(100); % se crea un entero de 4 bytes con valor 100
>> j=zeros(100); i=int32(j);% se crea un entero i a partir de j
>> i=zeros(1000,1000,'int32'); % se crea una mariz 1000x1000 de enteros
Las funciones intmin('int64') e intmax('int64') permiten por ejemplo saber el valor del entero
ms pequeo y ms grande (en valor algebraico) que puede formarse con variables enteras
de 64 bits:
Captulo 6: Programacin de MATLAB pgina 63
>> disp([intmin('int64'), intmax('int64')])
-9223372036854775808 9223372036854775807
La funcin isinteger(i) devuelve 1 si la variable i es entera y 0 en otro caso. La funcin
class(i) de- vuelve el tipo de variable que es i (int8, int16, ...), mientras que la funcin isa(i,
'int16') permite saber exactamente si la variable i corresponde a un entero de 16 bits.
MATLAB dispone de dos tipos de variables reales o float: single y double, que ocupan
respectiva- mente 4 y 8 bytes. Por defecto se utilizan doubles. Las funciones single(x) y
double(y) permiten realizar conversiones entre ambos tipos de variables.
Las funciones realmin y realmax permiten saber los nmeros double ms pequeo y ms
grande (en valor absoluto) que admite el computador. Para los correspondientes nmeros de
simple preci- sin habra que utilizar realmin('single') y realmax('single'). La funcin isfloat(x)
permite saber si x es una variable real, de simple o doble precisin. Para saber exactamente
de qu tipo de variable se rata se pueden utilizar las funciones isa(x, 'single') isa(x,
'double'). Obsrvese el ejemplo si- guiente, en el que se ve cmo con variables single se
reduce el tiempo de CPU y la memoria:
>> n=1000; AA=rand(n); A=single(AA);
>> tic, Bs=inv(A); toc
Elapsed time is 1.985000 seconds.
>> tic, Bd=inv(AA); toc
Elapsed time is 4.296000 seconds.
Quizs las variables ms interesantes aparte de las variables por defecto, las double sean
las va- riables logical, que slo pueden tomar los valores true (1) y false (0). Las variables
lgicas surgen

como resultado de los operadores relacionales (==, <, <=, >, >=, ~=, ver Apartado 3.6, en la
pgina
38) y de muchas funciones lgicas como any y all que se aplican a vectores y matrices, y
que se vern en el Apartado 4.6, a partir de la pgina 46.
Captulo 6: Programacin de MATLAB pgina 63
La funcin logical(A) produce una variable lgica, con el mismo nmero de elementos que A,
con valores 1 0 segn el correspondiente elementos de A sea distinto de cero o igual a
cero.
Una de las aplicaciones ms importantes de las variables lgicas es para separar o extraer
los elemn- tos de una matriz o vector que cumplen cierta condicin, y operar luego
selectivamente sobre dichos elementos. Obsrvese, el siguiente ejemplo:
>> A=magic(4)
A =
16 2 3 13
5 11 10 8
9 7 6 12
4
>> j=A>10 14 15 1
j =
1 0 0 1
0 1 0 0
0 0 0 1
0 1 1 0
>> isa(j,'logical')
ans =
1
>> A(j)=-10
A =
-10 2 3 -10
5 -10 10 8
9 7 6 -10
4 -10 -10 1
3.3.3. NMEROS COMPLEJOS: FUNCN COMPLEX
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:
Captulo 6: Programacin de MATLAB pgina 63
>> a=sqrt(-4)
a =
0 + 2.0000i
>> 3 + 4j
ans =
3.0000 + 4.0000i
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
utilizar- se tambin la funcin sqrt(-1), o una variable a la que se haya asignado el resultado
de esta funcin.
Captulo 6: Programacin de MATLAB pgina 63
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]* % 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, pro- duce la matriz conjugada y traspuesta. Existe una funcin que permite hallar
la matriz conjugada (conj( )) y el operador punto y apstrofo (.') que calcula simplemente la
matriz traspuesta.
3.3.4. 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: "cade- na"). Por ejemplo, en MATLAB:
s = 'cadena de caracteres'
Captulo 6: Programacin de MATLAB pgina 63
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.
3.4. 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 for- ma 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 ex- presin 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 expresio- nes 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.
Captulo 6: Programacin de MATLAB pgina 63
A semejanza de C, MATLAB distingue entre maysculas y minsculas en los nombres de
varia- bles. Los nombres de variables deben empezar siempre por una letra y pueden
constar de hasta 63 letras y nmeros. La funcin namelengthmax permite preguntar al
programa por este nmero mximo de caracteres. El carcter guin bajo (_) se considera
como una letra. A diferencia del len- guaje C, no hace falta declarar las variables que se
vayan a utilizar. Esto hace que se deba tener es- pecial cuidado con no utilizar nombres
errneos en las variables, porque no se recibir ningn aviso del ordenador.
Cuando se quiere tener una relacin de las variables que se han utilizado en una sesin de
trabajo se puede utilizar el comando who. Existe otro comando llamado whos que
proporciona adems in- formacin sobre el tamao, la cantidad de memoria ocupada y el
carcter real o complejo de cada variable. Se sugiere utilizar de vez en cuando estos
comandos en la sesin de MATLAB que se tie- ne abierta. Esta misma informacin se puede
obtener grficamente con el Workspace Browser, que aparece con el comando
View/Workspace o activando la ventana correspondiente si estaba abierto.
El comando clear tiene varias formas posibles:
clear sin argumentos, clear elimina todas las variables creadas previamente (ex- cepto las
variables globales).
clear A, b borra las variables indicadas. clear global borra las variables globales.
clear functions borra las funciones.
clear all borra todas las variables, incluyendo las globales, y las funciones.
3.5. Otras formas de definir matrices
MATLAB dispone de varias formas de definir matrices. El introducirlas por teclado slo es
prctico en casos de pequeo tamao y cuando no hay que repetir esa operacin muchas
veces. Recurdese que en MATLAB no hace falta definir el tamao de una matriz. Las
matrices toman tamao al ser definidas y este tamao puede ser modificado por el usuario
mediante adicin y/o borrado de filas y columnas. A continuacin se van a ver otras formas
ms potentes y generales de definir y/o modifi- car matrices.
3.5.1. TPOS DE MATRCES PREDEFNDOS
Existen en MATLAB varias funciones orientadas a definir con gran facilidad matrices de tipos
par- ticulares. Algunas de estas funciones son las siguientes:
Captulo 6: Programacin de MATLAB pgina 63
eye(4) forma la matriz unidad de tamao (44)

zeros(3,5) forma una matriz de ceros de tamao (35) zeros(4) dem de tamao (44)
ones(3) forma una matriz de unos de tamao (33) ones(2,4) idem de tamao (24)
linspace(x1,x2,n) genera un vector con n valores igualmente espaciados entre x1 y x2
logspace(d1,d2,n) genera un vector con n valores espaciados logartmicamente entre 10^d1
y 10^d2. Si d2 es pi9, los puntos se generan entre 10^d1 y pi
rand(3) forma una matriz de nmeros aleatorios entre 0 y 1, con distribucin uniforme,
de tamao (33)
rand(2,5) idem de tamao (25)
randn(4) forma una matriz de nmeros aleatorios de tamao (44), con distribu- cin
normal, de valor medio 0 y varianza 1.
magic(4) crea una matriz (44) con los nmeros 1, 2, ... 4*4, con la propiedad de que
todas las filas y columnas suman lo mismo
hilb(5) crea una matriz de Hilbert de tamao (55). La matriz de Hilbert es una matriz cuyos
elementos (i,j) responden a la expresin (1/(i+j-1)). Esta es una matriz especialmente difcil
de manejar por los grandes errores nu- mricos 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 vector x por
los elementos del vector y. Equivalente a x'*y, donde x e y son vectores fila
compan(pol) construye una matriz cuyo polinomio caracterstico tiene como coefi-
cientes los elementos del vector pol (ordenados de mayor grado a me- nor)
vander(v) construye la matriz de Vandermonde a partir del vector v (las columnas son las
potencias de los elementos de dicho vector)
Captulo 6: Programacin de MATLAB pgina 63
Existen otras funciones para crear matrices de tipos particulares. Con Help/Matlab Help se
puede obtener informacin sobre todas las funciones disponibles en MATLAB, que aparecen
agrupadas por categoras o por orden alfabtico. En la categora Mathematics aparecen la
mayor parte de las funciones estudiadas en este apartado.
3.5.2. FORMACN DE UNA MATRZ A PARTR DE OTRAS
MATLAB ofrece tambin la posibilidad de crear una matriz a partir de matrices previas ya
defini- das, por varios posibles caminos:
1 recibiendo alguna de sus propiedades (como por ejemplo el tamao),
2 por composicin de varias submatrices ms pequeas,
3 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:
9 pi es una variable predefinida en MATLAB, que como es fcil suponer representa el
nmero .

[m,n]=size(A) devuelve el nmero de filas y de columnas de la matriz A. Si la matriz es
cuadrada basta recoger el primer valor de retorno
n=length(x) calcula el nmero de elementos de un vector x
zeros(size(A)) forma una matriz de ceros del mismo tamao que una matriz A previamen- te
creada
ones(size(A)) dem con unos
A=diag(x) forma una matriz diagonal A cuyos elementos diagonales son los elemen- tos
de un vector ya existente x
x=diag(A) forma un vector x a partir de los elementos de la diagonal de una matriz ya
existente A
Captulo 6: Programacin de MATLAB pgina 63
diag(diag(A)) crea una matriz diagonal a partir de la diagonal de la matriz A
blkdiag(A,B) crea una matriz diagonal de submatrices a partir de las matrices que se le
pasan como argumentos
triu(A) 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.
tril(A) dem con una matriz triangular inferior
rot90(A,k) 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
flipud(A) halla la matriz simtrica de A respecto de un eje horizontal fliplr(A) halla la
matriz simtrica de A respecto de un eje vertical
reshape(A,m,n) 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 co- mandos y obsrvense los resultados obtenidos:
>> A=rand(3)
>> B=diag(diag(A))
>> C=[A, eye(3); zeros(3), B]
En el ejemplo anterior, la matriz C de tamao (66) se forma por composicin de cuatro
matrices de tamao (33). 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 co- mas. Los tamaos de las submatrices deben de ser coherentes.
3.5.3. DRECCONAMENTO DE VECTORES Y MATRCES A PARTR DE VECTORES
Los elementos de un vector x se pueden direccionar a partir de los de otro vector v. En este
caso,
x(v) equivale al vector x(v(1)), x(v(2)), ... Considrese el siguiente ejemplo:
>> v=[1 3 4]
v =
Captulo 6: Programacin de MATLAB pgina 63
1 3 4
>> x=rand(1,6)
x =
0.5899 0.4987 0.7351 0.9231 0.1449 0.9719
>> x(v)
ans =
0.5899 0.7351 0.9231

De forma anloga, los elementos de una matriz A pueden direccionarse a partir de los
elementos de dos vectores f y c. Vase por ejemplo:
>> f=[2 4]; c=[1 2];
>> A=magic(4)
A =
16 2 3 13
5 11 10 8
9 7 6 12
4
>> A(f,c) 14 15 1
ans =
5 11
4 14
El siguiente ejemplo continuacin del anterior permite comprobar cmo los elementos de
una matriz se pueden direccionar con un slo ndice, considerando que las columnas de la
matriz estn una a continuacin de otra formando un vector:
>> f=[1 3 5 7];
>> A(f), A(5), A(6)
ans =
16 9 2 7
ans =
2
ans =
11
Captulo 6: Programacin de MATLAB pgina 63
Ms adelante se ver que esta forma de extraer elementos de un vector y/o de una matriz
tiene abundantes aplicaciones, por ejemplo la de modificar selectivamente esos elementos.
3.5.4. 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 modi- ficaciones que se le ocurran y haciendo pruebas abundantes (Probar es la
mejor forma de apren- der!).
Para empezar, defnase un vector x con el siguiente comando:
>> x=1:10
x =
1 2 3 4 5 6 7 8 9 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 utilizar- se 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 1
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

Captulo 6: Programacin de MATLAB pgina 63
coseno. Ejectese y obsrvese el resultado (recurdese que con (;) despus de un comando
el resul- tado 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 66 y despus se realizarn
diversas operacio- nes sobre ella con el operador (:).
>> A=magic(6)
A =
35 1 6 26 19 24
3 32 7 21 23 25
31 9 2 22 27 20
8 28 33 17 10 15
30 5 34 12 14 16
4 36 29 13 18 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
Los dos puntos aislados representan "todos los elementos". Por ejemplo, el siguiente
comando ex- trae todos los elementos de la 3 fila:
>> A(3, :)
Captulo 6: Programacin de MATLAB pgina 63
ans =
31 9 2 22 27 20
Para acceder a la ltima fila o columna puede utilizarse la palabra end, en lugar del nmero
corres- pondiente. 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 2 22 27 20
8 28 33 17 10 15
30 5 34 12 14 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 26 19 24
3 32 7 21 23 25
30 5 34 12 14 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
conti- nuacin se va a definir una matriz identidad B de tamao 66 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,
Captulo 6: Programacin de MATLAB pgina 63
>> B=eye(size(A));
>> B([2 4 5],:)=A(1:3,:)
B =
1 0 0 0 0 0
35 1 6 26 19 24
0 0 1 0 0 0
3 32 7 21 23 25
31 9 2 22 27 20
0 0 0 0 0 1
Se pueden realizar operaciones an ms complicadas, tales como la siguiente10:
>> B=eye(size(A));
>> B(1:2,:)=[0 1; 1 0]*B(1:2,:)
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
>> A(:,3:-1:1)
ans =
6 1 8
7 5 3
Captulo 6: Programacin de MATLAB pgina 63
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.
3.5.5. MATRZ VACA A[ ]. BORRADO DE FLAS O COLUMNAS
Para MATLAB una matriz definida sin ningn elemento entre los corchetes es una matriz
que exis- te, pero que est vaca, o lo que es lo mismo que tiene dimensin cero.
Considrense los siguientes ejemplos de aplicacin de las matrices vacas:
10 Se sustituyen las dos primeras filas de B por el producto de dichas filas por una matriz
de permutacin.

>> A=magic(3)
A =
8 1 6
3 5 7
4 9 2
>> B=[]
B =
[]
>> exist(B)
ans =
[]
>> isempty(B)
ans =
1
>> A(:,3)=[]
A =
8 1
3 5
4 9
Captulo 6: Programacin de MATLAB pgina 63
Las funciones exist() e isempty() permiten chequear si una variable existe y si est vaca. En
el l- timo ejemplo se ha eliminado la 3 columna de A asignndole la matriz vaca.
3.5.6. DEFNCN DE VECTORES Y MATRCES A PARTR DE UN FCHERO
MATLAB acepta como entrada un fichero nombre.m (siempre con extensin .m) que
contiene ins- trucciones y/o funciones. Dicho fichero se llama desde la lnea de comandos
tecleando simplemente su nombre, sin la extensin. A su vez, un fichero *.m puede llamar a
otros ficheros *.m, e incluso puede llamarse a s mismo (funciones recursivas). Las variables
definidas dentro de un fichero de comandos *.m que se ejecuta desde la lnea de comandos
son variables del espacio de trabajo base, esto es, pueden ser accedidas desde fuera de
dicho fichero; no sucede lo mismo si el fichero *.m corresponde a una funcin. Si un fichero
de comandos se llama desde una funcin, las variables que se crean pertenecen al espacio
de trabajo de dicha funcin.
Como ejemplo se puede crear un fichero llamado unidad.m que construya una matriz unidad
de tamao 33 llamada U33 en un directorio llamado c:\matlab. Este fichero deber
contener la lnea siguiente:
U33=eye(3)
Desde MATLAB llmese al comando unidad y obsrvese el resultado. Entre otras razones,
es muy importante utilizar ficheros de comandos para poder utilizar el Debugger y para evitar
teclear mu- chas veces los mismos datos, sentencias o expresiones.
3.5.7. DEFNCN DE VECTORES Y MATRCES MEDANTE FUNCONES Y
DECLARACONES
Tambin se pueden definir las matrices y vectores por medio de funciones de librera (las
que se vern en la siguiente seccin) y de funciones programadas por el usuario (que
tambin se vern ms adelante).
3.6. Operadores relacionales
El lenguaje de programacin de MATLAB dispone de los siguientes operadores relacionales:
< menor que
Captulo 6: Programacin de MATLAB pgina 63
> mayor que
<= menor o igual que
>= mayor o igual que

== igual que
~= distinto que11
Obsrvese que, salvo el ltimo de ellos, coinciden con los correspondientes operadores
relacionales de C. Sin embargo, sta es una coincidencia ms bien formal. En MATLAB los
operadores relacio- nales pueden aplicarse a vectores y matrices, y eso hace que tengan un
significado especial.
Al igual que en C, si una comparacin se cumple el resultado es 1 (true), mientras que si no
se cumple es 0 (false). Recprocamente, cualquier valor distinto de cero es considerado
como true y el cero equivale a false. La diferencia con C est en que cuando los operadores
relacionales de MA- TLAB se aplican a dos matrices o vectores del mismo tamao, la
comparacin se realiza elemento a elemento, y el resultado es otra matriz de unos y ceros
del mismo tamao, que recoge el resulta- do de cada comparacin entre elementos.
Considrese el siguiente ejemplo como ilustracin de lo que se acaba de decir:
>> A=[1 2;0 3]; B=[4 2;1 5];
>> A==B
ans =
0 1
0 0
>> A~=B
ans =
1 0
1 1
3.7. Operadores lgicos
Los operadores lgicos de MATLAB son los siguientes:
Captulo 6: Programacin de MATLAB pgina 63
& and (funcin equivalente: and(A,B)). Se evalan siempre ambos operandos, y el
resultado es true slo si ambos son true.
&& and breve: si el primer operando es false ya no se evala el segundo, pues el resul-
tado final ya no puede ser ms que false.
| or (funcin equivalente: or(A,B)). Se evalan siempre ambos operandos, y el re-
sultado es false slo si ambos son false.
|| or breve: si el primer operando es true ya no se evala el segundo, pues el resulta-
do final no puede ser ms que true.
~ negacin lgica (funcin equivalente: not(A))
xor(A,B) realiza un "or exclusivo", es decir, devuelve 0 en el caso en que ambos sean 1
ambos sean 0.
Los operadores lgicos se combinan con los relacionales para poder comprobar el
cumplimiento de condiciones mltiples. Ms adelante se vern otros ejemplos y ciertas
funciones de las que dispone MATLAB para facilitar la aplicacin de estos operadores a
vectores y matrices.
Los operadores lgicos breves (&&) y (||) se utilizan para simplificar las operaciones de
compara- cin evitando operaciones innecesarias, pero tambin para evitar ciertos errores
que se produciran en caso de evaluar incondicionalmente el segundo argumento.
Considrese por ejemplo la siguiente sentencia, que evita una divisin por cero:
r = (b~=0) && (a/b>0);
Captulo 6: Programacin de MATLAB pgina 63
Captulo II
INTRODUCCION AL USO DEL MATLAB
). *RO+RAMACI,N DE MATLAB
Como ya se ha dicho varias veces incluso con algn ejemplo MATLAB es una aplicacin ue se
puede programar muy !"cilmen#e$ %e #odas !ormas, como lenguaje de programacin pron#o ver"
ue no #iene #an#as posi&ilidades como o#ros lenguajes 'ni #an complicadas$$$($ )e comen*ar" viendo
las &i!urcaciones y &ucles, y la lec#ura y escri#ura in#erac#iva de varia&les, ue son los elemen#os
&"sicos de cualuier programa de una cier#a complejidad$
6.1. Bifurcaciones y bucles
MATLAB posee un lenguaje de programacin ue como cualuier o#ro lenguaje dispone de sen+
#encias para reali*ar bifurcaciones y bucles$ Las bifurcaciones permi#en reali*ar una u o#ra opera+
cin segn se cumpla o no una de#erminada condicin$ La ,igura -. mues#ra #res posi&les !ormas
de &i!urcacin$
Condicin
#rue
!alse
Condicin
#rue
!alse
Condicin 1
!alse
Condicin -
#rue
#rue
Bloue 1
)en#encias Bloue 1 Bloue -
!alse
Bloue /
Bloue -
,igura -.$ 0jemplos gr"!icos de &i!urcaciones$
Los bucles permi#en repe#ir las mismas o an"logas operaciones so&re da#os dis#in#os$ Mien#ras ue
en C1C2213ava el 4cuerpo4 de es#as sen#encias se de#ermina&a median#e llaves 5$$$6, en MATLAB
se u#ili*a la pala&ra end con an"loga !inalidad$ 07is#en #am&i8n algunas o#ras di!erencias de sin+
#a7is$
!alse
Condicin
)en#encias
Captulo 6: Programacin de MATLAB pgina 63
#rue
)en#encias
Condicin
!alse
#rue
,igura /0$ Bucles con con#rol al principio y al !inal$
La ,igura /0 mues#ra dos posi&les !ormas de &ucle, con el con#rol si#uado al principio o al !inal del
mismo$ )i el con#rol es#" si#uado al comien*o del &ucle es posi&le ue las sen#encias no se ejecu#en
ninguna ve*, por no ha&erse cumplido la condicin cuando se llega al &ucle por primera ve*$ )in
Aprenda Matlab 7. como !i e!tu"iera en Primero pgina 6#
em&argo, si la condicin es#" al !inal del &ucle las sen#encias se ejecu#ar"n por lo menos una ve*,
aunue la condicin no se cumpla$ Muchos lenguajes de programacin disponen de &ucles con con+
#rol al principio 'for y while en C1C2213ava( y al !inal 'do while en C1C2213ava($ 0n MATLAB
no hay &ucles con con#rol al !inal del &ucle, es decir, no e7is#e cons#ruccin an"loga a do ... while$
Las &i!urcaciones y &ucles no slo son #iles en la preparacin de programas o de !icheros *.m$
Tam&i8n se aplican con !recuencia en el uso in#erac#ivo de MATLAB, como se ver" m"s adelan#e
en algunos ejemplos$
9$1$1$ )0:T0:C;A $%
0n su !orma m"s simple, la sen#encia if se escri&e en la !orma siguien#e 'o&s8rvese ue a di!eren+
cia de C1C2213ava la condicin no va en#re par8n#esis, aunue se pueden poner si se desea(
1<
=
if condicion
sentencias
end
07is#e #am&i8n la bi&urcacin m'ltiple, en la ue pueden conca#enarse #an#as condiciones como se
desee, y ue #iene la !orma=
if condicion1
bloque1
elseif condicion2
bloque2
elseif condicion3
bloque3
else % opcin por defecto para cuando no se cumplan las condiciones 1,2,3
bloque4
end
donde la opcin por de!ec#o else puede ser omi#ida= si no es#" presen#e no se hace nada en caso de
ue no se cumpla ninguna de las condiciones ue se han cheueado$
>na o&servacin muy impor#an#e= la condicin del if puede ser una condicin matricial, del #ipo
A??B, donde A y B son ma#rices del mismo #ama@o$ Aara ue se considere ue la condicin se
cumple, es necesario ue sean iguale! do! a do! todos lo! elemento! de las ma#rices A y B 'a
ij
?b
ij
,
1im, 1(n($ Bas#a ue haya dos elemen#os a
ij
y b
ij
di!eren#es para ue las ma#rices ya no sean
iguales, y por #an#o las sen#encias del if no se ejecu#en$ An"logamen#e, una condicin en la !orma
A?B e7ige ue #odos los elemen#os sean di!eren#es dos a dos 'a
ij
Bb
ij
, 1im, 1(n($ Bas#arCa ue
hu&iera dos elemen#os a
ij
y b
ij
iguales para ue la condicin no se cumpliese$ 0n resumen=
i! A??B e7ige ue todos los elemen#os sean iguales dos a dos
i! A?B e7ige ue todos los elemen#os sean diferentes dos a dos
Como se ha dicho, MATLAB dispone de !unciones especiales para ayudar en el cheueo de condi+
ciones ma#riciales$ Aor ejemplo, la !uncin isequal(A, B) devuelve un uno si las dos ma#rices son
id8n#icas y un cero en caso de ue di!ieran en algo$
9$1$-$ )0:T0:C;A )*$TC+
La sen#encia switch reali*a una !uncin an"loga a un conjun#o de if...elseif conca#enados$ )u !orma
general es la siguien#e=
1D
0n los ejemplos siguien#es las sentencias aparecen despla*adas hacia la derecha respec#o al if, else o end$ 0s#o se
hace asC para ue el programa resul#e m"s legi&le, resul#ando m"s !"cil ver dnde empie*a y #ermina la &i!urcacin o
el &ucle$ 0s muy recomenda&le seguir es#a pr"c#ica de programacin$
Captulo 6: Programacin de MATLAB pgina 6,
switch switch_expresion
case case_expr1,
bloque1
case {case_expr2, case_expr3, case_expr4,...
bloque2
end
...
otherwise, % opcin por defecto
bloque3
Al principio se evala la switch_expresion, cuyo resul#ado de&e ser un nmero escalar o una cadena
de carac#eres$ 0s#e resul#ado se compara con las case_expr, y se ejecu#a el &loue de sen#encias ue
corresponda con ese resul#ado$ )i ninguno es igual a switch_expresion se ejecu#an las sen#encias
correspondien#es a otherwise$ )egn puede verse en el ejemplo an#erior, es posi&le agrupar varias
condiciones den#ro de unas llaves 'cons#i#uyendo lo ue se llama un cell arra- o vec#or de celdas,
e7plicado en el apar#ado <$D(E &as#a la igualdad con cualuier elemen#o del cell array para ue se
ejecu#e ese &loue de sen#encias$ La FigualdadG de&e en#enderse en el sen#ido del operador de
igualdad '??( para escalares y la !uncin strcmp() para cadenas de carac#eres($ A di!erencia de
C1C2213ava
19
, en MATLAB slo se ejecu#a uno de los &loues relacionado con un case$
9$1$/$ )0:T0:C;A %./
La sen#encia for repi#e un conjun#o de sen#encias un nmero prede#erminado de veces$ La sen#encia
for de MATLAB es muy di!eren#e y no #iene la generalidad de la sen#encia for de C1C2213ava$ La
siguien#e cons#ruccin ejecu#a !entencia! con valores de i de 1 a n, variando de uno en uno$
for i!1"n
sentencias
end
o &ien,
for i!#ector$alores
sentencias
end
donde vectorValores es un vec#or con los dis#in#os valores ue #omar" la varia&le i$
0n el siguien#e ejemplo se presen#a el caso m"s general para la varia&le del &ucle '"alor0inicial:
incremento: "alor0&inal(E el &ucle se ejecu#a por primera ve* con i=n, y luego i se va reduciendo de
0$- en 0$- has#a ue llega a ser menor ue 1, en cuyo caso el &ucle se #ermina=
for i!n"%&.2"1
sentencias
end
0n el siguien#e ejemplo se presen#a una es#ruc#ura correspondien#e a dos bucles anidados$ La varia+
&le j es la ue varCa m"s r"pidamen#e 'por cada valor de i, j #oma #odos sus posi&les valores(=
for i!1"m
for '!1"n
sentencias
end
end
>na l#ima !orma de in#er8s del &ucle for es la siguien#e 'A es una ma#ri*(=
for i!(
sentencias
end
1<
0n C se ejecu#a el caso seleccionado y #odos los siguien#es, salvo ue se u#ilice la sen#encia brea$
Aprenda Matlab 7. como !i e!tu"iera en Primero pgina 66
en la ue la varia&le i es un vec#or ue va #omando en cada i#eracin el valor de una de las columnas
de A$
Cuando se in#roducen in#erac#ivamen#e en la lCnea de comandos, los &ucles for se ejecu#an slo des+
pu8s de in#roducir la sen#encia end ue los comple#a$
9$1$D$ )0:T0:C;A *+$L1
La es#ruc#ura del &ucle while es muy similar a la de C1C2213ava$ )u sin#a7is es la siguien#e=
while condicion
sentencias
end
donde condicion puede ser una e7presin vec#orial o ma#ricial$ Las !entencia! se siguen ejecu#ando
mien#ras haya elemen#os dis#in#os de cero en condicion, es decir, mien#ras haya algn o algunos
elemen#os true$ 0l &ucle se #ermina cuando todo! lo! elemento! de condicion son false 'es decir,
cero($
9$1$<$ )0:T0:C;A B/1A2
Al igual ue en C1C2213ava, la sen#encia brea hace ue se #ermine la ejecucin del &ucle for y1o
while m"s in#erno de los ue comprenden a dicha sen#encia$
9$1$9$ )0:T0:C;A C.3T$341
La sen#encia continue hace ue se pase inmedia#amen#e a la siguien#e i#eracin del &ucle for o whi!
le, sal#ando #odas las sen#encias ue hay en#re el continue y el !in del &ucle en la i#eracin ac#ual$
9$1$H$ )0:T0:C;A) T/5$$$CATC+$$$136
La cons#ruccin tr"...catch...end permi#e ges#ionar los errores ue se pueden producir en #iempo de
ejecucin$ )u !orma es la siguien#e=
try
sentencias1
catch
sentencias2
end
0n el caso de ue duran#e la ejecucin del &loue sentencias# se produ*ca un error, el con#rol de la
ejecucin se #rans!iere al &loue sentencias$$ )i la ejecucin #ranscurriera normalmen#e, senten!
cias$ no se ejecu#arCa nunca$ MATLAB dispone de una !uncin lasterr ue devuelve una cadena de
carac#eres con el mensaje correspondien#e al l#imo error ue se ha producido$ 0n la !orma las!
terr(%%) pone a cero es#e con#ador de errores, y hace ue la !uncin lasterr devuelva la ma#ri* vacCa
IJ has#a ue se produ*ca un nuevo error$
6.2. Lectura y escritura interactiva de variables
)e ver" a con#inuacin una !orma sencilla de leer varia&les desde #eclado y escri&ir mensajes en la
pan#alla del AC$ M"s adelan#e se considerar"n o#ros modos m"s generales y complejos de hacerlo$
9$-$1$ ,>:C;K: $3P4T
La !uncin input permi#e imprimir un mensaje en la lCnea de comandos de MATLAB y recuperar
como valor de re#orno un valor num8rico o el resul#ado de una e7presin #ecleada por el usuario$
%espu8s de imprimir el mensaje, el programa espera ue el usuario #eclee el valor num8rico o la
e7presin$ Cualuier e7presin v"lida de MATLAB es acep#ada por es#e comando$ 0l usuario pue+
Captulo 6: Programacin de MATLAB pgina 67
de #eclear simplemen#e un vec#or o una ma#ri*$ 0n cualuier caso, la e7presin in#roducida es eva+
luada con los valores ac#uales de las varia&les de MATLAB y el resul#ado se devuelve como valor
de re#orno$ L8ase un ejemplo de uso de es#a !uncin=
>> n = input('Teclee el nmero de ecuaciones')
M#ra posi&le !orma de es#a !uncin es la siguien#e 'o&s8rvese el par"me#ro )s)(=
>> nombre = input('Cmo te llamas?''s')
0n es#e caso el #e7#o #ecleado como respues#a se lee y se devuelve sin evaluar, con lo ue se alma+
cena en la cadena nombre$ AsC pues, en es#e caso, si se #eclea una !rmula, se almacena como #e7#o
sin evaluarse$
9$-$-$ ,>:C;K: 6$)P
La !uncin disp permi#e imprimir en pan#alla un mensaje de #e7#o o el valor de una ma#ri*, pero sin
imprimir su nom&re$ 0n realidad, disp siempre imprime vec#ores y1o ma#rices= las cadenas de carac+
#eres son un caso par#icular de vec#ores$ Consid8rense los siguien#es ejemplos de cmo se u#ili*a=
>> disp('!l pro"rama ha terminado')
>> #=rand($$)
>> disp(#)
0jec#ense las sen#encias an#eriores en MATLAB y o&s8rvese la di!erencia en#re las dos !ormas de
imprimir la ma#ri* A$
6.3. Ficheros *.
Los !icheros con e7#ensin '.m( son !icheros de #e7#o sin !orma#o '!icheros A)C;;( ue cons#i#uyen
el cen#ro de la programacin en MATLAB$ Na se han u#ili*ado en varias ocasiones$ 0s#os !icheros
se crean y modi!ican con un edi#or de #e7#os cualuiera$ 0n el caso de MATLAB ejecu#ado en un
AC &ajo &indows, lo mejor es u#ili*ar su propio edi#or de #e7#os, ue es #am&i8n 'ebugger$
07is#en dos #ipos de !icheros *.m, los ficheros de comandos 'llamados !cript! en ingl8s( y las fun!
ciones$ Los primeros con#ienen simplemen#e un conjun#o de comandos ue se ejecu#an sucesiva+
men#e cuando se #eclea el nom&re del !ichero en la lCnea de comandos de MATLAB o se incluye
dicho nom&re en o#ro !ichero *.m$ >n !ichero de comandos puede llamar a o#ros !icheros de co+
mandos$ )i un !ichero de comandos se llama desde de la lCnea de comandos de MATLAB, las va+
ria&les ue crea per#enecen al espacio de traba(o base de MATLAB 'recordar apar#ado -$<$9(, y
permanecen en 8l cuando se #ermina la ejecucin de dicho !ichero$
Las funciones permi#en de!inir !unciones en#eramen#e an"logas a las de MATLAB, con su nombre,
sus argumentos y sus )alores de retorno$ Los !icheros *.m ue de!inen !unciones permi#en e7#en+
der las posi&ilidades de MATLABE de hecho e7is#en &i&lio#ecas de !icheros *.m ue se venden
'toolits( o se dis#ri&uyen gra#ui#amen#e 'a #rav8s de $nternet($ Las !unciones de!inidas en !icheros
*.m se carac#eri*an porue la primera lCnea 'ue no sea un comen#ario( comien*a por la pala&ra
function, seguida por los "alore! de retorno 'en#re corche#es I J y separados por comas, si hay m"s
de uno(, el signo igual '?( y el nombre de la &uncin, seguido de los argumento! 'en#re par8n#esis y
separados por comas($
Oecu8rdese ue un !ichero *.m puede llamar a o#ros !icheros *.m, e incluso puede llamarse a sC
mismo de !orma recursiva$ Los !icheros de comandos se pueden llamar #am&i8n desde !unciones, en
cuyo caso las varia&les ue se crean per#enecen al espacio de traba(o de la funci*n$ 0l espacio de
#ra&ajo de una !uncin es independien#e del espacio de #ra&ajo &ase y del espacio de #ra&ajo de las
dem"s !unciones$ 0s#o implica por ejemplo ue no puede ha&er colisiones en#re nom&res de varia+
Aprenda Matlab 7. como !i e!tu"iera en Primero pgina 67
&les= aunue varias !unciones #engan una varia&le llamada A, en realidad se #ra#a de varia&les com+
ple#amen#e dis#in#as 'a no ser ue A haya sido declarada como varia&le global($
A con#inuacin se ver" con un poco m"s de de#alle am&os #ipos de !icheros *.m$
9$/$1$ ,;CP0OM) %0 CMMA:%M) ')C/$PT)(
Como ya se ha dicho, los !icheros de comandos o !cript! son !icheros con un nom&re #al como fi!
le#.m ue con#ienen una sucesin de comandos an"loga a la ue se #eclearCa en el uso in#erac#ivo
del programa$ %ichos comandos se ejecu#an sucesivamen#e cuando se #eclea el nom&re del !ichero
ue los con#iene 'sin la e7#ensin(, es decir cuando se #eclea file# con el ejemplo considerado$
Cuando se ejecu#a desde la lCnea de comandos, las varia&les creadas por file# per#enecen al espacio
de #ra&ajo &ase de MATLAB$ Aor el con#rario, si se ejecu#a desde una !uncin, las varia&les ue
crea per#enecen al espacio de #ra&ajo de la !uncin 'ver apar#ado -$<$9, en la p"gina 1D($
0n los !icheros de comandos conviene poner los pun#os y coma 'E( al !inal de cada sen#encia, para
evi#ar una salida de resul#ados demasiado cuan#iosa$ >n !ichero *.m puede llamar a o#ros !icheros
*.m, e incluso se puede llamar a sC mismo de modo recursivo$ )in em&argo, no se puede hacer pro!
file 'ver apar#ado 9$11, en la p"gina .<( de un !ichero de comandos= slo se puede hacer de las !un+
ciones$
Las varia&les de!inidas por los !icheros de comandos son varia&les del espacio de #ra&ajo desde el
ue se ejecu#a el !ichero, es#o es varia&les con el mismo car"c#er ue las ue se crean in#erac#iva+
men#e en MATLAB si el !ichero se ha ejecu#ado desde la lCnea de comandos$ Al #erminar la ejecu+
cin del !cript, dichas varia&les permanecen en memoria$
0l comando echo hace ue se impriman los comandos ue es#"n en un !cript a medida ue van
siendo ejecu#ados$ 0s#e comando #iene varias !ormas=
echo on ac#iva el echo en #odos los !icheros scrip#
echo o!! desac#iva el echo
echo !ile on donde Q!ileQ es el nom&re de un !ichero de !uncin, ac#iva el echo en esa !uncin
echo !ile o!! desac#iva el echo en la !uncin
echo !ile pasa de on a off y viceversa
echo on all ac#iva el echo en #odas las !unciones
echo o!! all desac#iva el echo de #odas las !unciones
Mencin especial merece el !ichero de comandos startup.m 'ver apar#ado -$H($ 0s#e !ichero se eje+
cu#a cada ve* ue se en#ra en MATLAB$ 0n 8l puede in#roducir #odos auellos comandos ue le
in#eresa se ejecu#en siempre al iniciar la sesin, por ejemplo format compact y los comandos nece+
sarios para modi!icar el path$
9$/$-$ %0,;:;C;K: %0 ,>:C;M:0)
La primera l+nea de un !ichero llamado name.m ue de!ine una !uncin #iene la !orma=
function %lista de &alores de retorno' = name(lista de ar"umentos)
donde name es el nom&re de la !uncin$ 0n#re corche#es y separados por comas van los )alores de
retorno 'siempre ue haya m"s de uno(, y en#re par8n#esis #am&i8n separados por comas los argu!
mentos$ Auede ha&er !unciones sin valor de re#orno y #am&i8n sin argumen#os$ Oecu8rdese ue los
argumentos son los datos de la !uncin y los )alores de retorno sus resultados$ )i no hay valores
de re#orno se omi#en los corche#es y el signo igual '?(E si slo hay un valor de re#orno no hace !al#a
poner corche#es$ Tampoco hace !al#a poner par8n#esis si no hay argumen#os$
Captulo 6: Programacin de MATLAB pgina 68
>na di!erencia impor#an#e con C1C2213ava es ue en MATLAB una !uncin no puede modi!icar
nunca los argumen#os ue reci&e, de cara al en#orno ue ha reali*ado la llamada$ Los resul#ados de
una !uncin de MATLAB se o&#ienen siempre a #rav8s de los valores de re#orno, ue pueden ser
ml#iples y ma#riciales$ Tan#o el nmero de argumen#os como el de valores de re#orno no #ienen ue
ser !ijos, dependiendo de cmo el usuario llama a la !uncin
1H
$
Las varia&les de!inidas den#ro de una !uncin son )ariables locales, en el sen#ido de ue son inac+
cesi&les desde o#ras par#es del programa y en el de ue no in#er!ieren con varia&les del mismo nom+
&re de!inidas en o#ras !unciones o par#es del programa$ )e puede decir ue per#enecen al propio
espacio de #ra&ajo de la !uncin y no son vis#as desde o#ros espacios de #ra&ajo$ Aara ue la !uncin
#enga acceso a varia&les ue no han sido pasadas como argumen#os es necesario declarar dichas
varia&les como )ariables globales, #an#o en el programa principal como en las dis#in#as !unciones
ue de&en acceder a su valor$ 0s !recuen#e u#ili*ar el convenio de usar para las varia&les glo&ales
nom&res largos 'm"s de < le#ras( y con maysculas$
Aor ra*ones de e!iciencia, los argumen#os ue reci&e una !uncin de MATLAB no se copian a va+
ria&les locales si no son modi!icados por dicha !uncin 'en #8rminos de C1C22 se dirCa ue se pasan
por referencia($ 0s#o #iene impor#an#es consecuencias en #8rminos de e!iciencia y ahorro de #iempo
de c"lculo$ )in em&argo, si den#ro de la !uncin se reali*an modi!icaciones so&re los argumen#os
reci&idos, an#es se sacan copias de dichos argumen#os a varia&les locales y se modi!ican las copias
'dirCase ue en es#e caso los argumen#os se pasan por )alor($
%en#ro de la !uncin, los valores de re#orno de&en ser calculados en algn momen#o 'no hay sen#en+
cia return o&liga#oria, como en C1C2213ava($ %e #odas !ormas, no hace !al#a calcular siempre #odos
los posi&les valores de re#orno de la !uncin, sino slo los que el usuario espera obtener en la sen+
#encia de llamada a la !uncin$ 0n cualuier !uncin e7is#en dos varia&les de!inidas de modo au#o+
m"#ico, llamadas nargin y nargout, ue represen#an respec#ivamen#e el nmero de argumen#os y el
nmero de valores de re#orno con los ue la !uncin ha sido llamada$ %en#ro de la !uncin, es#as
varia&les pueden ser u#ili*adas como el programador desee$
La ejecucin de una !uncin #ermina cuando se llega a su l#ima sen#encia ejecu#a&le$ )i se uiere
!or*ar el ue una !uncin #ermine de ejecu#arse se puede u#ili*ar la sen#encia return, ue devuelve
inmedia#amen#e el con#rol al en#orno de llamada$
9$/$/$ )0:T0:C;A /1T4/3
%e ordinario las !unciones devuelven el con#rol despu8s de ue se ejecu#e la l#ima de sus sen#en+
cias$ La sen#encia return, incluida den#ro del cdigo de una !uncin, hace ue se devuelva inmedia+
#amen#e el con#rol al programa ue reali* la llamada$
9$/$D$ ,>:C;M:0) CM: :RM0OM LAO;ABL0 %0 AOS>M0:TM)
%esde la versin <$0, MATLAB dispone de una nueva !orma de pasar a una !uncin un nmero
varia&le de argumen#os por medio de la varia&le )arargin, ue es un )ector de celdas 'ver apar#ado
<$D, en la p"gina <9( ue con#iene #an#os elemen#os como sean necesarios para poder recoger en
dichos elemen#os #odos los argumen#os ue se hayan pasado en la llamada$ :o es necesario ue
)arargin sea el nico argumen#o, pero sC de&e ser el l#imo de los ue haya, pues recoge #odos los
argumen#os a par#ir de una de#erminada posicin$ Oecu8rdese ue a los elemen#os de un cell arra"
se accede u#ili*ando llaves 56, en lugar de par8n#esis '($
19
0s un concep#o dis#in#o del de funciones sobrecargadas '!unciones dis#in#as con el mismo nom&re y dis#in#os argu+
men#os(, u#ili*adas en C1C2213ava$ 0n MATLAB una misma !uncin puede ser llamada con m"s o menos argumen+
#os y valores de re#orno$ Tam&i8n en C1C22 es posi&le #ener un nmero varia&le de argumen#os, aunue no de valo+
res de re#orno$
Aprenda Matlab 7. como !i e!tu"iera en Primero pgina 7
%e !orma an"loga, una !uncin puede #ener un nmero inde#erminado de valores de re#orno u#ili+
*ando )arargout, ue es #am&i8n un cell arra" ue agrupa los l#imos valores de re#orno de la !un+
cin$ Auede ha&er o#ros valores de re#orno, pero )arargout de&e ser el l#imo$ 0l cell array )arar!
gout se de&e crear den#ro de la !uncin y hay ue dar valor a sus elemen#os an#es de salir de la !un+
cin$ Oecu8rdese #am&i8n ue las varia&les nargin y nargout indican el nmero de argumen#os y de
valores de re#orno con ue ha sido llamada la !uncin$ A con#inuacin se presen#a un ejemplo senci+
llo= o&s8rvese el cdigo de la siguien#e !uncin atan,=
function #arar*out!atan3+#arar*in,
if nar*in!!1
rad ! atan+#arar*in{1,-
elseif nar*in!!2
rad ! atan2+#arar*in{1,#arar*in{2,-
else
disp+).rror" m/s de dos ar*umentos),
return
end
#arar*out{1!rad-
if nar*out01
#arar*out{2!rad112&3pi-
end
MATLAB 'y muchos o#ros lenguajes de programacin( dispone de dos !unciones, llamadas atan y
atan$, para calcular el arco cuya #angen#e #iene un de#erminado valor$ 0l resul#ado de dichas !un+
ciones es#" e7presado en radianes$ La !uncin atan reci&e un nico argumen#o, con lo cual el arco
ue devuelve es#" comprendido en#re 1- y 21- 'en#re .0T y .0T(, porue por ejemplo un arco de
D<T es indis#ingui&le de o#ro de 1/<, si slo se conoce la #angen#e$ La !uncin atan$ reci&e dos
argumen#os, uno proporcional al seno del "ngulo y o#ro al coseno$ 0n es#e caso ya se pueden dis#in+
guir los "ngulos en los cua#ro cuadran#es, en#re y 'en#re 1U0T y
1U0T($
La !uncin atan, de!inida an#eriormen#e puede reci&ir uno o dos argumen#os= si reci&e uno llama a
atan y si reci&e dos llama a atan$ 'si reci&e m"s da un mensaje de error($ Adem"s, atan, puede
devolver uno o dos valores de re#orno$ Aor ejemplo, si el usuario la llama en la !orma=
>> a = atan(())*
devuelve un valor de re#orno ue es el "ngulo en radianes, pero si se llama en la !orma=
>> %a b' = atan(()+))*
devuelve dos valores de re#orno, uno con el "ngulo en radianes y o#ro en grados$ M&s8rvese cmo la
!uncin atan, u#ili*a los vec#ores de celdas )arargin y )arargout, asC como el nmero ac#ual de
argumen#os nargin con los ue ha sido llamada$
9$/$<$ +1LP AAOA LA) ,>:C;M:0) %0 >)>AO;M
Tam&i8n las !unciones creadas por el usuario pueden #ener su help, an"logo al ue #ienen las pro+
pias !unciones de MATLAB$ 0s#o se consigue de la siguien#e !orma= las primeras lCneas de comen+
#arios de cada !ichero de !uncin son muy impor#an#es, pues permi#en cons#ruir un help so&re esa
!uncin$ 0n o#ras pala&ras, cuando se #eclea en la ven#ana de comandos de MATLAB=
>> help mi,func
el programa responde escri&iendo las primeras lCneas del !ichero mi_func.m ue comien*an por el
car"c#er 'V(, es decir, ue son comen#arios$
%e es#as lCneas, #iene una impor#ancia par#icular la primera l+nea de comentarios 'llamada en oca+
siones lCnea P1($ 0n ella hay ue in#en#ar poner la in!ormacin m"s relevan#e so&re esa !uncin$ La
ra*n es ue e7is#e una !uncin, llamada loofor ue &usca una de#erminada pala&ra en cada prime+
ra lCnea de comen#ario de #odas las !unciones *.m$
Captulo 6: Programacin de MATLAB pgina 79
9$/$9$ +1LP %0 %;O0CTMO;M)
MATLAB permi#e ue los usuarios creen una ayuda general para #odas las !unciones ue es#"n en
un de#erminado direc#orio$ Aara ello se de&e crear en dicho direc#orio un !ichero llamado con!
tents.m$ A con#inuacin se mues#ra un !ichero #Cpico contents.m correspondien#e al direc#orio tool!
box-local de MATLAB=
% 4references.
%
% 5a#ed preferences files.
% startup % 6ser startup 7%file.
% finish % 6ser finish 7%file.
% matlabrc % 7aster startup 7%file.
% pathdef % 5earch path defaults.
% docopt % 8eb browser defaults.
% printopt % 4rinter defaults.
%
% 4reference commands.
% cedit % 5et command line editor 9e:s.
% terminal % 5et *raphics terminal t:pe.
%
% ;onfi*uration information.
% hostid % 7(<=(> ser#er host identification number.
% license % =icense number.
% #ersion % 7(<=(> #ersion number.
% 6tilities.
% userpath % 6ser en#ironment path.
% ;op:ri*ht 1?24%2&&2 <he 7ath8or9s, @nc.
% ABe#ision" 1.14 A ACate" 2&&23&D3&E 21"4F"&F A
Compru8&ese ue la in!ormacin an#erior es e7ac#amen#e la ue se imprime con el comando
>> help local
)i el !ichero contents.m no e7is#e, se lis#an las primeras lCneas de comen#arios 'lCneas P1( de #odas
las !unciones ue haya en ese direc#orio$ Aara ue el .elp de direc#orios !uncione correc#amen#e
hace !al#a ue ese direc#orio es#8 en el search path de MATLAB o ue sea el direc#orio ac#ual$
9$/$H$ )>B+,>:C;M:0)
Tradicionalmen#e MATLAB o&liga&a a crear un !ichero *.m di!eren#e por cada !uncin$ 0l nom&re
de la !uncin de&Ca coincidir con el nom&re del !ichero$ A par#ir de la versin <$0 se in#rodujeron las
sub!funciones, ue son !unciones adicionales de!inidas en un mismo !ichero *.m, con nom&res di+
!eren#es del nom&re del !ichero 'y del nom&re de la !uncin principal( y ue las sub!funciones s*lo
pueden ser llamadas por las funciones contenidas en ese fichero, resul#ando Finvisi&lesG para
o#ras !unciones e7#ernas$
A con#inuacin se mues#ra un ejemplo con#enido en un !ichero llamado mi_fun.m=
function y=mi,fun(ab)
y=subfun)(ab)*
function -=subfun)(y.)
-=subfun/(y.)*
function -=subfun/(y.)
-=y0.0/*
Aprenda Matlab 7. como !i e!tu"iera en Primero pgina 7:
9$/$U$ ,>:C;M:0) AO;LA%A)
Las !unciones privadas 'pri)ate( son !unciones ue no se pueden llamar desde cualuier o#ra !un+
cin, aunue se encuen#ren en el path o en el direc#orio ac#ual$ /*lo ciertas funciones est0n autori!
1adas a utili1arlas$ Las !unciones privadas se de!inen en su&+direc#orios ue se llaman pri)ate y
slo pueden ser llamadas por !unciones de!inidas en el direc#orio padre del su&+direc#orio pri)ate$
0n la &sueda de nom&res ue hace MATLAB cuando encuen#ra un nom&re en una e7presin, las
!unciones privadas se &uscan inmedia#amen#e despu8s de las su&+!unciones, y an#es ue las !uncio+
nes de #ipo general$
9$/$.$ ,>:C;M:0) W$A
Las !unciones *.p son !unciones *.m pre+compiladas con la !uncin pcode$ Aor de!ec#o el resul#ado
del comando pcode func.m es un !ichero func.p en el direc#orio ac#ual 'el !ichero func.m puede
es#ar en cualuier direc#orio del search path($ 0l comando pcode !inplace func.m crea el !ichero
func.p en el mismo direc#orio donde encuen#ra el !ichero func.m$ Aueden pasarse varios !icheros
*.m al comando pcode de una sola ve*$
Los !icheros *.p se ejecu#an algo m"s r"pidamen#e ue los *.m y permi#en ocul#ar el cdigo de los
!icheros A)C;; correspondien#es a las !unciones *.m de MATLAB$
9$/$10$LAO;ABL0) A0O);)T0:T0)
Las )ariables persistentes son varia&les locales de las !unciones 'per#enecen al espacio de #ra&ajo
de la !uncin y slo son visi&les en dicho espacio de #ra&ajo(, ue conser)an su )alor en#re dis#in#as
llamadas a la !uncin$ Aor de!ec#o, las varia&les locales de una !uncin se crean y des#ruyen cada
ve* ue se ejecu#a la !uncin$ Las varia&les persis#en#es se pueden de!inir en !unciones, pero no en
!icheros de comandos$ 0s ha&i#ual u#ili*ar para ellas le#ras maysculas$ Las varia&les se declaran
como persis#en#es u#ili*ando la pala&ra persistent seguida de los nom&res separados por &lancos,
como por ejemplo=
00 persistent $.=G;@C(C <@.74G
Las varia&les persistent se iniciali*an a la ma#ri* vacCa IJ y permanecen en memoria has#a ue se
hace clear de la !uncin o cuando se modi!ica el &ic;ero<M$ Aara evi#ar ue un !ichero+M se modi!i+
ue se puede u#ili*ar el comando mloc file.m, ue impide la modi!icacin del !ichero$ 0l comando
munloc des&louea el !ichero mien#ras ue la !uncin misloced permi#e sa&er si es#" &loueado o
no$
9$/$11$LAO;ABL0) SLMBAL0)
Las varia&les glo&ales son visi&les en #odas las !unciones 'y en el espacio de #ra&ajo &ase o general(
ue las declaran como #ales$ %ichas varia&les de declaran precedidas por la pala&ra global y separa+
das por &lancos, en la !orma=
"lobal 1#23#45!) 1#23#45!/
Como ya se ha apun#ado, es#as varia&les slo son visi&les en los espacios de #ra&ajo de las !unciones
ue las declaran como #ales 'y en el propio espacio de #ra&ajo &ase, si #am&i8n ahC han sido declara+
das como glo&ales($ Na se ha dicho #am&i8n ue se suele recurrir al cri#erio de u#ili*ar nom&res lar+
gos y con maysculas, para dis#inguirlas !"cilmen#e de las dem"s varia&les$
6.!. "eferencias de funci#n $function handles%
Las referencias de funci*n '&unction ;andle!( cons#i#uyen un nuevo mecanismo pera re!erirse a un
nom&re de !uncin, in#roducido en MATLAB 9$0$ 0n versiones an#eriores la nica !orma de re!erir+
Captulo 6: Programacin de MATLAB pgina 73
se a una !uncin era por medio del nombre$ T8ngase en cuen#a ue MATLAB, al igual ue o#ros
lenguajes de programacin como C1C22 y 3ava, admi#e funciones sobrecargadas 'o"erloaded &unc<
tion!(, es#o es, !unciones di!eren#es ue #ienen el mismo nom&re pero se di!erencian en#re sC por el
nmero y #ipo de los argumen#os$ Cuando un programa llama a una !uncin so&recargada, MA+
TLAB anali*a los #ipos de los argumen#os incluidos en la llamada y llama a la !uncin ue mejor se
adap#a a esos #ipos de argumen#os$ Las referencias de funci*n permi#en al programador un mayor
con#rol so&re la !uncin ue es e!ec#ivamen#e llamada y #ienen algunas o#ras ven#ajas ue se ver"n
en es#e apar#ado y en sus su&+apar#ados$
0l principal uso de las referencias de funci*n 'como de los nom&res de !uncin en versiones an#e+
riores( es el pasar a una !uncin el nom&re de o#ra !uncin, jun#o con sus argumen#os, para ue la
pueda ejecu#ar$ A es#as !unciones ue ejecu#an o#ras !unciones ue se les pasan como argumen#os se
les llama funciones de funci*n, y se anali*an con m"s de#alle en el apar#ado 9$10, a par#ir de la p"+
gina U/$ Aor ejemplo, MATLAB dispone de una !uncin llamada quad ue calcula la in#egral de!i+
nida de una !uncin en#re unos lCmi#es dados$ La !uncin quad es gen8rica, es#o es calcula, median+
#e m8#odos num8ricos, in#egrales de!inidas de una amplia variedad de !unciones, pero para ue pue+
da calcular dicha in#egral hay ue proporcionarle la !uncin a in#egrar$ Aor ejemplo, para calcular la
in#egral en#re 2 y de la !uncin seno(x) se puede u#ili*ar la sen#encia=
>> area=6uad('sin'7pi)
area =
/87777
La !uncin quad ejecu#a la !uncin sin por medio de la !uncin fe)al, ue #iene la siguien#e !orma
general=
fe&al(funcname ar") ar"/ ar"( 888)
donde funcname es una cadena de carac#eres con el nom&re de la !uncin a evaluar, y arg#, arg$,
arg,, $$$ son los argumen#os ue se le pasan a fe)al para ue se los pueda pasar a funcname$
A par#ir de la versin 9$0 de MATLAB ya no se pasa, a las !unciones de !uncin, el nom&re de la
!uncin como en el ejemplo an#erior, sino una referencia de funci*n o &unction ;andle$ %e #odas
!ormas, para man#ener la compa#i&ilidad con los programas desarrollados en versiones an#eriores, se
sigue admi#iendo ue se pase a fe)al el nom&re de la !uncin, pero es#e mecanismo ya no se sopor+
#ar" en versiones pos#eriores$ 0n MATLAB 9$W la !orma correc#a de ejecu#ar el ejemplo an#erior
serCa 'se e7plicar" con m"s de#alle a con#inuacin(=
fh=9sin*
area=6uad(fh7pi)*
donde la varia&le fh es una referencia de funci*n, ue es un nue)o tipo de dato de MATLAB, con
#odas las posi&ilidades y limi#aciones ue es#o supone$
9$D$1$ CO0AC;K: %0 O0,0O0:C;A) %0 ,>:C;K:
Na se ha comen#ado ue las referencias de funci*n son un nuevo #ipo de da#os de MATLAB 9$
>na re!erencia de !uncin se puede crear de dos !ormas di!eren#es=
1$ Median#e el operador 3 '4a#4 o 4arro&a4(
La re!erencia a la !uncin se crea precediendo el nom&re de la !uncin por el operador X$ 0l
resul#ado puede asignarse a una varia&le o pasarse como argumen#o a una !uncin$ 0jemplos=
fh = 9sin*
area = 6uad(9sin 7 pi)*
-$ Median#e la !uncin str$func
Aprenda Matlab 7. como !i e!tu"iera en Primero pgina 7#
La !uncin str$func reci&e como argumen#o una cadena de carac#eres con#eniendo el nom&re
de una !uncin y devuelve como valor de re#orno la re!erencia de !uncin$ >na de las ven#ajas
de es#a !uncin es ue puede reali*ar la conversin de un vec#or de celdas con los nom&res en
un vec#or de re!erencias de !uncin$ 0jemplos=
>> fh = str/func('sin')*
>> str/func(:'sin''cos''tan';)
ans =
9sin 9cos 9tan
>na carac#erCs#ica comn e impor#an#e de am&os m8#odos es ue se aplican solamen#e al nombre de
la funci*n, y no al nom&re de la !uncin precedido o cuali!icado por su path$ Adem"s los nom&res
de !uncin de&en #ener menos de /1 carac#eres$
9$D$-$ 0LAL>AC;K: %0 ,>:C;M:0) M0%;A:T0 O0,0O0:C;A)
La principal aplicacin de las referencias de funci*n es pasar in!ormacin de !unciones a o#ras !un+
ciones para ue au8llas puedan ser ejecu#adas por 8s#as$ Aara evaluar una re!erencia de !uncin
MATLAB u#ili*a la !uncin fe)al, ue se llama de la !orma siguien#e=
%r) r/ r( 888' = fe&al(fh ar") ar"/ ar"( 888)
donde fh es una re!erencia de !uncin y r#, r$, r,, $$$ y arg#, arg$, arg,, $$$ son respec#ivamen#e los
valores de re#orno y los argumen#os de la !uncin cuya re!erencia es fh$
)o&re la !uncin fe)al hay ue hacer dos o&servaciones=
1$ La re!erencia de !uncin fh de&e ser un escalar$ 0n o#ras pala&ras, no es posi&le evaluar un
array de re!erencias de !uncin con una sola llamada a fe)al$
-$ La !uncin fh ue se ejecu#a en el momen#o de la llamada a fe)al depende de la si#uacin en el
momen#o en ue se cre la re!erencia de !uncin, y no de la si#uacin en el momen#o de la lla+
mada a fe)al$ Aor ejemplo, si despu8s de crear la re!erencia fh se cam&ia de direc#orio la !un+
cin correspondien#e, en el momen#o de la ejecucin no ser" posi&le encon#rarlaE si despu8s de
crear fh se crea una nueva !uncin con el mismo nom&re, es#a !uncin no podr" nunca ser eje+
cu#ada por medio de la re!erencia creada previamen#e$
0l siguien#e ejemplo mues#ra cmo se puede ejecu#ar una sub!funci*n desde o#ra !uncin de!inida
en un !ichero *.m di!eren#e$ Oecu8rdese ue, en principio, las su&+!unciones slo son accesi&les
desde o#ras !unciones de!inidas en el mismo !ichero *.m$ )upngase ue se crea un !ichero llamado
pruebafh.m ue con#iene las siguien#es lCneas 'se de!ine una !uncin principal pruebafh ue se lla+
ma como el !ichero y una su&+!uncin subf(=
< fichero pruebafh8m
function mifh=pruebafh
mifh=9subf*
function #=subf(4 C)
#=40C*
M&s8rvese ue la !uncin principal pruebafh devuelve una re!erencia a la su&+!uncin subf$ 0n
principio slo pruebafh #iene acceso a subf y gracias a ese acceso puede crear la re!erencia mifh$
)in em&argo, una ve* ue la re!erencia a subf ha sido creada y devuel#a como valor de re#orno,
cualuier !uncin con acceso a pruebafh podr" #am&i8n acceder a la su&+!uncin subf$ 0l siguien#e
programa principal, de!inido en un !ichero pruebafh4ain.m, puede acceder a la su&+!uncin gra+
cias a la re!erencia de !uncin 'si se in#en#a acceder direc#amen#e se o&#iene un error($
Captulo 6: Programacin de MATLAB pgina 7,
% fichero pruebafh7ain.m
fh=pruebafh
(!rand+3,-
>!e:e+3,11&-
C=fe&al(fh#4)
% C!subf+(,>, % .BBGB
disp+)Ha he terminado),
0s#e ejemplo sencillo es &as#an#e signi!ica#ivo respec#o a los &ene!icios ue se pueden o&#ener de
las re!erencias de !uncin$
9$D$/$ ;:,MOMAC;K: CM:T0:;%A AMO >:A O0,0O0:C;A %0 ,>:C;K:$ ,>:C;M:0) )MBO0CAOSA%A)
>na re!erencia de !uncin puede con#ener in!ormacin de varias !unciones, en concre#o de #odas
auellas !unciones ue !ueran 4visi&les4 en el momen#o en el ue dicha re!erencia !ue creada$ Oe+
cu8rdese ue !unciones visi&les, adem"s de las !unciones in#rCnsecas de MATLAB 'built<in &unc<
tion!( son las !unciones ue es#"n de!inidas en el directorio actual y en los direc#orios de!inidos en
el path de MATLAB$
La !uncin functions permi#e o&#ener #oda la in!ormacin disponi&le de una re!erencia de !uncin$
M&s8rvese la es#ruc#ura salida del siguien#e ejemplo 'el campo methods es a su ve* una es#ruc#ura
ue puede mos#rarse por separado(=
>> info=functions(9deblan=)
function" )deblan9)
t:pe" )o#erloaded)
file" )c"ImatlabDpFItoolboxImatlabIstrfunIdeblan9)
methods" J1x1 structK
>> info8methods
ans !
cell" )c"ImatlabDpFItoolboxImatlabIstrfunILcellIdeblan9)
0n es#e caso concre#o se ha considerado la !uncin deblan, ue permi#e eliminar carac#eres en
&lanco en cadenas de carac#eres o en vec#oras de celdas con cadenas de carac#eres$ 0l valor de re+
#orno de la !uncin functions es una es#ruc#ura con los cua#ro campos siguien#es=
!unc#ion cadena de carac#eres con el nom&re de la !uncin a la ue corresponde la re!e+
rencia
#ype Cadena de carac#eres con uno de los siguien#es valores= =!imple=, =!ub&unction=,
=pri"ate=, =con!tructor= y =o"erloaded=$
!ile Cadena de carac#eres ue con#iene el nom&re del !ichero *.m en el ue es#" de+
!inida la !uncin o &ien el #e7#o QMATLAB built<in &unctionQ$
me#hods 0s#ruc#ura ue con#iene los paths de los !icheros *.m en los ue es#"n de!inidas
las !unciones so&recargadas ue se corresponden con es#a re!erencia$
0l argumen#o de la !uncin functions de&e ser una re!erencia de !uncin escalar 'no puede ser un
array de re!erencias de !uncin($
Los dis#in#os valores del campo t"pe #ienen los siguien#es signi!icados=
simple ,unciones in#rCnsecas no so&recargadas$
overloaded ,unciones so&recargadas$ )on las nicas ue #ienen campo methods$
cons#ruc#or Cons#ruc#ores relacionados con clases y o&je#os$
su&!unc#ion ,unciones de!inidas en un !ichero *.m de o#ra !uncin$
priva#e ,unciones privadas 'de!inidas en un su&direc#orio pri)ate($
Aprenda Matlab 7. como !i e!tu"iera en Primero pgina 76
Las funciones sobrecargadas 'o"erloaded( #ienen un in#er8s especial, pues son las nicas ue #ie+
nen el campo methods y las ue pueden dar origen a m"s di!icul#ades o pro&lemas$ %e modo an"lo+
go a o#ros lenguajes de programacin como C1C22 y 3ava, las !unciones so&recargadas de MA+
TLAB son !unciones ue #ienen el mismo nom&re, pero dis#in#os #ipos de argumen#os y dis#in#o
cdigo 'en o#ras pala&ras, !unciones di!eren#es ue slo coinciden en el nom&re($
Las !unciones default son las ue no #ienen argumen#os especiali*ados$ M#ras !unciones esperan
reci&ir un argumen#o de un #ipo m"s concre#o$ )alvo ue haya una !uncin especiali*ada cuyos ar+
gumen#os coincidan con los #ipos de la llamada, MATLAB u#ili*ar" la !uncin default$
9$D$D$ MTOM) A)A0CTM) %0 LA) O0,0O0:C;A) %0 ,>:C;K:
%e la misma manera ue una cadena de carac#eres pude ser conver#ida en una re!erencia de !uncin
por medio de la !uncin str$func, MATLAB dispone de la !uncin func$str ue reali*a la conver+
sin inversa$ Auede ser in#eresan#e conver#ir una re!erencia de !uncin en cadena de carac#eres para
cons#ruir mensajes de error en relacin con cons#rucciones tr"...catch$
M#ras !unciones ue pueden u#ili*arse en relacin con las re!erencias de !uncin son las siguien#es
'se presen#as median#e ejemplos(=
isa(una1ariable 'function,handle')
,uncin ue devuelve 414 404 segn una5ariable sea o no una re!erencia de !uncin$ 0s+
#a !uncin se podrCa u#ili*ar den#ro de una !uncin de !uncin para compro&ar ue el argu+
men#o ue indica la !uncin a ejecu#ar con fe)al ha llegado correc#amen#e$
ise6ual(unfh otrofh)
,uncin ue compara dos re!erencias a !uncin e indica si dan acceso e7ac#amen#e a los
mismos m8#odos o no$
Como las re!erencias de !uncin son varia&les es#"ndar de MATLAB, pueden guardarse y recupe+
rarse de una sesin a o#ra por medio de los comandos sa)e y load$ Pay ue #ener cuidado al u#ili*ar
re!erencias de !uncin creadas en sesiones an#eriores, porue si ha cam&iado el en#orno de #ra&ajo
en algo ue les a!ec#e se o&#endr" un error en #iempo de ejecucin$
9$D$<$ >T;L;%A% %0 LA) O0,0O0:C;A) %0 ,>:C;K:
La principal u#ilidad de las re!erencias de !uncin es el pasar in!ormacin de una !uncin a o#ras
!unciones ue la de&en poder ejecu#ar por medio de fe)al$ Algunas o#ras ven#ajas de las re!erencias
de !unciones son las siguien#es=
1$ )e pueden encon#rar #odas las !unciones con el mismo nom&re ue son visi&les en un de#er+
minado es#ado del programa$ %e es#a !orma se #iene m"s con#rol so&re la !uncin ue verda+
deramen#e se va a ejecu#ar$
-$ Acceder desde cualuier par#e de un programa a las !unciones privadas y a las su&+!unciones$
%e es#a !orma se puede reducir el nmero de !icheros *.m necesarios, pues muchas !unciones
se podr"n de!inir como su&+!unciones en un mismo !ichero$
/$ Mejorar la e!iciencia de las !unciones ue se u#ili*an repe#idamen#e, pues no es necesario &us+
car el !ichero *.m cada ve*$
D$ Las re!erencias de !uncin son, como se ha dicho, varia&les ordinarias de MATLAB ue pue+
den ser agrupadas en arrays de una o m"s dimensiones$
Captulo 6: Programacin de MATLAB pgina 77
9$D$9$ ,>:C;M:0) ;:L;:0
MATLAB permi#e de!inir !unciones a par#ir de e7presiones ma#em"#icas por medio de la !uncin
inline$ 0s#a !uncin #ra#a de averiguar in#eligen#emen#e cu"les son los argumen#os de la !uncin
inline, a par#ir del con#enido de la e7presin ma#em"#ica$ Aor de!ec#o se supone ue Q7Q es el ar+
gummen#o, aunue es #am&i8n posi&le de#erminarlos e7plCci#amen#e al llamar a inline$ Consid8ren+
se los siguien#es ejemplos=
00 f!inline+)expresin entre apstrofos),-
00 f!inline+)expresin), a1, a2, a3,- % los ar*umentos son )a1), )a2), )a3)
00 f!inline+)expresin), M,- % los ar*umentos son )x), )41), ..., )4M)
Las !unciones inline se llaman con el handle 'f en las sen#encias an#eriores( seguido de los argu+
men#os en#re par8n#esis$
9$D$H$ ,>:C;M:0) A:K:;MA)
Las !unciones annimas cons#i#uyen una !orma muy !le7i&le de crear !unciones so&re la marcha,
&ien en la lCnea de comandos, &ien en una lCnea cualuiera de una !uncin o de un !ichero *.m$ La
!orma general de las !unciones annimas es la siguien#e=
fhandle ! L+ar*umentos, expresin-
%espu8s de ser creada, la !uncin annima puede ser llamada a #rav8s del fhandle seguido de la
lis#a de argumen#os ac#uales en#re par8n#esis, o #am&i8n puede ser pasada a o#ra !uncin como ar+
gumen#o, #am&i8n por medio del fhandle$ Aor ejemplo, la siguien#e !uncin annima calcula el va+
lor del seno del "ngulo do&le=
seno(n*Coble ! L+an*, 21sin+and,.1cos+an*,-
Las !unciones annimas acceden a las varia&les del espacio de #ra&ajo en el ue son de!inidas y
crean en ese momen#o una copia de las varia&les ue u#ili*an$ 0l valor de dichas varia&les ya no se
ac#uali*aE slo los argumen#os pueden cam&iar de valor$ %e es#a !orma, las !unciones annimas
pueden ejecu#arse a rav8s del handle en o#ros espacios de #ra&ajo$
)i las !unciones annimas no #ienen argumen#os hay ue poner los par8n#esis vacCos, #an#o al de!i+
nirlas como al llamarlas$ Aor o#ra par#e, pueden #ener varios valores de re#orno cuando la e7presion
ue con#ienen devuelve varios valores$ )e pueden recoger #odos o slo algunos de es#os valores$
La nica limi#acin impor#an#e de las !unciones annimas es ue es#"n limi#adas a una 6nica ex!
presi*n ejecu#a&le de MATLAB$ Aor o#ra par#e, su uso no #iene m"s limi#aciones ue las del uso del
;andle de una !uncin cualuiera$
9$D$U$ ,>:C;M:0) A:;%A%A%A)
Las funciones anidadas 'ne!ted &unction!( son !unciones de!inidas den#ro de o#ras !unciones, las
llamadas funciones contenedoras$ Cuando se de!inen !unciones anidadas es imprescindi&le #ermi+
nar con una sen#encia end la de!inicin de cada una de las !unciones con#enidas en el !ichero *.m$
Las !unciones anidadas sirven para #ener un mayor y mejor con#rol so&re la visi&ilidad de las !un+
ciones 'u8 !uncin puede ser llamada y desde dnde(, asC como so&re la visi&ilidad ue dichas
!iunciones #ienen so&re las dis#in#as varia&les del espacio de #ra&ajo, incluyendo las ue no les han
sido pasadas como argumen#os$
>na !uncin puede con#ener varias !unciones anidadas al mismo nivel, y una !uncin anidada puede
#am&i8n ser con#enedora, es decir con#ener a su ve* una m"s !unciones anidadas$
A con#inuacin se mues#ra un ejemplo sencillo de ml#iples !unciones anidadas a varios niveles=
Aprenda Matlab 7. como !i e!tu"iera en Primero pgina 77
function (+ar*1,
...
function (a+a1,a2,
...
function (a1+,
...
end
....
end
function (b+,
...
function (b1+,
...
end
...
function (b2+,
...
end
end
....
end
...
Oeglas para llamar a las !unciones anidadas=
1$ >na !uncin anidada se puede llamar desde cualuier o#ra !uncin ue #enga acceso al handle$
-$ >na !uncin anidada se puede llamar direc#amen#e desde la !uncin del nivel inmedia#amen#e
superior$ Aor ejemplo, la !uncin A puede llamar a las !unciones Aa y Ab, pero no a las !uncio+
nes Ab1 y Ab2 ue es#"n dos niveles m"s a&ajo$
/$ >na !uncin anidada puede llamar a o#ras !unciones anidadas en la misma !uncin con#enedora
y al mismo nivel$ Aor ejemplo, la !uncin Aa puede llamar a la !uncin Ab, y la Ab1 a la Ab2$
D$ >na !uncin anidada puede llamar a #odas las ue es#"n por encima de ella en lCnea direc#a$ Aor
ejemplo, la !uncin Ab2 puede llamar a las !unciones A y Ab$ >na !uncin anidada no puede
llamar a las ue es#"n al mismo nivel en o#ra ramaE por ejemplo, Aa1 no pueede llamar a Ab2$
<$ Adem"s, cualuier !uncin anidada puede llamar a #odas las su&+!unciones de!inidas en el mis+
mo !ichero$
Oeglas para la visi&ilidad de las varia&les con su&+!unciones y !unciones anidadas=
1$ 0n general, las !unciones y su&+!unciones de!inidas en el mismo !ichero #ienen espacios de #ra+
&ajo di!eren#es$ Como consecuencia, las varia&les de!inidas en una !uncin son )ariables loca!
les ue no pueden ser vis#as por o#ras !unciones o su&+!unciones$
-$ Tam&i8n una !uncin anidada #iene su propio espacio de #ra&ajo, pero adem"s #iene acceso a
#odas las varia&les de!inidas por las !unciones ue es#"n por encima de ella en la jeraruCa de
!unciones anidadas$
/$ Tam&i8n las !unciones con#enedoras ven y pueden modi!icar las varia&les locales de!inidas en
sus !unciones anidadas, siempre ue de!inan o usen dichas varia&les$ Como regla general, una
varia&le usada o de!inida en una !uncin anidada per#enece al espacio de #ra&ajo de la !uncin
con#enedora m"s e7#erior ue de alguna manera accede a dicha varia&le$
D$ Como consecuencia de lo dicho, si una !uncin con#enedora no usa o de!ine una varia&le, pero
esa varia&le es de!inida por dos !unciones anidadas al mismo nivel en dicha !uncin, dichas va+
ria&les en las !unciones anidadas son realmen#e varia&les dis#in#as, pues al no ser usadas por la
!uncin con#enedora no se #ransmi#en a su espacio de #ra&ajo$
Captulo 6: Programacin de MATLAB pgina 78
<$ Las varia&les correspondien#es a los valores de re#orno de una !uncin anidada no per#enecen al
espacio de #ra&ajo de las !unciones con#enedoras ue las llaman$ Los valores d ere#orno de&en
ser recogidoa e7plCci#amen#e$
Oecu8rdese ue el handle de&e ser creado desde un pun#o del programa en el ue la !uncin es visi+
&le$ )in em&argo, es posi&le u#ili*arlo luego en o#ro pun#o desde el ue la !uncin ya no sea visi&le$
0s#as reglas se aplican #am&i8n a las !unciones anidadas, aunue con algunas peculiaridades$ 0n el
momen#o de la creacin del handle, las !unciones anidadas #ienen acceso a un espacio de #ra&ajo
ampliado con el de o#ras !unciones del !ichero *.m, segn se ha e7pues#o$ Aara ue es#a !uncin
pueda ser llamada a #rav8s del handle en o#ro lugar del programa, en el momen#o de la creacin del
handle se crea una copia de las varia&les de su espacio de #ra&ajo ampliadoE es#as copias son de #ipo
persistent y se conservan en#re llamadas$ )e recomienda ver los ejemplos en el .elp de MATLAB$
6.&. 'ntrada y salida de datos
Na se ha vis#o una !orma de reali*ar la en#rada in#erac#iva de da#os por medio de la !uncin input y
de imprimir resul#ados por medio de la !uncin disp$ Ahora se van a ver o#ras !ormas de in#ercam+
&iar da#os con o#ras aplicaciones$
9$<$1$ ;MAMOTAO %ATM) %0 MTOA) AAL;CAC;M:0)
Pay varias !ormas de pasar da#os de o#ras aplicaciones por ejemplo de 7xcel a MATLAB$ )e
pueden enumerar las siguien#es=
se puede u#ili*ar el 8op" y 9aste para copiar da#os de la aplicacin original y deposi#arlos en+
#re los corche#es de una ma#ri* o vec#or, en una lCnea de comandos de MATLAB$ Tiene el in+
convenien#e de ue es#os da#os no se pueden edi#ar$
se puede crear un !ichero *.m con un edi#or de #e7#os, con lo cual no e7is#en pro&lemas de
edicin$
es posi&le leer un flat file escri#o con carac#eres A)C;;$ >n &lat &ile es un !ichero con !ilas de
longi#ud cons#an#e separadas con :ntro, y varios da#os por !ila separados por blanco!$ 0s#os
!icheros pueden ser leCdos desde MATLAB con el comando load$ )i se ejecu#a load datos.txt
el con#enido del flat file se deposi#a en una ma#ri* con el nom&re datos$ Aor ejemplo, creando
un !ichero llamado flat.txt ue con#enga las lCneas=
23.4FD FD.&32 DE.2&2
3.E4? %?2.?&D 34.?1&
el comando #=load('flat8t-t') leer" es#os valores y los asignar" a la ma#ri* A$ Aara m"s
in!ormacin u#ili*ar help load$
el comando textread permi#e leer da#os de cualuier #ipo de un !ichero siempre ue es#8n con+
venien#emen#e separados$ Ler el .elp para m"s in!ormacin$
se pueden leer da#os de un !ichero con las !unciones fopen y fread 'ver apar#ados 9$9$1 y
9$9$/, en las p"ginas U0 y U1($
e7is#en #am&i8n o#ros m8#odos posi&les= escri&ir !unciones en C para #raducir a !orma#o *.mat
'y cargar despu8s con load(, crear un !ichero ejecu#a&le *.mex ue lea los da#os, e#c$ :o se ve+
r"n en es#os apun#es$
9$<$-$ 0YAMOTAO %ATM) A MTOA) AAL;CAC;M:0)
%e !orma an"loga, #am&i8n los resul#ados de MATLAB se pueden e7por#ar a o#ras aplicaciones
como &ord o 7xcel$
Aprenda Matlab 7. como !i e!tu"iera en Primero pgina 7
u#ili*ar el comando diar" para da#os de peue@o #ama@o 'ver apar#ado -$., en la p"gina -1(
u#ili*ar el comando sa)e con la opcin ;ascii 'ver apar#ado -$H, en la p"gina 1.(
u#ili*ar las !unciones de &ajo nivel fopen, fwrite y o#ras 'ver apar#ados 9$9$1 y 9$9$/, en las
p"ginas U0 y U1(
o#ros m8#odos ue no se ver"n auC= escri&ir su&ru#inas en C para #raducir de !orma#o *.mat
'guardando previamen#e con sa)e(, crear un !ichero ejecu#a&le *.mex ue escri&a los da#os,
e#c$
Pay ue se@alar ue los !icheros &inarios *.mat son #raspor#a&les en#re versiones de MATLAB en
dis#in#os #ipos de compu#adores, porue con#ienen in!ormacin so&re el #ipo de m"uina en el ;ea<
der del !ichero, y el programa reali*a la #rans!ormacin de modo au#om"#ico$ Los !icheros *.m son
de #ipo A)C;;, y por #an#o pueden ser leCdos por dis#in#os compu#adores sin pro&lemas de ningn
#ipo$
6.6. Lectura y escritura de ficheros
MATLAB dispone de !unciones de lec#ura1escri#ura an"logas a las del lenguaje C 'en las ue es#"n
inspiradas(, aunue con algunas di!erencias$ 0n general son versiones simpli!icadas con menos
opciones y posi&ilidades ue las correspondien#es !unciones de C$
9$9$1$ ,>:C;M:0) %.P13 N %CL.)1
0s#as !unciones sirven para a&rir y cerrar !icheros, respec#ivamen#e$ La !uncin fopen #iene la !orma
siguien#e=
%fite-to' = fopen('filename''c')
donde fi es un valor de re#orno ue sirve como iden#i!icador del !ichero, te(to es un mensaje para
caso de ue se produ*ca un error, y c es un car"c#er 'o dos( ue indica el #ipo de operacin ue se
desea reali*ar$ Las opciones m"s impor#an#es son las siguien#es=
QrQ lec#ura 'de read(
QZQ escri#ura reempla*ando 'de >rite(
QaQ escri#ura a con#inuacin 'de append(
Qr2Q lec#ura y escri#ura
Cuando por alguna ra*n el !ichero no puede ser a&ier#o, se devuelve un '+1($ 0n es#e caso el valor
de re#orno te(to puede proporcionar in!ormacin so&re el #ipo de error ue se ha producido '#am+
&i8n e7is#e una !uncin llamada ferror ue permi#e o&#ener in!ormacin so&re los errores$ 0n el
.elp del programa se puede ver cmo u#ili*ar es#a !uncin($
%espu8s de reali*ar las operaciones de lec#ura y escri#ura deseadas, el !ichero se puede cerrar con la
!uncin close en la !orma siguien#e=
st = fclose(fi)
donde st es un valor de re#orno para posi&les condiciones de error$ )i se uieren cerrar a la ve* #o+
dos los !icheros a&ier#os puede u#ili*arse el comando=
st = close('all')
9$9$-$ ,>:C;M:0) %)CA3%, ))CA3%, %P/$3T% N )P/$3T%
0s#as !unciones permi#en leer y escri&ir en !icheros A)C;;, es decir, en !icheros !orma#eados$ La
!orma general de la !uncin fscanf es la siguien#e=
%&ar)&ar/888' = fscanf(fi'cadena de control'si.e)
Captulo 6: Programacin de MATLAB pgina 79
donde fi es el iden#i!icador del !ichero 'devuel#o por la !uncin fopen(, y si)e es un argumen#o op+
cional ue puede indicar el #ama@o del vec#or o ma#ri* a leer$ M&s8rvese o#ra di!erencia con C= las
varia&les leCdas se devuelven como valor de re#orno y no como argumen#os pasados por re!erencia
'precedidos por el car"c#er [($ La cadena de control va encerrada en#re aps#ro!os simples, y con+
#iene los especi!icadores de !orma#o para las varia&les=
Vs para cadenas de carac#eres
Vd para varia&les en#eras
V! para varia&les de pun#o !lo#an#e
Vl! para varia&les de do&le precisin
La !uncin sscanf es similar a fscanf pero la en#rada de carac#eres no proviene de un !ichero sino de
una cadena de carac#eres$
,inalmen#e, la !uncin fprintf dirige su salida !orma#eada hacia el !ichero indicado por el iden#i!i+
cador$ )u !orma general es=
fprintf(fi'cadena de control'&ar)&ar/888)
\s#a es la !uncin m"s parecida a su homloga de C$ La cadena de con#rol con#iene los !orma#os de
escri#ura, ue son similares a los de C, como mues#ran los ejemplos siguien#es=
fprintf(fi'!l nmero de ecuaciones es> <d?n'n)
fprintf(fi'!l determinante es> <lf)78$?n'n)
%e !orma an"loga, la !uncin sprintf convier#e su resul#ado en una cadena de carac#eres ue devuel+
ve como valor de re#orno, en ve* de enviarlo a un !ichero$ L8ase un ejemplo=
resultado = sprintf('!l cuadrado de <f es <)/8$f?n'nn@n)
donde resultado es una cadena de carac#eres$ 0s#a !uncin cons#i#uye el m8#odo m"s general de
conver#ir nmeros en cadenas de carac#eres, por ejemplo para ponerlos como #C#ulos de !iguras$
9$9$/$ ,>:C;M:0) %/1A6 N %*/$T1
0s#as !unciones son an"logas a fscanf y fprintf, pero en ve* de leer o escri&ir en un !ichero de #e7#o
'A)C;;(, lo hacen en un &ic;ero binario, no legi&le direc#amen#e por el usuario$ Aunue dichos !i+
cheros no se pueden leer y1o modi!icar con un edi#or de #e7#os, #ienen la ven#aja de ue las opera+
ciones de lec#ura y escri#ura son mucho m"s r"pidas, e!icien#es y precisas 'no se pierden decimales
al escri&ir($ 0s#o es par#icularmen#e signi!ica#ivo para grandes !icheros de da#os$ Aara m"s in!orma+
cin so&re es#as !unciones se puede u#ili*ar el help$
9$9$D$ ,;CP0OM) %0 ACC0)M %;O0CTM
%e ordinario los !icheros de disco se leen y escri&en secuencialmen#e, es decir, de principio a !inal,
sin volver nunca hacia a#r"s ni reali*ar sal#os$ )in em&argo, a veces in#eresa acceder a un !ichero de
un modo ar&i#rario, sin ningn orden prees#a&lecido$ 0s#o se puede conseguir con las !unciones ftell
y fsee$
0n cada momen#o, hay una especie de cur!or ue indica en u8 par#e del !ichero se es#" posiciona+
do$ La !uncin fsee permi#e mover es#e cursor hacia delan#e o hacia a#r"s, respec#o a la posicin
ac#ual 'Qco!Q(, respec#o al principio 'Q&o!Q( o respec#o al !inal del !ichero 'Qeo!Q($ La !uncin ftell indica
en u8 posicin es#" el cursor$ )i alguna ve* se necesi#a u#ili*ar es#e #ipo de acceso a disco, se puede
&uscar m"s in!ormacin por medio del help$
Aprenda Matlab 7. como !i e!tu"iera en Primero pgina 7:
6.*. "ecoendaciones +enerales de ,ro+raaci#n
Las !unciones vec#oriales de MATLAB son mucho m"s r"pidas ue sus con#rapar#idas escalares$ 0n
la medida de lo posi&le es muy in#eresan#e vec#ori*ar los algori#mos de c"lculo, es decir, reali*arlos
con vec#ores y ma#rices, y no con varia&les escalares den#ro de &ucles$
Aunue los vec#ores y ma#rices pueden ir creciendo a medida ue se necesi#a, es mucho m"s r"pido
reservarles #oda la memoria necesaria al comien*o del programa$ )e puede u#ili*ar para ello la !un+
cin 1eros$ Adem"s de es#e modo la memoria reservada es con#igua$
0s impor#an#e u#ili*ar el profile para conocer en u8 sen#encias de cada !uncin se gas#a la mayor
par#e del #iempo de c"lculo$ %e es#a !orma se descu&ren Fcuellos de &o#ellaG y se pueden desaroollar
aplicaciones mucho m"s e!icien#es$
Conviene desarrollar los programas incremen#almen#e, compro&ando cada !uncin o componen#e
ue se a@ade$ %e es#a !orma siempre se cons#ruye so&re algo ue ya ha sido compro&ado y ue !un+
ciona= si aparece algn error, lo m"s pro&a&le es ue se de&a a lo l#imo ue se ha a@adido, y de
es#a manera la &sueda de errores es#" aco#ada y es mucho m"s sencilla$ Oecu8rdese ue de ordi+
nario el #iempo de correccin de errores en un programa puede ser D < veces superior al #iempo de
programacin$ 0l debugger es una herramien#a muy #il a la hora de acor#ar ese #iempo de pues#a a
pun#o$
0n es#e mismo sen#ido, puede decirse ue pensar &ien las cosas al programar 'so&re una hoja de
papel en &lanco, mejor ue so&re la pan#alla del AC( siempre es ren#a&le, porue se disminuye m"s
ue proporcionalmen#e el #iempo de depuracin y eliminacin de errores$
M#ro o&je#ivo de la programacin de&e ser man#ener el cdigo lo m"s sencillo y ordenado posi&le$
Al pensar en cmo hacer un programa o en cmo reali*ar de#erminada #area es convenien#e pensar
siempre primero en la solucin m"s sencilla, y luego plan#earse o#ras cues#iones como la e!iciencia$
,inalmen#e, el cdigo de&e ser escri#o de una manera clara y ordenada, in#roduciendo comen#arios,
u#ili*ando lCneas en &lanco para separar las dis#in#as par#es del programa, sangrando las lCneas para
ver claramen#e el rango de las &i!urcaciones y &ucles, u#ili*ando nom&res de varia&les ue recuer+
den al signi!icado de la magni#ud !Csica correspondien#es, e#c$
0n cualuier caso, la mejor !orma 'y la nica( de aprender a programar es programando$
6.-. Acelerador ./0 $.ust /n 0ie% en 1A0LAB
La versin 9$< de MATLAB incorpor por primera ve* un acelerador para los !icheros *.m, ue
permi#e acercarse a las velocidades de o#ros lenguajes de programacin como ,or#ran y C1C22$
0s impor#an#e sa&er u8 #ipo de programas pueden ser acelerados y cu"les no lo son$ 0n principio
MATLAB acelera los &ucles de los !icheros *.m ue no con#ienen cier#o #ipo de sen#encias$ M"s en
concre#o, se pueden o!recer las siguien#es recomendaciones pr"c#icas=
1$ :o u#ili*ar es#ruc#uras, vec#ores de celdas, clases ni llamadas a !uncin por medio de re!eren+
cias$
-$ :o u#ili*ar hiperma#rices con m"s de #res dimensiones$
/$ >#ili*ar slo llamadas a !unciones na#ivas de MATLAB '!unciones compiladas, no de!inidas
por medio de !icheros *.m o !icheros M0Y($
D$ :o u#ili*ar varia&les ue cam&ian de #ipo a lo largo de la ejecucin 'por ejemplo, una varia&le
ue primero es una cadena de carac#eres y luego pasa a ser una ma#ri* real($
Captulo 6: Programacin de MATLAB pgina 73
<$ :o u#ili*ar las varia&les i y1o j con nmeros complejos como si !ueran varia&les normales 'por
ejemplo, no u#ili*ar 3*i, sino 3i($
9$ :o u#ili*ar vec#ores y1o ma#rices ue crecen a lo largo de la ejecucin del programa$ 0s mu+
cho mejor reservar previamen#e #oda la memoria necesaria median#e la !uncin 1eros, ones o
euivalen#e$
6.2. Llaada a coandos del sistea o,erativo y a otras funciones e(ternas
0s#ando en la ven#ana de comandos de MATLAB, se pueden ejecu#ar comandos de M)+%M) pre+
cedi8ndolos por el car"c#er '](, como por ejemplo=
>> Aedit fichero)8m
)i el comando va seguido por el car"c#er ampersand '[( el comando se ejecu#a en F&ac^groundG, es
decir, se recupera el con#rol del programa sin esperar ue el comando #ermine de ejecu#arse$ Aor
ejemplo, para arrancar <otepad en &ac^ground,
>> Anotepad B
07is#e #am&i8n la posi&ilidad de arrancar una aplicacin y dejarla iconi*ada$ 0s#o se hace pos#po+
niendo el car"c#er &arra ver#ical '_(, como por ejemplo en el comando=
>> Anotepad C
Algunos comandos de MATLAB reali*an la misma !uncin ue los comandos an"logos del sis#ema
opera#ivo M)+%M), con lo ue se puede evi#ar u#ili*ar el operador ']($ Algunos de es#os comandos
son los siguien#es=
dir con#enido del direc#orio ac#ual Zha#
!icheros *.m en el direc#orio ac#ual
dele#e !ilename &orra el !ichero llamado filename
m^dir'nd( crea un su&+direc#orio con el nom&re nd
copy!ile'sc, ds#( copia el !ichero sc en el !ichero dst
#ype !ile$#7# imprime por la pan#alla el con#enido del !ichero de #e7#o file.txt
cd cam&iar de direc#orio ac#ivo
pZd mues#ra el pa#h del direc#orio ac#ual
Zhich !unc locali*a una !uncin llamada func
loo^!or pala&ra &usca palabra en #odas las primeras lCneas de los !icheros *.m
6.13. Funciones de funci#n
Como ya se ha comen#ado al ha&lar de las re!erencias de !uncin, en MATLAB e7is#en !unciones a
las ue hay ue pasar como argumen#o el nom&re de o#ras !unciones, para ue puedan ser llamadas
desde dicha !uncin$ AsC sucede por ejemplo si se desea calcular la in#egral de!inida de una !uncin,
resolver una ecuacin no lineal, o in#egrar num8ricamen#e una ecuacin di!erencial ordinaria 'pro+
&lema de valor inicial($ 0s#os ser"n los #res casos de gran impor#ancia pr"c#ica ue se van a ver a
con#inuacin$ )e comen*ar" por medio de un ejemplo, u#ili*ando una !uncin llamada prueba ue
se va a de!inir en un !ichero llamado prueba.m$
Aprenda Matlab 7. como !i e!tu"iera en Primero pgina 7#
Aara de!inir es#a !uncin, se de&e elegir =:>7?<ew?4!=ile en el men de MATLAB$ )i las cosas
es#"n 4en orden4 se a&rir" el 7ditor@'ebugger para
ue se pueda edi#ar ese !ichero$ >na ve* a&ier#o el
7ditor, se de&en #eclear las - lCneas siguien#es=
function y=prueba(-)
y = )8D((-+8()8E/087))0)8D888
((-+8F)8E/087$)+G*
guard"ndolo despu8s con el nom&re de prueba.m$ La
de!inicin de !unciones se ha vis#o con de#alle en el
apar#ado 9$/$-, a par#ir de la p"gina 9U$ 0l !ichero
an#erior ha de!inido una nueva !uncin ue puede ser
u#ili*ada como cualuier o#ra de las !unciones de
MATLAB$ An#es de seguir adelan#e, conviene ver el
aspec#o ue #iene es#a !uncin ue se aca&a de crear$
Aara di&ujar la !uncin prueba, #ecl8ense los siguien+
#es comandos=
>> -=+)>78)>/*
>> plot(-prueba(-))
,igura /1$ ,uncin Fprue&aG$
0l resul#ado aparece en la ,igura /1$ Na se es#" en condiciones de in#en#ar hacer c"lculos y prue&as
con es#a !uncin$
9$10$1$;:T0SOAC;K: :>M\O;CA %0 ,>:C;M:0)
Lo primero ue se va a hacer es calcular la in#egral de!inida de es#a !uncin en#re dos valores de la
a&scisa ($ 0n ingl8s, al c"lculo num8rico de in#egrales de!inidas se le llama ?uadrature$ )a&iendo
eso, no resul#a e7#ra@o el comando con el cual se calcula el "rea comprendida &ajo la !uncin en#re
los pun#os 0 y 1 'o&s8rvese ue la re!erencia de la !uncin a in#egrar se pasa por medio del operador
X precediendo al nom&re de la !uncin$ Tam&i8n podrCa crearse una varia&le para ello(=
>> area = 6uad(9prueba 7 ))
area !
2?.2F23
)i se #eclea help quad se puede o&#ener m"s de in!ormacin so&re es#a !uncin, incluyendo el m8+
#odo u#ili*ado ')imp!on( y la !orma de con#rolar el error de la in#egracin$
La !uncin quadl() u#ili*a un m8#odo de orden superior 'Lobatto(, mien#ras ue la !uncin
dblquad() reali*a in#egrales de!inidas do&les y la !uncin triplequad() reali*a in#egrales de volu+
men$ Ler el .elp o los manuales online para m"s in!ormacin$
9$10$-$0C>AC;M:0) :M L;:0AL0) N MAT;M;`AC;K:
%espu8s de #odo, calcular in#egrales de!inidas no es #an di!Ccil$ M"s di!Ccil es desde luego calcular
las raCces de ecuaciones no lineales, y el mCnimo o los mCnimos de una !uncin$ MATLAB dispone
de las #res !unciones siguien#es=
!*ero calcula un cero o una raC* de una !uncin de una varia&le
!min&nd calcula el mCnimo de una !uncin de una varia&le
!minsearch calcula el mCnimo de una !uncin de varias varia&les
op#imse# permi#e es#a&lecer los par"me#ros del proceso de c"lculo
)e empe*ar" con el c"lculo de raCces$ %el gr"!ico de la !uncin prueba en#re +1 y - resul#a eviden#e
ue dicha !uncin #iene dos raCces en ese in#ervalo$ La !uncin f1ero calcula una y se con!orma=
Captulo 6: Programacin de MATLAB pgina 7,
aCu"l es la ue calculab Aues depende de un par"me#ro o argumen#o ue indica un pun#o de par#ida
para &uscar la raC*$ L8anse los siguien#es comandos y resul#ados=
>> f.ero(9prueba +8H)
ans !
%&.131D
>> f.ero(9prueba /)
ans !
1.2??F
0n el primer caso se ha dicho al programa ue empiece a &uscar en el pun#o +0$< y la solucin en+
con#rada ha sido +0$1/19$ 0n el segundo caso ha empe*ado a &uscar en el pun#o de a&scisa - y ha
encon#rado o#ra raC* en el pun#o 1$-..<$ )e ven claras las limi#aciones de es#a !uncin$
La !uncin f1ero() #iene #am&i8n o#ras !ormas in#eresan#es=
!*ero'Xprue&a, I71,7-J( calcula una raC* en el in#ervalo 71+7-$ 0s necesario ue la !un+
cin #enga dis#in#o signo en los e7#remos del in#ervalo$
!*ero'Xprue&a, 7, op#ions( calcula la raC* m"s pr7ima a ( con cier#as opciones de!inidas
en la es#ruc#ura o,tions$ 0s#a es#ruc#ura se crea con la !uncin
optimset$
La !uncin optimset #iene la siguien#e !orma general=
options ! optimset+)param1),#al1,)param2),#al2,...
en la ue se indican los nom&res de los par"me#ros u opciones ue se desean modi!icar y los valores
ue se desea dar para cada uno de dichos par"me#ros$ >na segunda !orma general es=
options ! optimset+oldopts, )param1),#al1,)param2),#al2,...,
en la ue se o&#ienen unas nuevas opciones modi!icando unas opciones an#eriores con una serie de
parejas nombre<"alor de par"me#ros$
07is#en muchas opciones ue pueden ser de!inidas por medio de la !uncin optimset$ Algunas de las
m"s carac#erCs#icas son las siguien#es 'las dos primeras es#"n dirigidas a evi#ar procesos i#era#ivos
ue no aca&en nunca y la #ercera a con#rolar la precisin en los c"lculos(=
Ma7,un0vals m"7imo nmero de evaluaciones de !uncin permi#idas
Ma7;#er m"7imo nmero de i#eraciones
TolY error m"7imo permi#ido en la a&scisa de la raC*
Ahora se va a calcular el mCnimo de la !uncin prueba$ %e!Cnase una !uncin llamada prueba$ ue
sea prueba cam&iada de signo, y #r"#ese de reproducir en el AC los siguien#es comandos y resul#a+
dos 'para calcular m"7imos con fmin &as#arCa con cam&iar el signo de la !uncin(=
>> plot(-prueba/(-))
>> fminbnd(9prueba/ +)/)
ans !
&.3&&4
>> fminbnd(9prueba/ 78H))
ans !
&.2?2E
Tam&i8n a la !uncin fminbnd se le puede pasar la es#ruc#ura options$ Aor ejemplo, para !ijar un
error de 10
+0U
se puede proceder del siguien#e modo=
>> options=optimset('TolI' )e+7J)*
>> fminbnd(9prueba/ 78H) options)
Aprenda Matlab 7. como !i e!tu"iera en Primero pgina 76
2
m
mg
0n cualuier caso, es impor#an#e o&servar ue para calcular las raCces o los valores mCnimos de una
!uncin, hay ue pasar el nom&re de es#a !uncin como argumen#o a la !uncin de MATLAB ue va
a hacer los c"lculos$ 0n es#o consis#e el concep#o de funci*n de funci*n$
MATLAB #iene un toolbo@ o paue#e especial 'ue de&e ser aduirido apar#e(( con muchas m"s
!unciones orien#adas a la optimiAacin, es decir al c"lculo de valores mCnimos de !unciones, con o
sin res#ricciones$
9$10$/$;:T0SOAC;K: :>M\O;CA %0 0C>AC;M:0) %;,0O0:C;AL0) MO%;:AO;A)
0s#e es o#ro campo en el ue las capacidades de MATLAB pueden resul#ar de gran u#ilidad a los
ingenieros o !u#uros ingenieros in#eresados en la simulaci*n$ MATLAB es capa* de calcular la evo+
lucin en el #iempo de sis#emas de ecuaciones di!erenciales ordinarias de primer orden, lineales y no
lineales$ Aor el momen#o se supondr" ue las ecuaciones di!erenciales se pueden escri&ir en la !or+
ma=
y = f
(
yBt
) 'H(
donde t es la varia&le escalar, y #an#o y como su derivada son vec#ores$ >n ejemplo #Cpico puede ser
el tiro parab*lico, considerando una resis#encia del aire proporcional al cuadrado de la velocidad$
)e supone ue dicha !uer*a responde a la siguien#e e7presin vec#orial=

%

@

@
= c
( @
-
+ -
-
)

'U(

%
-

donde c es una cons#an#e conocida$ Las ecuaciones di!erenciales del movimien#o ser"n=

@

=
1

0

c
(
@
-
+ -
-
)

@

'.(
pero 8s#e es un sis#ema de - ecuaciones di!erenciales de orden -$ Aara poderlo in#egrar de&e #ener la
!orma del sis#ema 'H(, y para ello se va a #ras!ormar en un sis#ema de D ecuaciones di!erenciales de
primer orden, de la !orma siguien#e=
u

0

u


" g
c

=

(
u
-
+ "
-
)
"

'10(


@


"

MATLAB dispone de varias !unciones para in#egrar sis#emas de ecuaciones di!erenciales ordinarias
de primer orden, en#re ellas ode$,, ue u#ili*a el m8#odo de /unge<2utta de segundo1#ercer orden, y
odeAB, ue u#ili*a el m8#odo de /unge<2utta<%e;lberg de cuar#o1uin#o orden$ Am&as e7igen al
usuario escri&ir una !uncin ue calcule las derivadas a par#ir del vec#or de varia&les, en la !orma
indicada por la ecuacin 'H($
Cree con el 7ditor?'ebugger un !ichero llamado tiropar.m ue con#enga las siguien#es lCneas=
function deri&=tiropar(ty)
Aprenda Matlab 7. como !i e!tu"iera en Primero pgina 76
fac=+(7877)D)87)@s6rt((y())E/0y(/)E/))*
deri&=.eros($))*
deri&())=fac@y())*
deri&(/)=fac@y(/)+F8J*
deri&(()=y())*
deri&($)=y(/)*
Captulo 6: Programacin de MATLAB pgina 77
0n el programa an#erior se han supues#o unas cons#an#es con los valores de c?0$001, m?1 y g?.$U$
,al#a !ijar los valores iniciales de posicin y velocidad$ )e supondr" ue el proyec#il par#e del ori+
gen con una velocidad de 100 m1seg y con un "ngulo de /0T, lo ue conduce a los valores iniciales
siguien#es= u'0(?100Wcos'pi19(, "'0(?100Wsin'pi19(, @'0(?0, -'0(?0$ Los comandos para reali*ar la
in#egracin son los siguien#es 'se suponen agrupados en un !ichero tiropar4ain.m(=
% fichero tiropar7ain.m
% inter#alo de inte*racin
tspan=%7F'*
% condiciones iniciales
y7=%)77@cos(piDG) )77@sin(piDG) 7 7''*
% llamar a la funcin de inte*racin numNrica
%tK'=ode$H(9tiropartspany7)*
% dibu'o de la altura en funcin del tiempo
plot+t,H+",4,,, *rid
disp+)Ha he terminado),
0n es#os comandos ts,an es un vec#or ue de!ine el
in#ervalo #emporal de in#egracin$ 0s muy impor#an#e
ue en la !uncin odeAB, el vec#or de condiciones ini+
ciales y3 sea un vec#or columna$ 0l vec#or t devuel#o
por odeAB con#iene los valores del #iempo para los cua+
les se ha calculado la posicin y velocidad$ %ichos va+
lores son con#rolados por la !uncin odeAB y no por el
usuario, por lo ue de ordinario no es#ar"n igualmen#e
espaciados$ La ma#ri* de resul#ados 4 con#iene cua#ro
columnas 'las dos velocidades y las dos coordenadas de
cada posicin( y #an#as !ilas como elemen#os #iene el
vec#or t$ 0n la ,igura /- se mues#ra el resul#ado del
ejemplo an#erior 'posicin ver#ical en !uncin del #iem+
po($
MATLAB dispone de varias !unciones para la in#egra+
,igura /-$ Tiro para&lico 'posicin ver#ical
en !uncin del #iempo($
cin de sis#emas de ecuaciones di!erenciales ordinarias$ )e pueden ci#ar las siguien#es, clasi!icadas
segn una carac#erCs#ica de las ecuaciones ue se desea in#egrar=
)is#emas no+rCgidos ode$,, odeAB y ode##,
)is#emas rCgidos ode#Bs, ode$,s, od$/# y ode$,tb
La rigide1 '!ti&&ne!!, en la li#era#ura inglesa( es una carac#erCs#ica de muchos sis#emas de ecuaciones
di!erenciales ordinarias ue aparecen en la pr"c#ica y ue los hace m"s di!Cciles de resolver$ >na
e7plicacin de#allada de es#a carac#erCs#ica e7cede la !inalidad de es#e manual, pero sC se puede dar
una muy &reve e7plicacin$
Muchos in#egradores num8ricos es#"n &asados en !rmulas ue permi#en predecir el valor de la !un+
cin en t5t a par#ir del valor de la !uncin y de su derivada en el ins#an#e t y an#eriores=
y
t +t
=
&
(
y
t
, y
t t
,$$$, y
t
, y
t t
,$$$, t
)
'11(
A es#os in#egradores se les llama integradores expl+citos$ Todo lo ue necesi#an es ue el usuario
programe una !uncin ue calcule la derivada en la !orma indicada en la ecuacin 'H($
0n la solucin de un sis#ema de ecuaciones di!erenciales ordinarias aparecen com&inadas diversas
componen#es oscila#orias '#ipo seno, coseno o similar($ Algunas de es#as componen#es oscilan m"s
r"pidamen#e ue o#ras '#ienen una !recuencia m"s elevada($ Los pro&lemas r+gidos o stiff son aue+
llos en cuya solucin par#icipan componen#es de !recuencias muy di!eren#es 'muy al#as y muy &a+
Aprenda Matlab 7. como !i e!tu"iera en Primero pgina 77
jas($ Todos los in#egradores de MATLAB #ienen con#rol au#om"#ico del error$ cuiere es#o decir ue
el usuario !ija el error ue es#" dispues#o a admi#ir en la solucin y MATLAB ajus#a el paso de la
in#egracin para conseguir ese error$ Los in#egradores e7plCci#os de#ec#an la posi&le presencia de
componen#es de al#a !recuencia en la solucin y #ra#an de adap#ar a ellas su paso, ue se hace dema+
siado peue@o y #ermina por de#ener la in#egracin$
Los integradores impl+citos son mucho m"s apropiados para los pro&lemas stiff$ 0n lugar de u#ili*ar
!rmulas del #ipo de la ecuacin '11( u#ili*an !rmulas del #ipo=
y
t +t
=
&
(
y
t +t
, y
t
, y
t t
,$$$, y
t +t
, y
t
, y
t
t
,$$$, t
)
'1-(
0l pro&lema con la e7presin '1-( es ue para calcular la !uncin en t5t hace uso de la derivada en
ese mismo ins#an#e, ue no puede ser conocida si no se conoce la !uncin$ 0so uiere decir ue el
sis#ema '1-( es un sistema de ecuaciones no lineales ue hay ue resolver i#era#ivamen#e$ Los sis+
#emas de ecuaciones no lineales se resuelven mucho m"s r"pidamen#e si se conoce la derivada de la
!uncin 'un ejemplo es el m8#odo de 3e>ton</ap;!on($ Los in#egradores stiff de MATLAB son
capaces de calcular es#a derivada num8ricamen#e 'por di!erencias !ini#as(, pero son mucho m"s e!i+
cien#es si el usuario es capa* de escri&ir una segunda !uncin ue les d8 es#a derivada$ 0s#a deriva+
da, ue en realidad es una ma#ri* de derivadas, es la Cacobiana$ Los in#egradores stiff, adem"s de la
ecuacin 'H(, permi#en para el sis#ema de ecuaciones di!erenciales una !orma algo m"s especiali*a+
da=
1'y, t(y 6 f 'y7 t( =
3
'1/(
en cuyo caso el usuario #am&i8n #iene ue proporcionar una !uncin ue calcule la ma#ri* 1$y7t%$ La
ecuacin '1/( represen#a un gran nmero de casos pr"c#icos, por ejemplo los ue surgen de las
ecuaciones di!erenciales del movimien#o en Mec"nica$
La !orma m"s &"sica para #odos los in#egradores de MATLAB es la siguien#e=
%t K' = sol&ername(fh tspan y7)
donde fh es una re!erencia de la !uncin ue permi#e calcular la derivada segn la e7presin 'H(,
ts,an puede ser un vec#or de dos elemen#os Itini7 tfinalJ ue represen#an el comien*o y el !in de la
in#egracin o un vec#or de #iempos Itini8tste,8tfinalJ en los cuales se desea ue MATLAB devuelva
resul#ados, e y3 es un vec#or columna con los valores iniciales$ Como resul#ado se o&#iene el vec#or
t de #iempos en los ue se dan resul#ados y una ma#ri* 4 con #an#as !ilas como #iempos de salida y
ue represen#an cada una de ellas la salida en el correspondien#e ins#an#e de #iempo$
>na !orma m"s ela&orada de llamar a los in#egradores de MATLAB es la siguien#e=
%t K' = sol&ername(fh tspan y7 options)
donde options es una es#ruc#ura similar a la vis#a en el apar#ado an#erior para el c"lculo de raCces y
mCnimos de !unciones$ 0n es#e caso la es#ruc#ura options 'ue es di!eren#e de la an#erior, aunue se
es#8 u#ili*ando el mismo nom&re( se de#ermina por medio de la !uncin odeset, ue admi#e las !or+
mas siguien#es=
options = odeset('param)' &al)'param/' &al/ 888)*
options = odeset(oldopt 'param)' &al)'param/' &al/ 888)*
0n#re los par"me#ros u opciones m"s impor#an#es se pueden ci#ar los siguien#es 'se puede o&#ener
m"s in!ormacin so&re ellos consul#ando odeset en el .elp$ Los parmetro! en cur!i"a ser"n u#ili+
*ados o e7plicados en los ejemplos ue siguen(=
Aara el error /elTol , Ab!Tol, :ormCon#rol
Aara el paso ;ni#ial)#ep, Ma7)#ep
Captulo 6: Programacin de MATLAB pgina 78
Aara la ma#ri* M Ma!!, M!tate6ependence, M"Pattern, Mass)ingular e ;ni#ial)lope
Aara el 3aco&iano Cacobian, CPattern, DectoriAed
Aara la salida .utput%cn, .utput)el, Oe!ine, )tat!
A con#inuacin se va a repe#ir el e(emplo de tiro parab*lico presen#ado al comien*o de es#a )eccin
u#ili*ando el in#egrador implCci#o ode#Bs con algunas opciones modi!icadas$ Aara ello la ecuacin
'10( se va a re+escri&ir en la !orma de la ecuacin '1/(, resul#ando=

m 0 0 0

u


0

u



0 m 0 0

"

=

mg

c
(
u
-
+ "
-
)

"

'1D(
0 0 1 0

@


u

0




0 0 0 1


-


"

0n es#e caso el programa principal se ha denominado tiropar4ain$ y #iene la siguien#e !orma=


< fichero tiroparLain/8m
clear all, close all
t&!&- tf!1&- npoints!F1-
:&!J1&&1cos+pi3D,,1&&1sin+pi3D,,&,&K)-
% #ector de puntos en los que se desea resultados
tspan!Jt&"+tf%t&,3+npoints%1,"tfK-
% modificacin de las opciones por defecto
m!1- L=eye($)* L()))=m* L(//)=m*
options = odeset('2elTol')e+7$ '#bsTol')e+7G 888
'Mtats''on' 'Lass'L 888
'NutputOcn'9odeplot 'NutputMel'%)/($')*
% llamada a la funcin de inte*racin numNrica
%tK'=ode)Hs(9tiropar/tspany7options m)*
% dibu'o de la altura del m#il en funcin del tiempo
fi*ure, plot+t,H+",4,,, *rid
disp+)Ha he terminadoO),
M&s8rvese cmo se han de!inido nuevas #olerancias para los errores a&solu#o y rela#ivo, ue se ha
ac#ivado la opcin de imprimir es#adCs#icas y ue se le indica al programa ue se le da una ma#ri* de
masas cons#an#e en una varia&le llamada 1 'La o#ra opcin para el argumen#o Q1assQ es una re!e+
rencia a la !uncin ue se encargar" de calcular la ma#ri* de masas($ La !uncin tiropar$ no ha su+
!rido cam&ios impor#an#es respec#o a tiropar y es asC=
function deri&=tiropar/+t,:, m,
% .cuacin diferencial en la forma
% 71:p!f+t,:,-
deri#!Peros+4,1,-
fac!%+&.&&1,1sqrt++:+1,Q2R:+2,Q2,,-
deri#+1,!fac1:+1,-
deri#+2,!fac1:+2,%?.21m-
deri#+3,!:+1,-
deri#+4,!:+2,-
0l cam&io m"s impor#an#e consis#e en ue a la !uncin tiropar$ se le ha pasado como argumen#o la
msa del proyec#il$ 0n e!ec#o, la !orma ue #iene MATLAB para pasar argumen#os desde el pro+
grama principal a las !unciones llamadas por el in#egrador es poner es#os argumen#os a con#inuacin
de options, en la llamada al in#egrador$ 0l in#egrador recoge es#os argumen#os y los #ransmi#e$
0l resul#ado de MATLAB incluye las es#adCs#icas solici#adas y es el siguien#e=
Aprenda Matlab 7. como !i e!tu"iera en Primero pgina 8
32 successful steps
& failed attempts
F2 function e#aluations
1 partial deri#ati#es
? =6 decompositions
F1 solutions of linear s:stems
>na #ercera y m"s so!is#icada !orma de llamar a los in#egradores de MATLAB podrCa ser la ue se
mues#ra a con#inuacin$ Aunue se #ra#a de un ejemplo muy sencillo, se han incluido en 8l muchas
de las carac#erCs#icas m"s avan*adas de los in#egradores de MATLAB, de aplicacin en casos mu+
cho m"s complicados$ Los lec#ores in#eresados en las #8cnicas de simulacin de&en es#udiar con
a#encin el programa ue sigue y los comen#arios ue se acompa@an$
1. % fichero tiropar7ain3.m
/8 function tiroparLain(
3. % @nter#alo de inte*racion
4. t&!&- tf!12- npoints!F1-
F. tspan!Jt&"+tf%t&,3+npoints%1,"tfK-
D. % condiciones iniciales
P8 y7=%)77@cos(piDG))77@sin(piDG)7+)7''*
2. % elementos S!& en la Tacobiana de f+, en la ec. dif. 7+t,:,1:p!f+t,:,
?. Tp!sparse+J1 1 & &- 1 1 & &- 1 & & &- & 1 & &K,-
)78 options = odeset('2elTol')e+7G '#bsTol')e+7G 'Lass'9tiropar(Lasa 888
))8 'LMtateQep''none' 'NutputOcn'9tiropar(Malida 'NutputMel'%($' 888
)/8 'RSattern'Rp '1ectori.ed''on' '!&ents'9tiropar(!&entos 'Mtats''on')*
)(8 sol=ode)Hs(9tiropar(tspany7options)7877))*
14. % forma alternati#a de llamar al inte*rador
)H8 < %TK t!& y!& e&'=ode)Hs(9tiropar(tspany7options)7877))*
1D. % resultados del c/lculo de e#entos
1E. % sol.xe tiempos en los que se ha producido el e#ento
12. disp+)<iempos de corte con :+4,!&" ),, disp+num2str+sol.xe,,-
1?. % sol.:e #ector de estado en los instantes del e#ento
2&. disp+)$alores del #ector de estado en los e#entos" ),, disp+num2str+sol.:e,,--
21. % sol.ie nUumero del e#ento que se ha producido
22. disp+).#entos que se han producido" ),, disp+num2str+sol.ie,,-
/(8 T=tspan(find(tspanTsol8-e(/)))*
24. % la funcion de#al calcula la solucion en los tiempos deseados
/H8 K=de&al(solT)*
2D. % forma alternati#a de llamar al inte*rador
2E. disp+)Ha he terminadoO),
22.
2?. % calculo de la matriP de masas
(78 function L=tiropar(Lasa(tmc)
31. 7!dia*+Jm,m,1
,1K,- 32.
33. % funcin para controlar la salida de resultados
($8 function status=tiropar(Malida(tyfla"mc)
3F. % se llama a tiropar35alida+, en cada punto de salida :
3D. % esta funcin se encar*a de llamar a odeplot
3E. status!&-
(J8 switch fla"
3?. case )init)
4&. disp+J).ntrando en salida<iropar3 por primera #eP)K,-
41. odeplot+t,:,)init),-
42. case )done)
43. disp+J).ntrando en salida<iropar3 por Vltima #eP)K,-
44. odeplot+JK,JK,)done),-
4F. case ))
$G8 < puede haber resultados para mUs de un tiempo de salida
$P8 for i=)>len"th(t)
$J8 disp(%'!ntrando en salidaTiropar$ para t='num/str(t(i))')*
$F8 odeplot(t(i)y(>i))*
H78 end
H)8 end
F2.
Captulo 6: Programacin de MATLAB pgina 89
F3. % funcion para controlar los e#entos
H$8 function %&aloresOinaldireccion'=tiropar(!&entos(tymc)
FF. if :+2,0&
FD. #alor ! :+4,- % unico #alor que se controla
FE. esWinal ! &- % no termina la inte*racin al lle*ar al suelo
F2. direccion ! 1- % lle*ar al suelo en direccin ascendente
F?. else
D&. #alor ! :+4,-
D1. esWinal ! 1- % termina la inte*racin al lle*ar al suelo
D2. direccion ! %1- % lle*ar al suelo en direccin descndente
D3. end
Aor o#ra par#e, el !ichero tiropar,.m ue evala la ecuacin di!erencial es el siguien#e=
)8 function dy=tiropar((tymc) < &ersion &ectori.ada
/8 fac!%c1sqrt+:+1,",.Q2R:+2,",.Q2,-
(8 d:!Peros+siPe+:,,-
$8 d:+1,",!fac.1:+1,",-
H8 d:+2,",!fac.1:+2,",%?.21m-
G8 d:+3,",!:+1,",-
P8 d:+4,",!:+2,",-
)o&re las !unciones de!inidas en el !ichero tiropar,4ain.m se pueden hacer los siguien#es comen#a+
rios=
1$ 0l programa se ha de!inido como funci*n sin argumentos 'lCnea -( y no como !ichero de co+
mandos$ La ra*n es para poder u#ili*ar sub!funciones '!unciones de!inidas en el mismo !i+
chero(, ue no es#"n permi#idas en los !icheros de comandos$
-$ Las condiciones iniciales 'lCnea H( se parecen a las de los ejemplos an#eriores, pero el movi+
mien#o comien*a con una ordenada nega#iva 'por de&ajo del origen($ 0s#e hecho se u#ili*ar"
en relacin con los e)entos$
/$ Las ecuaciones di!erencias se suponen en la !orma de la ecuacin '1D( ' 1't, y(y = f 't, y(
(,
ue permi#e proporcionar m"s in!ormacin al in#egrador$ 0n la lCnea . se de!ine una ma#ri*
dispersa con 4unos4 en las posiciones correspondien#es a los #8rminos dis#in#os de cero de la
ma#ri* 3aco&iana del segundo miem&ro, es#o es, a las derivadas parciales dis#in#as de cero del
vec#or f't,y( respec#o al vec#or y$ 0l in#egrador ode#Bs va a calcular dichas derivadas num8ri+
camen#e y la in!ormacin con#enida en la ma#ri* ., so&re los #8rminos no nulos le permi#e
ahorrar mucho #ra&ajo$
D$ La es#ruc#ura o,tions, de!inida en las lCneas 10+1-, #iene una gran impor#ancia, pues con#rola
los aspec#os !undamen#ales de la in#egracin$ Como ya se ha dicho, sus valores se es#a&lecen
en la !orma de parejas parmetroE"alor$ Los primeros argumen#os son los valores de las #ole+
rancias de error rela#ivo y a&solu#o, ya comen#ados previamen#e$ A con#inuacin se comen#an
las res#an#es opciones$ 0n los nom&res de los par"me#ros MATLAB no dis#ingue en#re ma+
ysculas y minsculas y no hace !al#a escri&irlos con #odas las le#ras= &as#a poner su!icien#es
le#ras para evi#ar la am&igdedad en el nom&re$ Aor ejemplo, 4/tate'ep y mstate ser"n consi+
derados como euivalen#es a 4/tate'ependence$ 0s convenien#e sin em&argo ue la eleccin
de es#os nom&res no a!ec#e a la legi&ilidad del cdigo$
<$ La #ercera pareja de argumen#os de o,tions declara ue la ma#ri* de masas 'par"me#ro 4ass(
es de!inida por la !uncin tiropar,4asa, cuya re!erencia se da como valor$ M#ra posi&ilidad
es la ue se ha u#ili*ado an#es= cuando la ma#ri* de masas es cons#an#e, se calcula previamen#e
su valor y se incluye el nom&re de la varia&le como valor de es#e argumen#o$ La lCnea 11 in+
cluye el argumen#o 4/tate'ep, #am&i8n relacionado con la ma#ri* de masas, ue es#a&lece el
#ipo de dependencia de dicha ma#ri* respec#o al vec#or de es#ado y$ )us posi&les valores son
none, wea y strong$ M#ro argumen#o relacionado con la ma#ri* de masas, no u#ili*ado en es#e
ejemplo, es 4)9attern, cuyo valor de&e ser una ma#ri* sparse an"loga a .,, u#ili*ada para de+
Aprenda Matlab 7. como !i e!tu"iera en Primero pgina 8:
!inir la dependencia de los elemen#os de la ma#ri* de masas respec#o al vec#or y 'su !par!it-
pattern($
9$ 0l par"me#ro Dutput=cn permi#e al usuario con#rolar la salida de resul#ados a medida ue se
van haciendo los c"lculos y no solamen#e al !inal$ 0l valor de es#e par"me#ro es una re!erencia
de !uncin '3tiropar,/alida( ue ser" u#ili*ada por el in#egrador varias veces a lo largo de la
in#egracin$ MATLAB dispone de cua#ro !unciones de salida preprogramadas 'odeplot, odep!
has$, odephas, y odeprint( ue pueden ser u#ili*adas sin m"s ue pasar como valor una re!e+
rencia a ellas$ 0n es#e caso se ha programado una !uncin de salida llamada tiropar,/alida
ue es#" de!inida a par#ir de la lCnea /D$ 0s#a !uncin se llama al inicio de la in#egracin, en
cada ins#an#e de salida de resul#ados y al #erminar la in#egracin$ 0l par"me#ro Dutput/el
permi#e de!inir los elemen#os del vec#or de es#ado en los ue se es#" in#eresado$ 0n es#e caso
se le han pasado como valor el vec#or I/, DJ, lo ue har" ue la !uncin de salida reci&a las
posiciones y no las velocidades 'ue es#"n en las dos primeras posiciones del vec#or de es#ado
y($
H$ La 3aco&iana de la !uncin f't,y( respec#o al vec#or y #iene una gran impor#ancia, so&re #odo
en pro&lemas stiff$ 0l usuario puede proporcionar una 3aco&iana al in#egrador, pero si no lo
hace 8s#e la calcula num8ricamen#e$ 0l usuario puede #am&i8n proporcionar una re!erencia de
!uncin ue calcule una 3aco&iana analC#icamen#e 'de modo e7ac#o o apro7imado( por medio
del par"me#ro Cacobian$ Cuando no se u#ili*a es#e par"me#ro, el in#egrador calcula la 3aco&ia+
na num8ricamen#e y #am&i8n en es#e caso el programador puede ayudar a acelerar mucho los
c"lculos$ 0l par"me#ro C9attern, ya comen#ado previamen#e, permi#e indicar al in#egrador u8
elemen#os de la 3aco&iana son dis#in#os de cero$ Adem"s, como una 3aco&iana con#iene n
-
de+
rivadas parciales y cada derivada se calcula a par#ir de la di!erencia en#re dos evaluaciones de
f't,y(, es#e c"lculo puede ser muy cos#oso para valores grandes de n$ 0l par"me#ro C9attern
permi#e reducir el c"lculo de derivadas num8ricas$ Adem"s, el par"me#ro 5ectori1ed permi#e
reali*ar es#e c"lculo mucho m"s r"pidamen#e u#ili*ando las capacidades vec#oriales de MA+
TLABE sus posi&les valores son on y off$ M"s adelan#e se ver" cmo se ha vec#ori*ado en es#e
ejemplo la !uncin tiropar,$
U$ 0l penl#imo par"me#ro ue aparece en la es#ruc#ura o,tions es 7)ents$ 0s#e par"me#ro puede
#ener una gran impor#ancia en simulacin$ 0n es#e con#e7#o, se llaman e)entos a #odas aue+
llas circuns#ancias ue pueden acaecer a lo largo de la simulacin y ue cam&ian su na#urale*a
u o&ligan a #omar una decisin$ Aor ejemplo, si se es#" simulando el movimien#o de un vehC+
culo #odo #erreno, cada ve* ue las ruedas pierden o vuelven a #omar con#ac#o con el suelo se
produce un cam&io en el sis#ema a simular, pues se eliminan o a@aden ecuaciones y grados de
li&er#ad$ Los e)entos de MATLAB permi#en de#ec#ar semi+au#om"#icamen#e es#as si#uaciones
y #omar las medidas adecuadas$ 0n el ejemplo de #iro para&lico ue se es#" considerando el
nico even#o ue se va a considerar es ue el proyec#il llegue al suelo, es decir, ue su coor+
denada " se anule 'se supone ue el suelo es la super!icie -F($ 0l valor del par"me#ro 7)ents
es la re!erencia de la !uncin de usuario ue se ocupar" de ges#ionarlos$
.$ 0l l#imo par"me#ro de o,tions es /tats, ue cuando es#" en on hace ue el in#egrador calcule
e imprima las es#adCs#icas so&re el #ra&ajo ue ha sido necesario en la in#egracin$
10$ La lCnea 1/ con#iene la llamada al integrador, en es#e caso a la !uncin ode#Bs$ La lCnea 1<
mues#ra comen#ada, para ue no se ejecu#e una forma alternati)a de reali*ar es#a llamada$
0n el primer caso, ue !ue una novedad de la versin 9$0 de MATLAB, el in#egrador en#rega
#odos los resul#ados como campos de una es#ruc#ura, ue en es#e caso se ha llamado sol$ 0l lis+
#ado del programa indica los signi!icados de los campos m"s impor#an#es= sol.( es un vec#or
con los #iempos en los ue se devuelven resul#ados y sol.y es una ma#ri* cuyas !ilas son los re+
Captulo 6: Programacin de MATLAB pgina 83
sul#ados correspondien#es$ )i es#"n ac#ivados los even#os hay #res campos adicionales (e, ye e
ie, ue represen#an respec#ivamen#e los ins#an#es de #iempo en ue se han producido los even+
#os, los valores del vec#or de es#ado en esos ins#an#es de #iempo, y el even#o concre#o 'pueden
con#rolarse varios even#os di!eren#es( ue se ha producido en cada uno de esos ins#an#es$
11$ Tan#o en la lCnea 1/ como en la 1< aparecen de#r"s de o,tions dos argumen#os adicionales
ue represen#an la masa '1( y el amor#iguamien#o c '0$001($ Todos los argumen#os ue apa+
re*can de#r"s de o,tions son siempre considerados argumen#os adicionales por el in#egrador,
ue se limi#a a recogerlos y pas"rselos a #odas las !unciones de usuario #ales como tiropar,,
tiropar,4asa, e#c$ 0l in#egrador es un mero #ransmisor de argumen#os en#re el programa
principal y las res#an#es !unciones de usuario$ 0s muy impor#an#e ue toda! la! &uncione! de
u!uario reco(an e!to! argumento! adicionale! aunue no los necesi#en, pues en o#ro caso se
o&#iene un error de in!u&iciente n'mero de argumento!$ M&s8rvese ue es#os argumen#os apa+
recen en las lCneas /0, /D y <D$
1-$ Los in#egradores de MATLAB pueden dar el resul#ado por medio de una es#ruc#ura 'como en
la lCnea 1/( o por medio de diversos valores de re#orno 'como en la lCnea 1< y en los ejemplos
an#eriores($ )e u#ili*a una u o#ra !orma en !uncin del nmero de valores de re#orno ue espe+
ra reci&ir el usuario$
1/$ Cuando el resul#ado del in#egrador se reci&e por medio de una es#ruc#ura, los ins#an#es en los
ue se proporcionan resul#ados no coinciden con los valores in#ermedios de ts,an, sino ue
son )alores elegidos por el integrador, al igual ue en el caso en ue ts,an slo con#enga el
ins#an#e inicial y el !inal 'ts,an=9tini7 tend:;($ )i se desean resul#ados en in#ervalos igual+
men#e espaciados elegidos por el usuario, puede u#ili*arse la !uncin de)al 'ver lCnea -<(, ue
!ue o#ra novedad de MATLAB 9$0$ )i a es#a !uncin se le pasa la es#ruc#ura solucin sol y un
vec#or con los ins#an#es de #iempo en los ue se desea solucin, de)al devuelve una ma#ri* cu+
yas !ilas son el vec#or solucin en dichos ins#an#es de #iempo$
1D$ La lCnea /0 mues#ra el comien*o de la !uncin tiropar,4asa, ue calcula la ma#ri* de masas
del sis#ema de ecuaciones di!erenciales '1D($ 0s muy impor#an#e ue los argumen#os sean los
ue se indica en esa lCnea$ 0l argumen#o t aparece porue se supone ue la ma#ri* 1 varCa con
el #iempo y no con el vec#or de es#ado y$ )i se considerara cons#an#e 'como en realidad es en
es#e caso( se podCa ha&er pasado direc#amen#e como valor del par"me#ro 4ass en odeset$ Con
4/tate'ep igual a none se ha indicado ue la ma#ri* de masas no depende de y, y por eso di+
cho vec#or no se pasa como argumen#o$ Aor o#ra par#e, como a #odas las !unciones de usuario,
el in#egrador le pasa los dos argumen#os adicionales =1 y c=3.331 ue aparecen al !inal de
la llamada al in#egrador en la lCnea 1/$
1<$ La !uncin tiropar,/alida en la lCnea /D #iene un #ercer argumen#o llamado fla+ 'se@al, marca
o &andera($ A lo largo de la in#egracin del programa es#a !uncin es llamada con #res valores
di!eren#es de fla+$ Al principio de #odo se llama con fla+ igual a %init%E despu8s, a lo largo de
la in#egracin, se llama en cada ins#an#e de salida con fla+ igual a la cadena vacCa % %E cuando
la in#egracin ha #erminado se llama con fla+ igual a %done% para ue el usuario pueda hacer
las l#imas operaciones an#es de #erminar$ 0l programador de&e decidir el uso ue hace de es+
#as posi&ilidades$ 0n es#e caso, la !uncin tiropar,/alida lo nico ue hace es imprimir un
mensaje por la consola y llamar a la !uncin odeplot, ue es una de las !unciones es#"ndar de
MATLAB$ 0s impor#an#e o&servar el cdigo de las lCneas D9+<0= es#e cdigo es necesario
porue el in#egrador consigue dar pasos #an grandes ue puede ha&er varios pun#os de salida
den#ro de un nico paso$ 0n es#e caso, el argumen#o t es un vec#or con los diversos #iempos de
salida e y es una ma#ri* cuyas columnas son los vec#ores de es#ado en cada pun#o de salida$ )i
no se in#roduce el &ucle for de la lCnea DH el programa da error$
Aprenda Matlab 7. como !i e!tu"iera en Primero pgina 8#
19$ Llega el momen#o de hacer unos comen#arios so&re la !uncin ue maneja los e)entos$ 0l in+
#egrador necesi#a del usuario para de#ec#ar los even#os ue se pueden producir a lo largo de la
simulacin$ Aara MATLAB un e)ento es siempre una )ariable cu"o )alor pasa por cero,
&ien en direccin ascendente o descendente$ 0sa varia&le puede ser una coordenada, una dis+
#ancia, una !uer*a, $$$ )i en ve* de hacerse cero #iene ue alcan*ar un valor de#erminado, &as+
#ar" con#rolar la di!erencia correspondien#e$ 0l usuario de&e decir pues al in#egrador u8 valo+
res #iene ue con#rolar$ 0s#o se hace por medio de los valores de re#orno de la !uncin ue
ges#iona les even#os, en es#e caso tiropar,7)entos 'ver lCnea <D($ 0l primer valor de re#orno,
valor, es la varia&le cuyo paso por cero hay ue vigilar 'puede ser un )ector de )alores a con!
trolar($ 0l segundo valor de re#orno, esFinal, indica si la ejecucin se de&e #erminar o no
cuando se produ*ca el even#o, lo cual depender" del caso es#udiado y del propsi#o del pro+
gramador$ 0l #ercer y l#imo valor de re#orno, direccion, indica cmo es el paso por cero, si
con derivada posi#iva o creciendo 'valor 1(, o con derivada nega#iva o decreciendo 'valor 1($
La !uncin tiropar,7)entos mues#ra un ejemplo de cmo se generan es#os valores= el valor a
con#rolar es la ordenada del mvil, ue viene dada por y$!%$ 0l even#o es final cuando el m+
vil impac#a con el suelo en su #rayec#oria descenden#e 'velocidad y$2%<3(, pero no cuando es#"
su&iendo 'velocidad y$2%=3($ %e hecho, se produce un primer even#o al poco #iempo de ser
disparado 'ya ue par#e de un pun#o con ordenada nega#iva(, pero es#e even#o no de#iene la
simulacin$ 0l segundo even#o sC la para, pues se produce con #rayec#oria descenden#e$
1H$ ,inalmen#e, es necesario e7plicar la !uncin tiropar,, ue se incluye en la p"gina .1$ %icha
!uncin es#" )ectori1ada, es#o es, es capa* de reci&ir como argumen#o varios vec#ores de es#a+
do 'columnas de la ma#ri* y( y calcular los correspondien#es valores del vec#or de derivadas,
ue ser"n las columnas de la ma#ri* dy$ Aara vec#ori*ar es#a !uncin se ha hecho uso de los
operadores '.*( y '.>($ Cada !ila de la ma#ri* resul#ado dy se calcula con una nica ins#ruccin,
en !uncin de las !ilas de la ma#ri* y$ 0s#a simple modi!icacin 'en o#ros ejemplos puede ser
mucho m"s complicada( hace ue los c"lculos sean mucho m"s e!icien#es$
:o se puede en#rar con m"s de#enimien#o en es#as cues#iones especiali*adas$ Aara el lec#or in#eresa+
do en es#os pro&lemas se recomienda acudir a la ayuda de MATLAB, concre#amen#e al #ema #i#ula+
do :nitial 5alue 9roblem /ol)ers, accesi&le desde la ven#ana principal del .elp de MATLAB en
4athematics, 'ifferential 7quations, :nitial 5alue 9roblems for D'7s and 'A7s$ Tam&i8n pue+
de ser muy #il consul#ar la in!ormacin ue aparece so&re 4AE>AB D'7 /uite, en la seccin de
9rintable 'ocumentation (9'=), en la ven#ana de .elp$ 0s#os documen#os con#ienen una e7plica+
cin muy de#allada de #odas las posi&ilidades de las !unciones re!eridas, asC como numerosos ejem+
plos$
9$10$D$LA) ,>:C;M:0) 1DAL, 1DALC, %1DAL 5 1DAL$3
0s#as !unciones #ienen mucho ue ver con las cadenas de carac#eres, ya ue necesi#an la !le7i&ilidad
de 8s#as para alcan*ar #odas sus posi&ilidades$ Las !unciones para manipular cadenas de carac#eres
se ver"n en un pr7imo apar#ado$
La !uncin e)al(%cadena de caracteres%) hace ue se evale como e7presin de MATLAB el #e7#o
con#enido en#re las comillas como argumen#o de la !uncin$ 0s#e #e7#o puede ser un comando, una
!rmula ma#em"#ica o +en general+ cualuier e7presin v"lida de MATLAB$ La !uncin e)al de&e
#ener los valores de re#orno necesarios para recoger los resul#ados de la e7presin evaluada$
0s#a !orma de de!inir macros es par#icularmen#e #il para pasar nom&res de !uncin a o#ras !uncio+
nes de!inidas en !icheros *.m$
0l siguien#e ejemplo va creando varia&les llamadas A1, A2, $$$, A13 u#ili*ando la posi&ilidad de
conca#enar cadenas an#es de pas"rselas como argumen#o a la !uncin e)al=
Captulo 6: Programacin de MATLAB pgina 8,
for n = )>)7
e&al(%'#'num/str(n)' = ma"ic(n)'')
end
La !uncin e)al() se puede usar #am&i8n en la !orma e)al(%tr"/tring%, %catch/tring%)$ 0n es#e caso se
evala la cadena %tr"/tring%, y si se produce algn error se evala la cadena %catch/tring%$ 0s una
!orma simpli!icada de ges#ionar errores en #iempo de ejecucin$
La !uncin EFe)alc() es similar a e)al() pero con la di!erencia de ue cualuier salida ue la e7pre+
sin pasada como argumen#o hu&iera enviado a la ven#ana de comandos de MATLAB es cap#urada,
y almacenada en una ma#ri* de carac#eres 0 cuyas !ilas #erminan con el car"c#er QenQ$
Aor su par#e la !uncin fe)al sirve para evaluar, den#ro de dicha !uncin, o#ra !uncin cuya re!eren+
cia o cuyo nom&re con#enido en una cadena de carac#eres se le pasan como primer argumen#o$ 0s
posi&le ue es#e nom&re se haya leCdo desde #eclado o se haya reci&ido como argumen#o$ A la !un+
cin fe)al hay ue pasarle como argumen#os #an#o la re!erencia o el nom&re de la !uncin a evaluar
como sus argumen#os$ Aor ejemplo, si den#ro de una !uncin se uiere evaluar la !uncin calcu!
lar(A, b, c), donde el nom&re calcular o la re!erencia 3calcular se envCa como argumen#o en la
cadena nombre, en#onces fe)al(nombre, A, b, c) euivale a calcular(A, b, c)$
,inalmen#e, la !uncin e)alin(ws, %expresion%) evala =e@pre!ion= en el espacio de #ra&ajo ws$ Los
posi&les valores de ws son %caller% y %base%, ue indican el espacio de #ra&ajo de la !uncin ue lla+
ma a e)alin o el espacio de #ra&ajo &ase$ Los valores de re#orno se recogen del modo ha&i#ual$
6.11. ?istribuci#n del esfuer)o de c@lculo8 9rofiler
0l profiler es una u#ilidad ue permi#e sa&er u8 #iempo de c"lculo se ha gas#ado en cada lCnea de
una funci*n de!inida en un !ichero *.m o en general de un programa de MATLAB$ 0l profiler #am+
&i8n puede u#ili*arse con ficheros de comandos *.m, es decir con programas ue no sean !unciones$
Aermi#e asimismo de#erminar el nmero de llamadas a dicha !uncin, las !unciones ue la han lla+
mado 'parent &unction!(, las !unciones llamadas por ella 'c;ild &unction!(, e#c$
0l profiler mejora la calidad de los programas, pues permi#e de#ec#ar los Fcuellos de &o#ellaG de una
aplicacin y concen#rar en ellos los es!uer*os para mejorar su e!iciencia$ Aor ejemplo, sa&iendo el
nmero de veces ue se llama a una !uncin y el #iempo ue cues#a cada llamada, se puede decidir
si es mejor emplear m"s memoria en guardar resul#ados in#ermedios para no #ener ue calcular va+
rias veces lo mismo$
0l profiler ha sido mejorado en las dis#in#as versiones de MATLAB, disponiendo de una in#er!ace
de usuario propia 'ver ,igura // y siguien#es($ Con el profiler se puede medir el #iempo 'en cen#8+
simas de segundo( empleado en cada lCnea del !ichero, en cada llamada a una !uncin e incluso en
cada operador del lenguaje$
Aara arrancar la ven#ana del profiler se puede ejecu#ar el comando 9rofiler en el men 'estop,
u#ili*ar el men /tart?4atlab o simplemen#e #eclear profile )iewer en la ven#ana de comandos$ 0l
resul#ado ser" ue se a&re la ven#ana ue se mues#ra en la ,igura //$
Ahora se de&e in#roducir en la ven#ana Gun this code el nom&re de la !uncin o !ichero *.m ue se
uiere anali*ar y despu8s clicar en el &o#n /tart 9rofiling$ ;nmedia#amen#e el programa empie*a a
ejecu#arse &ajo la supervisin del profiler, lo cual se sa&e porue en la par#e superior derecha de la
ven#ana aparece una marca verde y comien*a a correr el #iempo$ Al aca&ar la ejecucin se mues#ra
el resumen de resul#ados '9rofile /ummar"(, ue para el programa tiropar4ainA.m e7plicado en el
apar#ado 9$10$/, es el mos#rado en la ,igura /D$ 0n es#a !igura se mues#ra un in!orme del nT de veces
ue ha sido llamada cada !uncin y del #iempo #o#al ue se ha empleado en ella$
Aprenda Matlab 7. como !i e!tu"iera en Primero pgina 86
,igura //$ Len#ana inicial del 9rofiler$ ,igura /D$ 9rofile /ummar" para tiropar4ainA$
,igura /<$ ;n!ormacin so&re la !uncin tiroparAsalida$ ,igura /9$ ;n!ormacin adicional so&re tiroparAsalida$
Clicando so&re el enlace a la !uncin tiroparAsalida se mues#ra la in!ormacin de la ,igura /< y de
la ,igura /9$ 0n la par#e de arri&a de la ven#ana ',igura /<( se mues#ra el nmero de veces ue ha
sido llamada cada lCnea de cdigo y el #iempo empleado en ella$ 0n la par#e in!erior de la ven#ana
',igura /9( aparece una in!ormacin similar re!erida al cdigo !uen#e del !ichero$ Las sen#encias
ue se han llevado m"s #iempo de CA> aparecen coloreadas en un #ono rosa de in#ensidad crecien#e$
>na in!ormacin par#icularmen#e in#eresan#e es la proporcionada &ajo el epCgra!e 4!>int results,
'no mos#rados en las !iguras( ue con#iene sugerencias para mejorar la e!iciencia del programa$ Aor
ejemplo, se avisa de la e7is#encia de varia&les ue se calculan pero no se u#ili*an pos#eriormen#e, de
la e7is#encia de al#erna#ivas m"s e!icien#es, e#c$
0l profiler proporciona #am&i8n in!ormacin so&re la !uncin padre 'la ue la ha llamado( y las
!unciones hijas de cada !uncin$
M#ra !orma de llamar al profiler es por medio de la !uncin profile, ue se in#ercala en el cdigo
!uen#e en la !orma 'se supone ue es#as lCneas !orman par#e de un !ichero *.m(=
profile on +detail 'builtin'*
sol!ode1Fs+Ltiropar4,tspan2,:&,options,1,&.&&1,-
profile &iewer*

ndice
General
ntroduccio n a MATLAB y SMULNK -
1
donde la primera lCnea ac#iva el profiler a la ve* ue de!ine el grado de detalle ue se desea y el
#ipo de #iempo ue se desea medir$ La segunda lCnea es una llamada a la !uncin ode#Bs ue a su
ve* llama a muchas o#ras !unciones y la #ercera lCnea de#iene el profiler y le pide un in!orme con los
resul#ados calculados$ Los in!ormes presen#ados por el Apro!iler son similares a los de la ,igura /D
y siguien#es, aunue en es#e caso no se mues#ra un in!orme #o#al so&re la !uncin tiropar4ainA,
sino slo so&re la par#e de cdigo ue es#" en#re profile on y profile )iewer$
07is#en dos posi&les grados de de#alle respec#o a la in!ormacin ue se le pide al profiler=
Qmme7Q de#ermina el #iempo u#ili*ado por !unciones y su&+!unciones de!inidas en !icheros
*.m y *.mex$ \s#a es la opcin por de!ec#o$
Q&uil#inQ como el an#erior incluyendo las funciones intr+nsecas de MATLAB$
M#ros posi&les comandos relacionados con el profiler de MATLAB son los siguien#es=
pro!ile vieZer a&re la ven#ana del profiler mos#rada en la ,igura /D$
pro!ile on ac#iva el profiler poniendo a cero los con#adores
pro!ile on de#ail level como el an#erior, pero con el grado de de#alle indicado
pro!ile on his#ory ac#iva el profiler con in!ormacin so&re el orden de las llamadas a
las !unciones 'puede regis#rar has#a 10000 llamadas(
pro!ile o!! desac#iva el profiler sin poner a cero los con#adores
pro!ile resume vuelve a ac#ivar el profiler sin poner a cero los con#adores
pro!ile clear pone a cero los con#adores
s ? pro!ile'Qs#a#usQ( mues#ra una es#ruc#ura con#eniendo los da#os del profile
s#a#s ? pro!ile'Qin!oQ( de#iene el profiler y mues#ra una es#ruc#ura con los resul#ados 'con+
sul#ar el .elp para m"s in!ormacin so&re las varia&les miem&ro de
es#as es#ruc#uras(
0l profiler se puede aplicar a !unciones y a !icheros de comandos$ La ejecucin de un programa con
el profiler puede ser &as#an#e m"s len#a ue sin 8l, por el #ra&ajo e7#ra ue conlleva$

ndice
General
ntroduccio n a MATLAB y SMULNK -
2
2
,
Captulo III
A*LICACI,N DE MATLAB EN SISTEMAS DE CONTROL
1.1 Con%erio- n de una .uncio- n
tran.erencia
>na !unciof n #rans!erencia puede descri&irse en MATLAB u#ili*ando dos vec#ores !ilas= uno para
los coe!icien#es del numerador y o#ro para los coe!icien#es del denominador$ A menudo se reuiere
para anali*ar o diseng ar un sis#ema conocer la u&icaciof n de sus polos y cerosE dicha in!ormaciof
n es#af con#enida en la !unciof n #rans!erencia del sis#ema$ Cuando la !un+
ciof n de #rans!erencia es#af especi!icada como ra*of n de polinomios, podemos conocer sus
polos, ceros y ganancia, o viceversa$ Los comandos ue nos permi#en efs#o son= tf2Pp, ue de un
cocien#e de polinomios nos devuelve los ceros, polos y una ganancia, y Pp2tf, ue de conocer los
polos, ceros y la ganancia de un sis#ema nos da el numerador y denominador de su !unciof n de
#rans!erencia$
Ejemplo 1. Supongamos la funcio n
transferencia
G(s) =
5 s + 2 0
s + 4s + 20
si sacamos el < !ac#or comuf n del numerador y !ac#ori*amos el denominador u#ili*ando sus rafhces,
nos ueda de la !orma
G(s) =
5 ( s + 4 )
.
(s + 2 4 j)(s + 2 + 4
j)
Comando Breve explicacio n
exp
sin
cos
sinh
cosh
clf
plot
subplot
hold
title
xlabel
:label
text
print
fi*ure
impulse
step
tf
Pp9
ss2tf
tf2Pp
ss2Pp
Pp2tf
tf2ss
Pp2ss
Exponencial.
Seno.
Coseno.
Seno Hiperbo lico.
Coseno Hiperbo lico.
Elimina la figura actual.
Crea graficas.
Crea mu ltiples graficos en la misma figura.
Mantiene la grafica
anterior. Agrega ttulo del
grafico. Agrega nombre del
eje-X. Agrega nombre del
eje-Y. Agrega texto al gra
fico.
mprime el grafico o lo guarda en un
archivo Crea figuras (ventana para gra
ficos). Respuesta al mpulso.
Respuesta al escalo n unitario.
Crea un modelo en funcio n de transferencia.
Crea un modelo de cero-polo-ganancia.
Conversio n de modelo en espacio de estados a funcio n de
transferencia. Conversio n de modelo en funcio n de transferencia a
polos y ceros. Conversio n de modelo en espacio de estados a polos y
ceros.
Conversio n de modelo en polos y ceros a funcio n de transferencia.
Conversio n de modelo en funcio n de transferencia a espacio de
Ta&la 1= Comandos ue u#ili*aremos
m

n
Aara llevar a ca&o lo mismo con MATLAB, de&emos ingresar los polinomios numerador y
denominador, en !orma de vec#ores de la siguien#e manera=
num!JF 2&K-
den!J1 4 2&K-
M&servemos ue para de!inir el vec#or lo hacemos colocando en#re corche#es los coe!i+ cien#es
de cada #efrmino, ordenados de mayor orden al menor$ Aara separar las columnas del vec#or lo
hacemos con un espacio, o #am&iefn podrfhamos u#ili*ar coma$ 0l pun#o y coma !inal es para ue el
resul#ado de lo ejecu#ado por MATLAB no salga por pan#alla$
)i ahora ingresamos=
JP,p,9K!tf2Pp+num,den,
M&#enemos=
P!%4
p!J%2R4' %2%4'K
9!F
%ado ue #oda !unciof n #rans!erencia dada por un cocien#e de polinomios se puede escri&ir de la
!orma
G(s) = k

i=1
(s z
i
)
i=1
(s p
i
)
con m n,
podemos armar !afcilmen#e nues#ra !unciof n #rans!erencia, haciendo
G(s) =
5 ( s + 4 )
.
(s + 2 + 4 j)(s + 2 4
j)
)i ueremos reali*ar el procedimien#o inverso, necesi#amos ingresar las varia&les G, A y
p$ Con la ins#rucciof n=
Jnum,denK!Pp2tf+P,p,9,-
o&#enemos el numerador y denominador de la !unciof n #rans!erencia=
num!JF 2&K
den!J1 4 2&K
0l hecho de #ener el numerador y el denominador de la !unciof n de #rans!erencia en dos
varia&les, no signi!ica ue MATLAB la iden#i!iue como #al$ Aara ello se u#ili*a el co+ mando
tf, ue descri&e en una sola varia&le la #rans!erencia dada por su numerador y al denominador$ Lo
u#ili*amos de la siguien#e !orma=
X!tf+num,den,-
)i ueremos ue MATLAB arme la !unciof n #rans!erencia como cocien#e de produc#os de los
ceros y los polos, para ello u#ili*amos Pp9, de la siguien#e !orma=
X!Pp9+P,p,9,-
/(s)
G(s) =
1.! Ra-/ce de un polino#io
0n el 0jemplo 1 vimos ue el polinomio denominador de la !unciof n #rans!erencia venfha dado
por= !
-
2 D! 2 -0, y pudimos hallar sus rafhces dado ue se #ra#a de una ecuaciof n de segundo
orden$
0n polinomios de orden superior, la #area de encon#rar sus rafhces no siempre es #an !afcil$ Con
la !unciof n de MATLAB roots podemos calcular las rafhces de cualuier polinomio$ Aara
ejecu#ar dicha !unciof n #enemos ue ingresar el polinomio, como vec#or, recordando ue los
polinomios se ingresan en la primer componen#e el #efrmino de mayor orden y luego en !orma
descenden#e separados por coma o un espacio$
Ejemplo 2. Consideremos el siguiente polinomio:
P = s
4
+ 4s
3
+ 4s
2
+ s +
20
;ngresamos el polinomio p!J1 4 4 1 2&K y luego=
r!roots+p,-
0n lugar de hacer la operaciof n en dos pasos, podemos hacerlo solo en unoE si #ipeamos
r!roots+J1 4 4 1 2&K, o&#enemos el mismo resul#ado Las cua#ro rafhces del polinomio
an#erior ue surgen de MATLAB son= -$9DD< 1$-<.< ( y 0$9<D< 1$/HD- ($
)i el caso es al revefs, es decir, #engo las rafhces y uiero conocer el polinomio, el comando
pol: es el ue se u#ili*aremos$ )iguiendo con el mismo ejemplo, supongamos ue lo ue #enemos
son las rafhces p
1,-
? -$9DD< 1$-<.< ( y p
/,D
? 0$9<D< 1$/HD- ($ 0n#onces el polinomio al
ue le corresponden esas rafhces es=
4!pol:+Jp1,p2,p3,p4K,-
:o#emos ue el polinomio P ue o&#uvimos es moHnicoE si uisieframos cualuier o#ro, de&er
fhamos mul#iplicar a P por el coe!icien#e principal$ M#ra cosa a #ener en cuen#a es ue siempre ue
pongamos una rafh* compleja de&emos poner su conjugada$
1." Dearrollo en .raccione i#ple
Cuando anali*amos un sis#ema de con#rol, por lo general disponemos de su !unciof n #rans+ !erencia
a la*o cerrado I'!(, donde I'!( ?
5'!(
$ Con lo ue podemos escri&ir la salida en !unciof n de la
#rans!erencia y la en#rada= 5'!( ? I'!( /'!($
)i deseaframos conocer la respues#a #emporal g't( del sis#ema cuando lo e7ci#amos con
una seng al de en#rada r't(, de&emos calcular la #rans!ormada inversa de Laplace, es decir g't( ?
!
1
"5'!(# ? !
1
"I'!( /'!(#$ Como sa&emos, es mafs sencillo de an#i#rans!ormar cuando
se #ra#a de un cocien#e de polinomios, dado ue si lo e7presamos en !racciones
simples podemos u#ili*ar una #a&la de #rans!ormadas de Laplace$
1(emplo /. )upongamos ue #enemos la siguien#e !unciof n #rans!erencia=
16 s + 1 6 1
(s + 2)(s + 4)
y que R(s) =
s
!
s p
Como las rafhces del denominador sor reales y dis#in#as, el mef#odo de desarrollo en !rac+ ciones
simples nos permi#e escri&ir a I'!( /'!( de la siguien#e manera=
16 s + 1 6
=
A
+
B
+
C
s(s + 2)(s +
4)
s s + 2 s + 4
Ahora podemos calcular c't( se la siguien#e !orma=
.
A c(t) =
1
+
s
B
s + 2
+
C
.
s + 4
= !
1
.
A
.
+
s
!
1
.
B
.
+
s + 2
!
1
.
C
.
s + 4
= A + Be
2t
+ Ce
4t
Aara calcular los valores de A, B y C lo hacemos median#e la !of rmula de residuos, dado ue en
es#e ejemplo los polos son de primer orden, resul#a ue
Res"p# = lim(s
p)F(s)
$
donde p es el polo para el cual se es#af
ejemplo=
calculado el residuo$ Leamos como serfha en es#e
A = lim(s)
16 s + 1 6
=
16 ( 0 ) + 1 6
= 2
s$0
s(s + 2)(s +
4)
(0 + 2)(0 + 4)
B = lim (s + 2)
16 s + 1 6
=
16 ( 2 ) + 1 6
= 4
s$2
s(s + 2)(s +
4)
(2)(2 + 4)
C = lim (s + 4)
16 s + 1 6
=
16 ( 4 ) + 1 6
= 6
s$4
s(s + 2)(s +
4)
(4)(4 + 2)
Con estos residuos, queda determinada la salida como: c(t) = 2 + 4e
2t

6e
4t
0n general, es#os caflculos pueden #ornarse muy complicados de reali*ar ia manoi$ Leamos
como se simpli!ican u#ili*ando la !unciof n MATLAB residue$ ;ngresemos nuevamen#e los
polinomios numerador y denominador de la misma !orma como lo venimos haciendo has#a ahora$
;ngresemos ahora la sen#encia=
Jres,pK!residue+num,den,-
0s#a !unciof n nos devuelve dos parafme#ros vec#oriales= en la varia&le res aparecen los
residuos correspondien#es a los polos ue !iguran en la varia&le p, es decir, el primer resid+ uo
corresponde al primer polo y asfh sucesivamen#e$
)i la !unciof n #rans!erencia resul#a ser propia, es decir ue el grado del numerador es igual al del
denominador, podemos ang adir una parafme#ro mafs al argumen#o del lado i*uierdo, ue lo
podemos llamar G$ Leamos como serfha es#o median#e o#ro ejemplo=
Ejemplo 4. Supongamos que queremos hallar f (t) siendo:
1
3
F(s) =
2s
+ 5s
2
+ 3s +
6
"F(s)
#
s
3
+ 6s
2
+ 11s + 6
% f (t) = !
G
2
(s) =
!+20
/(s)
)i aplicamos el comando=
Jres,p,9K!residue+num,den,-
y si armamos, como lo hicimos an#eriormen#e, la !unciof n desarrollada en !racciones sim+ ples, el
#efrmino independien#e es el ue aparece el la varia&le G$ Aor lo #an#o %'!( ?
6 4 3
s+3
+
s+2
+
s+1
+ 2, de donde ahora calcular la f (t) resulta muy sencillo.
)i ahora nues#ro in#erefs es el inverso, es decir ue #enemos una !unciof n escri#a en !rac+
ciones simples y uisieframos o&#ener la !unciof n como cocien#e de polinomios, analfh#icamen#e de&er
fhamos sacar comuf n denominador y hacer #odas las cuen#as correspondien#es$ 0s#o re+ sul#a inmedia#o
con el comando de MATLAB=
Jnum,denK!residue+res,p,9,-
1.$ 0uncio- n tran.erencia a la'o cerrado
Ejemplo 5. Supongamos que disponemos del sistema de la Figura 1 donde G
1
(s) = 0.4;
100
s(s+2)
; H
2
(s) =
s
y +
1
'!( ? 1E y pre#endemos hallar la !unciof n #rans!erencia a
la*o cerrado I'!( ?
5'!(
$ )i aplicamos reducciof n de &loues, o resolviendo el diagrama de
R(s)
E(s) V(s) (s)
& ' &
G
1
(s)
& ' &
G
2
(s)
&
(
)

)
H
1
(s)
*
H
2
(s)
*
,igura 1= %iagrama de &loues
!lujo y aplicando Mason, o&#enemos=
G(s) =
40 s + 80 0
s
3
+ 22s
2
+ 180s + 800
0n MATLAB la !unciof n #rans!erencia a la*o cerrado se puede calcular de dos !ormas=
+ >#ili*ando );M>L;:j 'lo veremos mafs adelan#e($
+ >#ili*ando las !unciones de MATLAB series, parallel, feedbac9 : cloop$
Aara calcular la !unciof n #rans!erencia a la*o cerrado I'!( sigamos los siguien#es pasos=
1. %e!inimos los numeradores y denominadores de las !unciones #rans!erencia de cada &loue
de la siguien#e !orma=
num*1!&.4- den*1!1-
num*2!1&&- den*2!J1 2 &K-
numh2!J1 &K- denh2!J1 2&K-
2. Calculamos la !unciof n #rans!erencia de D'!( a 5'!(=
Jnum#c,den#cK!feedbac9+num*2,den*2,numh2,denh2,%1,-
3. Ahora calculamos la !unciof n #rans!erencia de 1'!( a 5'!( con=
Jnumec,denecK!series+num*1,den*1,num#c,den#c,-
4. Aor uf l#imo calculamos el la*o cerrado=
Jnum, denK!cloop+numec,denec,%1,-
Lo ue o&#uvimos son los vec#ores numerador y denominador de la !unciof n #rans!eren+ cia por
separado$ Oecordemos ue para ingresarla como !unciof n de #rans!erencia a MAT+ LAB, de&emos
u#ili*ar tf$
1.1 Repueta al i#pulo
Ahora ue ya sa&emos como pasar de la respues#a #emporal a Laplace, veri!iuemos ue la
respues#a al impulso de la #rans!ormada de Laplace coincide con la respues#a #emporal$ Aara ello
u#ili*aremos el comando de MATLAB impulse$
1(emplo 9. )upongamos ue #enemos una !unciof n #rans!erencia de la siguien#e !orma=
(s) =
1
(s + a)(s + b)
; donde a = 1, b = 2
)i calculamos ahora la an#i#rans!ormada, desarrollando en !racciones simples como en la secciof n
1$/, resul#a ue -'t( ? e
t
e
-t
$ ;ngresemos los vec#ores numerador y denomi+ nador y luego
ejecu#emos el comando=
impulse+num,den,-
Leremos ue es#e comando devuelve el graf!ico de la ,igura - Como podemos ver, solo nos
mues#ra los primeros 9 segundos de la respues#a$ )i uisieframos ue nos mos#rara 1- segundos,
de&emos de!inir un vec#or de #iempo$ Aara ello ingresemos, por ejemplo,
t!&"&.1"12-
0l vec#or t #endraf como primer elemen#o el 0 y como uf l#imo al 1-$ Cada elemen#o es#araf a una
dis#ancia de 0$1 de su consecu#ivo$ )i ahora in#roducimos es#e parafme#ro en el coman+ do
impulse+num,den,t,, el graf!ico mos#raraf los primeros 1- segundos de la respues#a al
impulso$
:o#emos ue es#e comando no !ue asignado a ninguna varia&leE podrfhamos asignarle un
vec#or, es decir :!impulse+num,den,t,, y asfh #endrfhamos los valores de la salida de la
respues#a al impulso en dicho vec#or$ Aodrfhamos #am&iefn gra!icar es#e vec#or con el comando
plot+t,:,, comando ue veremos en la secciof n 1$H$
A
m
p
l
i
t
u
d
e
T
o
:

Y
(
1
)
0.25
mpulse Response
From: U(1)
0.2
0.15
0.1
0.05
0
0 1 2 3 4 5 6
Time (sec.)
,igura -= Oespues#a al impulso
%ado ue la !unciof n #rans!erencia de un sis#ema lineal invarian#e en el #iempo se de+ !ine
como la #rans!ormada de Laplace de la respues#a al impulso cuando #odas las condi+ ciones
iniciales son nulas, comparemos el resul#ado o&#enido con el ue resul#arfha si cal+ culaframos la
respues#a #emporal$ Aara ello u#ili*aremos el mismo vec#or #emporal t, y la ins#rucciof n
f!exp+%t,Rexp+%21t,$ Ahora podemos comparar los valores o&#enidos desde la respues#a al
impulso con los o&#enidos desde la respues#a #emporal 'por ejemplo, res#afndolos($
1.) Repueta al ecalo-
n
%e la misma !orma ue en la secciof n an#erior, podrfhamos uerer gra!icar la respues#a al es+ calof n
uni#ario$ MATLAB posee un comando, llamado step, para calcular la salida #emporal cuando la
en#rada se #ra#a de un escalof n uni#ario$ Lo uf nico ue necesi#a es#e comando es el numerador y el
denominador de la !unciof n #rans!erencia$
step+num,den,-
:!step+num,den,-
)i u#ili*amos el comando sin asignarle la salida a ninguna varia&le, MATLAB a&re una
ven#ana graf!ica mos#rando el graf!ico de la salida a la e7ci#aciof n escalof n uni#ario, de la
misma !orma ue an#es$ )in em&argo,al igual ue vimos en el comando impulse, cuando efs#e es
asignado a una varia&le, los valores o&#enidos se guardan en el vec#or -$
1(emplo H. Calculemos la respues#a al escalof n uni#ario de la !unciof n #rans!erencia=
G(s) =
(s)
=
4
R(s) s
2
+ 0.8s + 4
)i ingresamos el comando step+num,den,, veremos un graf!ico similar al ue podemos
o&servar en la ,igura /$
!
2
A
m
p
l
i
t
u
d
e
T
o
:

Y
(
1
)
1.6
Step Response
From: U(1)
1.4
1.2
1
0.8
0.6
0.4
0.2
0
0 5 10 15
Time (sec.)
,igura /= Oespues#a al escalof n uni#ario
)i ahora ueremos la respues#a a una en#rada rampa uni#aria, MATLAB no posee ninguf n
comando ue lo resuelva$ Aor lo ue veremos cof mo con el comando step podemos o&#ener una
rampa$ )i seguimos con el ejemplo an#erior y e7ci#amos al sis#ema con r't( ? t, es decir ue /'!( ?
1
, #enemos lo siguien#e=
(s) =
$
D
$
1
s
2
+ 0.8s + 4 s
2
% (s) =
$
D
$
1
s
3
+ 0.8!
2
+ 4s s
Aor lo ue u#ili*ando como denominador de la !unciof n #rans!erencia al polinomio !
/
2 0$U!
-
2 D!, es decir den!J1 &.2 4 &K, y calculando la respues#a al escalof n uni#ario con
step+num,den,, o&#enemos la respues#a a la rampa uni#aria ue se mues#ra en la ,igura D$
1.2 +ra-
.ico
Como vimos en secciones an#eriores los comandos step e impulse gra!ican las respues#as al
escalof n y al impulso respec#ivamen#e, pero ahora vamos a in#roducir algo mafs general$ Aara
gra!icar cualuier !unciof n en general u#ili*aremos el comando plot, ue sof lo necesi#a de!inir el
vec#or a gra!icar en la !orma &afsica
plot+#ector,-
)e o&#iene un graf!ico donde el eje de a&scisas seraf la posiciof n del elemen#o del vec#or y la
ordenada el valor ue #iene el vec#or en dicha posiciof n$ 0n el ejemplo 9, guardamos en el vec#or
- los valores de la salida de la respues#a al impulso$ )i ahora ingresamos plot+:,, en lugar de
#ener segundos en el eje de a&scisas #endremos la can#idad de elemen#os de ese vec#or$ )i ingresamos
plot+t,:,, ahora el eje de a&scisas corresponderaf al vec#or #empo+ ral ya de!inido e iraf desde t
? 0 a t ? 1-, ue es como lo #enfhamos de!inido$ Sra!iuemos
A
m
p
l
i
t
u
d
e
T
o
:

Y
(
1
)
Step Response
From: U(1)
25
20
15
10
5
0
0 5 10 15 20 25
Time (sec.)
,igura D= Oespues#a a la rampa uni#aria
en#onces los valores guardados en el vec#or & $ 0s#os valores corresponden a la respues#a
#emporal, por lo ue el graf!ico de&eraf
dremos el graf!ico de la ,igura <
ser el mismo$ )i ingresamos plot+t,f,, o&#en+
Como podemos ver, no hay casi di!erencias con la !igura -, e7cep#o por el #fh#ulo y los
nom&res de los ejes ue el comando impulse+num,den, pone au#omaf#icamen#e$ Leamos ue
no es di!fhcil si se lo ueremos agregar a un graf!ico, para ello u#ili*aremos las sen#encias title,
xlabel y :label$ 0s#os comandos se u#ili*an luego de ingresar el comando plot, ya ue
#an#o el #fh#ulo, como los nom&res de los ejes, se escri&irafn el la !igura ue se encuen#re a&ier#a=
title+YBespuesta al @mpulsoY,-
xlabel+Y<iempo+se*.,Y,-
:label+Y5alida c+t,Y,-
:o#emos ue el #e7#o ue ueremos ue apare*ca es#af escri#o en#re comillas simples$ Los
comandos an#eriores, pueden ser #am&iefn u#ili*ados con step y impulse, aunue cuando son
u#ili*ados en es#os comandos, el #fh#ulo y el nom&re de los ejes ue #rae la !un+ ciof n por de!ec#o
#am&iefn aparecen$ M#ros comandos ue pueden ser uf #iles a la hora de #ra&ajar con graf!icos son
*rid y text, ue se u#ili*an para agregar una grilla y agregar #e7#o respec#ivamen#e$ 0l
comando text se u#ili*a de la misma !orma ue ue title, es decir, el #e7#o ue apareceraf sera
f el ue se encuen#ra escri#o en#re las comillas simples , pero an#es de&emos ingresar las coordenadas
'@, -( donde ueremos ue apare*ca el #e7#o$ 0l comando *rid, se usa sin parafme#ros$ Leamos el
siguien#e ejemplo=
1(emplo U. )upongamos ue #enemos la !unciof n #rans!erencia de la ,igura 1, ue ya la cal+ culamos
con MATLAB en el 0jemplo -$-$ A&ramos un archivo nuevo e ingresemos lo sigu+ ien#e=
0.25
0.2
0.15
0.1
0.05
0
0 2 4 6 8 10 12
,igura <= Oespues#a #emporal del ejemplo 9
num!J4& 2&&K-
denJ1 22 12& 2&&K-
t!&"&.&1"2-
:!step+num,den,t,-
plot+t,:,-
title+YBespuesta al escalon unitarioY,-
xlabel+Y<iempo +se*.,Y,-
:label+Y5alida del sistemaY,-
text+&.F,1.1,Ymaximo #alorY,-
*rid-
)i ejecu#amos el programa vamos a o&#ener el graf!ico de la ,igura 9$
)upongamos ahora ue ueremos gra!icar en la misma !igura dos o mafs graf!icos para poder
compararlas$ 0s#o es posi&le u#ili*ando el comando hold on % hold off, ue man#iene la
!igura y superpone el siguien#e graf!ico so&re la misma !igura, como veremos en el siguien#e
ejemplo$
1(emplo .. )upongamos ue ueremos gra!icar #res sinusoides con !recuencias di!eren#es,
ingresemos en un archivo nuevo=
t!&"pi32&"21pi-
:1!sin+t,-
:2!sin+t%pi32,-
:3!sin+t%pi,-
plot+t,:1,-
hold on-
plot+t,:2,-
plot+t,:3,-
hold off-
maximo valor
S
a
l
i
d
a

d
e
l

s
i
s
t
e
m
a
1.4
Respuesta al escaln
1.2
1
0.8
0.6
0.4
0.2
0
0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2
Tiempo (seg.)
,igura 9= Oespues#a al escalof n del ejemplo
Luego de ejecu#ar es#as lfhneas veremos ue en la !igura ue resul#a, aparecen / graf!icas en el
mismo color, e imposi&le de iden#i!icar cual corresponde a cada una porue am&as se encuen#ran
gra!icadas con el mismo #ipo de linea y el mismo color$ Aara ello veamos un parafme#ro del #ipo
!tring ue podemos agregar al comando plot para especi!icaciones del es#ilo del graf!ico$ Los
parafme#ros ue !iguran en la Ta&la - son para elegir el color de la lfhnea, los ue se encuen#ran en
la Ta&la / son para elegir el es#ilo de la lfhnea y los ue se encuen#ran el la Ta&la D son para elegir
el #ipo de marca ue apareceraf so&re los pun#os del vec#or gra!icado$
Espec. Color
r
b
w
g
c
m
y
k
rojo
azul (por defecto)
blanco
verde
cian
magneto
amarillos
negro
Ta&la -= 0speci!icadores de color
Ahora especi!iuemos cada uno de los plot con un es#ilo di!eren#e, por ejemplo, en lugar
del comando plot+t,:, escri&amos=
plot+t,:1,Y%.rxY,-
plot+t,:2,Y%%moY,-
plot+t,:3,Y"bsY,-
Espec. Estilo de linea
-

:
-.
linea so lida (por defecto)
linea rayada
linea punteada
linea punto-raya
Ta&la /= 0speci!icadores de linea
Espec. Estilo de marca
+
o
,
-
s
d
x
p
h
signo ma`s
crculo
punto
asterisco
cuadrado
diamante
cruz
estrella de 5 puntas
estrella de 6 puntas
Ta&la D= 0speci!icadores de marca
)i corremos nuevamen#e el archivo veremos ue hay di!erencia en#re una !unciof n y
la o#ra, pero seguimos sin sa&er cuafl corresponde a uef !unciof n$ Aara ello u#ilicemos el
comando le*end, ue pone la leyenda ue ueramos a cada graf!ico$ 0s decir, escri&amos como u
f l#ima linea=
le*end+Ysin+t,Y, Ysin+t%pi32,Y,Ysin+t%pi,Y,-
Ahora si o&servamos el graf!ico de&erfha ser como el de la ,igura H$
Tam&iefn podrfhamos uerer cada graf!ico en una !igura di!eren#e$ Aara ello de&emos
ejecu#ar el comando fi*ure+2, an#es de gra!icar por segunda ve* y fi*ure+3, an#es del uf
l#imo graf!ico$ 0s#as sen#encias se usan sin el comando de hold on % hold off y lo ue
hacen es a&rir una nueva !igura para cada graf!ico$ M#ra opciof n vaflida para MATLAB, por
ejemplo, es ue las #res !unciones apare*can en una sola !igura pero las #res gra!icadas en !orma
independien#e$ Aara ello u#ilicemos subplot+m,n,p,, ue dividiraf a la !igura en m !ilas y n
columnas, pero crea una !igura en la posiciof n p$ ;ngresemos lo siguien#e para ver como !unciona=
clf- %borra el *rafico actual
subplot+3,1,1,-
plot+t,:1,Y.%rY,-
title+Ysin+t,Y,-
subplot+3,1,2,-
plot+t,:2,Y%%mY,-
title+Ysin+t%pi32,Y,-
subplot+3,1,3,-
plot+t,:3,Y"bY,-
1
0.8
sin(t)
sin(t~pi/2)
sin(t~pi)
0.6
0.4
0.2
0
~0.2
~0.4
~0.6
~0.8
~1
0 1 2 3 4 5 6 7
,igura H= Tres graf!icos en una misma !igura
title+Ysin+t%pi,Y,-
:o#emos ue con el sfhm&olo V, comen#amos #e7#o den#ro del archivo$ )i ejecu#amos
nuevamen#e el programa, o&#enemos lo ue se o&serva en la ,igura U
Con respec#o a graf!icos, MATLAB posee muchas o#ras opciones, como gra!icar en es+ cala
logarfh#mica, con lo*lo*, semilo*x : semilo*:, graf!icos en #res dimensiones, plot3,
graf!icos de &arras, bar, e#c$ Tam&iefn permi#e con el comando print, guardar el graf!ico en
un archivo de e7#ensiof n, por ejemplopo!t!cript o .(pg, o #am&iefn lo podemos imprimir con el
mismo comando indicando el nom&re de la impresora$
:o nos olvidemos ue MATLAB cuen#a con una ayuda a la cual podemos recurrir en ca+ so de
no recordar como se u#ili*a un comando$ )i inves#igamos un poco el help, podemos encon#rar
!unciones ue resuelven muchas o#ras cosas in#eresan#es$ ;nvi#o a ue se me#an a conocerlas, como
asfh #am&iefn a ue cono*can las dis#in#as demos#raciones ue pueden encon#rar si #ipean= demo$
! Introduccio- n a
SIMULIN3
Pas#a ahora vimos ue MATLAB dispone de un en#orno de programaciof n con lfhneas de of
rdenes, ahora veremos como se puede suplemen#ar u#ili*ando un in#er!a* de usuario graf!ica
llamada );M>L;:j$ 0s#e en#orno nos permi#e descri&ir graf!icamen#e un sis#ema di&ujando su
diagrama en &loues, ue resul#a muy convenien#e para la simulaciof n y anaflisis de sis#emas
dinafmicos$
!.1 Acceo & decripcio-
n
Aara acceder a );M>L;:j, desde la ven#ana de comandos de MATLAB, #enemos varias op+ ciones=
una es escri&iendo el comando simulin9, de es#a !orma se a&riraf solo una ven#ana
"t
sin(t)
1
0.5
0
~0.5
~1
0 1 2 3 4 5 6 7
sin(t~pi/2)
1
0.5
0
~0.5
~1
0 1 2 3 4 5 6 7
sin(t~pi)
1
0.5
0
~0.5
~1
0 1 2 3 4 5 6 7
,igura U= Tres graf!icos di!eren#es en la misma !igura
con las li&rerfhas disponi&lesE o#ra es desde la &arra de menuf %ile elegir la opciof n 3e> Model, de
es#a !orma se a&ren no sof lo las li&rerfhas sino #am&iefn el en#orno donde vamos a #ra&ajarE por uf
l#imo, e7is#e un &o#of n de acceso direc#o a las li&rerfhas #an#o en el en#orno de #ra&ajo de
MATLAB como en el de );M>L;:j$
>na ve* a&ier#as las li&rerfhas, lo ue encon#raremos depende de la versiof n de MATLAB ue
se encuen#re ins#alada$ :os vamos a re!erir a la versiof n <$/$ %en#ro de la li&rerfha )imulinG se
encuen#ran los elemen#os ue vamos a u#ili*ar organi*ados en su&li&rerfhas de acuerdo con su
compor#amien#o$ Las su&li&rerfhas ue aparecen son=
+ Con#inous 'Bloues para sis#emas en #iempo con#inuo(
+ %iscre#e= 'Bloues para sis#emas en #iempo discre#os(
+ ,unc#ions [ Ta&les
+ Ma#h ')umadores, Sanancias ma#riciales o cons#an#es, e#c$(
+ :onlinear
+ )ignals [ )is#ems'mul#eple7ores, demul#e7ores, e#c$(
+ )in^s 'Sra!icadores, e#c$(
+ )ources 'Larias !uen#es de en#radas(
Con un do&le clic^ so&re la li&rerfha podemos visuali*ar los elemen#os ue posee$ Aor ejemplo
si ingresamos a Continou!, en#re los elemen#os disponi&les u#ili*aremos los sigu+ ien#es=
Deri%ati%e4 bloque derivador, es decir
"u
.
s
Inte5rator4 bloque integrador, funcio n transferencia
1
.
Atate6A,ace8 &loue para e7presar al sis#ema en modelo de es#ados$
0ransfer Fnc8 &loue para e7presar al sis#ema como cocien#e de polinomios$
Bero6,ole8 &loue para e7presar al sis#ema con ceros, polos y una ganancia$
!.! 0uncio- n tran.erencia a la'o
cerrado
0n la )ecciof n -$- vimos como podemos calcular la !unciof n #rans!erencia a la*o cerrado desde
la ven#ana de comandos$ Tomemos el mismo ejemplo para ver como lo hacemos con );M>L;:j,
ingresemos el diagrama en &loues como se puede ver en la ,igura .$
1
n1
.4
Gain
100
s
2
+2s
Transfer Fcn
1
Out1
s
s+20
Transfer Fcn1
,igura .= %iagrama en &loues con );M>L;:j
Aara poder implemen#ar dicho graf!ico se procediof de la siguien#e !orma=
1. Aara inser#ar un &loue de !unciof n #rans!erencia, ya sa&emos ue se encuen#ra en
Continou!, lo #omamos y lo arras#ramos has#a la ven#ana de #ra&ajo de );M>L;:j$ )i
hacemos do&le clic^ so&re el &loue se despliega una ven#ana de propiedades del &loue,
donde #enemos ue ingresar el numerador y el denominador de la misma !orma ue lo
hacemos desde el en#orno de #ra&ajo de MATLAB, es decir en#re corche#es y separado por
espacios$ )i en lugar de seleccionar el &loue de !unciof n #rans!erencia elegimos el &loue de
polos y ceros, los parafme#ros a de!inir serafn los polos, los ceros y la ganancia$
2. Aara inser#ar o#ro &loue igual no es necesario reali*ar el fh#em an#erior nuevamen#e,
podemos seleccionar el &loue an#erior, haciendo un clic^ con el &o#of n derecho del mouse,
copiar el &loue y pegarlo donde ueramos$ 0s#o mismo se puede hacer sim+ plemen#e
arras#rando el o&je#o seleccionado con el &o#of n derecho del mouse$ %e la misma !orma ue
an#es, ingresamos los parafme#ros de es#a !unciof n de #rans!erencia$ Aara girar el &loue,
para ue uede mejor orien#ado para hacer la realimen#aciof n, #enemos ue seleccionar el
o&je#o, ir a %ormat de la &arra de menuf , y seleccionar %lip BlocG o simplemen#e con las #eclas
ctr%f$
3. 0l &loue de ganancia lo encon#ramos en Mat;, lo mismo ue los sumadores$ Aara
ingresarlos a la !igura procedemos de la misma manera, arras#rando el o&je#o has#a donde
ueremos u&icarlo$ 0l sumador, por de!ec#o, viene con dos en#radas sumadas, si hacemos
do&le clic^ so&re efl, podemos no solo cam&iar el signo ue ueramos sino #am&iefn
agregarle las en#radas ue ueramos, en es#e caso solo modi!icamos 22 por
2$ M#ra propiedad ue podemos modi!icar es la !orma del icono$ :o#emos ue cuando
hacemos un do&le clic^ en cualuier o&je#o, encon#ramos una peueng a ayuda
en la par#e superior de la ven#ana, efs#o nos es uf #il para sa&er con ue da#os hay ue
comple#ar cada campo$ Aara el &loue de la ganancia, solo ingresamos el valor ue
corresponde 0$D$
4. Aara unir los &loues solo #enemos ue hacer un clic^ en la salida de un &loue y arras#ra
el mouse has#a la en#rada de o#ro, cuando sol#amos, si la conecciof n es#af
&ien hecha, marcaraf una !lecha negra, en caso de es#ar uniendo con un nodo, de+
&eremos ver un cuadradi#o negro$ Aara &orrar cualuier elemen#o, simplemen#e lo
seleccionamos y con la #ecla C.= se elimina$
5. Aor uf l#imo nos !al#a solo indicar cuafl es la en#rada y cual es la salida, es#o lo hacemos para
poder sacar la #rans!erencia a la*o cerrado, de o#ra !orma no lo pondrfhamos$ La necesidad de
marcar la en#rada y la salida es para ue MATLAB sepa desde donde has+ #a donde vamos a
uerer la #rans!erencia$ 0s#os &loues los encon#ramos en )ignal! J )-!tem!, se llaman G;n1G e
GMu#1G$
6. )alvemos el archivo, por ejemplo con el nom&re F,uncTransG, si ingresamos desde la ven#ana
de comando de MATLAB las sen#encias
J(,>,;,CK!linmod+YWuncttransY,-
Jnum,denK!ss2tf+(,>,;,C,-
o&#enemos la !unciof n #rans!erencia$ La primer orden produce un modelo de es#ado del
sis#ema de &loues, #omando la en#rada y la salida ue seleccionamosE y la segun+ da sen#encia
convier#e ese modelo de es#ados en el numerador y el denominador de la !unciof n
#rans!erencia$ 0n es#e caso el resul#ado es
num!J4& 2&&K
den!J1 22 12& 2&&K
ue si los comparamos con los o&#enidos an#es son idefn#icos$
!." Repueta al Ecalo-
n
)iguiendo con el sis#ema de la ,igura ., nos in#eresa sa&er ahora cof mo responde a una en#rada
escalof n uni#ario$ Como #enemos la !unciof n #rans!erencia a la*o cerrado, podrfhamos u#ili*ar el
comando step+num,den, desde la ven#ana de comandos para o&#ener la salida$ Aero veamos cof
mo lo podemos hacer desde );M>L;:j$ Aara ello cam&iemos el &loue de en#rada por un
&loue de en#rada escalof n, ue lo encon#ramos el la li&rerfha )ource! &ajo el nom&re F)#epG$ A
dicho &loue podemos modi!icarle algunos parafme#ros como el #iempo en ue se reali*araf el
escalof n, el valor inicial y !inal de escalof n y en caso de ue lo necesi#emos discre#o, el #iempo de
mues#reo$ Aara nues#ro ejemplo, elegimos como valor inicial 0, valor !inal 1 y #iempo de
reali*aciof n del escalof n 0!eg$$ Aara poder visuali*ar la salida, de&emos conec#ar a la salida un
osciloscopio$ 0s#e &loue lo encon#ramos en )inG! &ajo el nom&re F)copeG$ Luego de agregados
es#os &loues, el sis#ema resul#an#e es el ue o&servamos en la ,igura 10$
Step
.4
Gain
100
s
2
+2s
Transfer Fcn
Scope
s
s+20
Transfer Fcn1
,igura 10= )is#ema e7ci#ado con un escalof n
1.4
1.2
1
0.8
0.6
0.4
0.2
0
0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2
,igura 11= )eng al ue mues#ra el osciloscopio
Herramientas de MATLAB - 1
)i hacemos do&le clic^ so&re el &loue F)copeG, veremos la salida del sis#ema como en la
,igura 11$ 0s#e &loue #am&iefn posee algunas propiedades ue podemos modi!icar, en#re ellas es#a
fn los valores de los ejes, el #fh#ulo y la escala$ Cuen#a #am&iefn con Koom para visuali*ar alguna
*ona en de#alle$ M#ra propiedad es la posi&ilidad de asignarle los da#os ue posee a una varia&le$
Luego desde la ven#ana de comandos podemos visuali*ar los valores o gra!icarlos dado ue
);M>L;:j guarda #am&iefn en una varia&le el vec#or #emporal ue u#ili*a en la simulaciof n,
dicha varia&le se llama tout$
)i en lugar de la respues#a al escalof n uni#ario ueremos la respues#a al impulso, dado
ue );M>L;:j no posee un &loue generador de impulsos, de&emos generarlo noso#ros como
res#a de dos escalones$
!.$ Utili'acio- n de para- #etro &a
de.inido
);M>L;:j nos permi#e u#ili*ar varia&les de!inidas ya sea en la ven#ana de comando de MATLAB,
como #am&iefn en archivos del edi#or$ Aara ello de&emos de!inir las varia&les con an#icipaciof n y
luego u#ili*arlas den#ro de los &loues con el mismo nom&re$ %e es#a !orma, );M>L;:j iden#i!ica
el valor de dicho parafme#ro y es el ue u#ili*a en los caflculos$ 0s#o resul#a apropiado cuando
ueremos u#ili*ar un mismo diseng o para dis#in#os valores de parafme#ros, o nos permi#iraf
u#ili*ar el mismo sis#ema cada ve* ue nos encon#remos con pro&lemas similares$
Herramientas de MATLAB - 2
*
ESTABLDAD CON MATLAB
0n es#e apun#e veremos algunas !unciones de MATLAB relacionadas con lugar de las rafhces, graf!ico
de Bode y de :yuis#$ 0n#re ellas nos cen#rali*aremos en de#allar las siguien#es=
Comando Breve explicacio n
rlocus
rlocfind
rltool
Ppmap
bode
n:quist
Calcula y grafica el lugar de las races de un sistema LT SSO
Encuentra la ganancia del lugar de las races para polos dados
Permite disen ar un compensador SSO usando lugar de las ra
ces Calcula y grafica polos y ceros de un sistema LT
Respuesta en frecuencia de Bode para modelos LT
Respuesta en frecuencia de Nyquist para modelos LT
Ta&la 1= Comandos de Ma#la&
1 Lu5ar de la Ra-/ce
A con#inuaciof n de#allaremos el uso de las !unciones de MATLAB relacionadas con el graf!ico
del lugar de las rafhces$ 0n donde ci#aremos algunos ejemplos para clari!icar$
1.1 ,unciof n
rlocus
Calcula y gra!ica el lugar de las rafhces de un sis#ema LT; );)M$ 0l graf!ico del lugar de las rafhces
se u#ili*a para anali*ar el la*o de realimen#aciof n nega#iva de la ,igura 1 y mues#ra las #rayec#orias
de los polos a la*o cerrado cuando la ganancia 2 varfha de 0 a .$
& / &
s#s
&

)
G(s) =
s # s ( s )
1 + $s#s(s)
$
,igura 1= Oealimen#aciof n nega#iva y su !unciof n de #rans!erencia
Herramientas de MATLAB - 3
La !unciof n puede u#ili*arse de la siguien#e !orma=
B!rlocus+s:s,Z,
JB,ZK!rlocus+s:
s,
donde en el parafme#ro / ma#ricial devuelve el lugar complejo de la rafh* para la ganancia 2$ 0n el
primer caso indicamos uef in#ervalo de valores de ganancias es#amos in#eresados, mien#ras ue si
no le ingresamos dicho parafme#ro, 2 varfha de 0 a .$ 0l sis#ema puede ser ingresado como !unciof
n #rans!erencia, con el comando tf o Pp9, o simplemen#e pasafndole el numerador y el
denominador del sis#ema, es decir rlocus+num,den,$
1.! ,unciof n
rlocfind
0s#a !unciof n nos permi#e hallar la ganancia del graf!ico del lugar de rafhces correspondien#e para
un conjun#o de polos dados$ 0l comando ingresado de la siguien#e !orma
JZ,polosK!rlocfind+s:s
,-
se u#ili*a para seleccionar la ganancia del lugar de las rafhces generado por rlocus en !orma in#e+
rac#iva$ Luego de ejecu#ado dicho comando, aparece una cru* so&re el graf!ico del lugar de las ra
fhces con el ue seleccionaremos el lugar deseado para los polos a la*o cerrado$ La ganancia asociada
con el pun#o seleccionado es la ue es#e comando devuelve en la varia&le 2 y #odos los polos a los
ue le corresponde esa ganancia los devuelve en la varia&le polo!$
1." ,unciof n
s*rid
Senera una grilla en el plano complejo L!L para un lugar de las rafhces ya e7is#en#e o un mapa de
polos y ceros$ )e di&ujan lfhneas de amor#iguamien#o 'M( y !recuencia na#ural 'N
n
( cons#an#es$ 0l
comando se u#ili*a de la siguien#e !orma=
s*rid+P,wn
,
1.$ 0jemplos
1(emplo 1. %ada la siguien#e !unciof n de #rans!erencia a la*o
a&ier#o
G(s)H(s) =
$
,
s(s +
2)
vamos a calcular el lugar de las rafhces$ Aara ello ingresamos los siguien#es comandos desde el
%ork!pace de MATLAB
s:s!Pp9+JK,J& %2K,1,- o s:s!tf+1,J1 2
&K,- rlocus+s:s,-
o&#eniendo la ,igura -
)i #omamos el mismo sis#ema pero le agregamos un polo en p ? / y o#ro en p ? D, e
ingresamos nuevamen#e los comandos correspondien#es, o&#enemos los graf!icos de la ,igura / res+
pec#ivamen#e, en donde o&servamos como el graf!ico se ve !or*ado hacia la derecha de&ido a cada
polo ue agregamos$
1(emplo -. )upongamos ahora una plan#a con la siguien#e !unciof n de #rans!erencia=
Herramientas de MATLAB - 4
G(s)H(s) =
$(s + 1)
, donde & = 10, 9, 8 y
3
s
2
(s +
&)
)i ejecu#amos los mismos comandos ue en el ejemplo an#erior, es decir, ingresamos primero el
sis#ema y luego le calculamos el lugar de rafhces, o&#enemos los resul#ados ue se o&servan en la
,igura D y <

m
a
g

A
x
is

m
a
g

A
x
i
s

m
a
g

A
x
i
s

m
a
g

A
x
is
Herramientas de MATLAB - 5
2
1.5
1
0.5
0
~0.5
~1
~1.5
~2
~3 ~2.5 ~2 ~1.5 ~1 ~0.5 0 0.5 1 1.5 2
Real Axis
,igura -= Sraf!ica del lugar de las rafhces
4
3
2
1
0
~1
~2
~3
~4
~6 ~5 ~4 ~3 ~2 ~1 0 1 2
Real Axis
,igura /= Sraf!ica del lugar de las rafhces
8 8
6 6
4 4
2 2
0 0
~2 ~2
~4 ~4
~6 ~6
~8
~10 ~8 ~6 ~4 ~2 0 2 4
Real Axis
~8
~10 ~8 ~6 ~4 ~2 0 2
Real Axis
,igura D= Sraf!ica del lugar de las rafhces para O ? 10 y O ? ., respec#ivamen#e

m
a
g

A
x
is

m
a
g

A
x
is
/
6 4
3
4
2
2
1
0 0
~1
~2
~2
~4
~3
~6
~8 ~6 ~4 ~2 0 2
Real Axis
~4
~4 ~3 ~2 ~1 0 1 2
Real Axis
,igura <= Sraf!ica del lugar de las rafhces para O ? U y O ? /,
respec#ivamen#e
07is#en casos donde ueremos anali*ar el compor#amien#o de un sis#ema a la*o cerrado 'LC(,
pero donde el parafme#ro varia&le no aparece como un !ac#or mul#iplica#ivo 'como lo es la
ganancia 2 en los ejemplos an#eriores( del sis#ema a la*o a&ier#o 'LA($ 0n esos casos #enemos ue
reescri&ir la ecuaciof n carac#erfhs#ica de !orma #al ue el parafme#ro varia&le apare*ca como un
!ac#or mul#iplica#i+ vo de I'!(+'!( y asfh podremos u#ili*ar el comando rlocus$ Los ejemplos a
con#inuaciof n ilus#ran cof mo podemos proceder en dis#in#os casos$
1(emplo /. Sra!iuemos el lugar de las rafhces del diagrama de la ,igura 9$ La !unciof n de
#rans!eren+
R(s)
& /
& &
2 0
(s+1)(s+4)
&
1
C(
&
s)
s
(
)

)
k
*
,igura 9= )is#ema de con#rol
cia a LA resul#a
G(s)H(s) =
20
s(s + 1)(s + 4) + 20ks
donde la ecuaciof n carac#erfhs#ica es !
/
2 <!
-
2 D! 2 -0 2 -0G! ? 0$ Como la varia&le ajus#a&le
no aparece como !ac#or mul#iplica#ivo, llamemos 2 ? -0G y reescri&amos la ecuaciof n carac#er
fhs#ica$ )i ahora dividimos am&os miem&ros por el polinomio ue no #iene #efrminos con 2,
#enemos
1 +
$ s nu m ( s )
s
3
+ 5s
2
+ 4s + 20
que es del tipo 1 + $
"en(s)
.
Ahora podemos gra!icar el lugar de las rafhces u#ili*ando la sen#encia rlocus+num,den,$
1(emplo D. Consideremos una plan#a con !unciof n #rans!erencia I
0
'!( y un con#rolador en realimen+
#aciof n con !unciof n #rans!erencia C'!(, donde
1
G
0
(s) =
(s + 1)(s + 2)
y C(s) = 4
(s + &)
$
s
cueremos conocer cof mo varfha la u&icaciof n de los polos a la*o cerrado para O variando en O
2
$
Leamos ue los polos a la*o cerrado del sis#ema son los ceros de
%
2
1 + 4
s + &
s(s
2
+ s
2)
=
s(s
+ s 2) + 4s + 4&
= 0 s(s
2
+ s + 2) + 4& = 0
s(s
2
+ s 2)

m
a
g

A
x
i
s
)i dividimos am&os miem&ros por !'!
-
2 ! 2 -(, conver#imos la ecuaciof n a la !orma 1 2
GI'!(, donde
k = 4& y G(s) =
1
s(s
2
+ s + 2)
Lo uf nico ue ueda ahora es ingresar el comando rlocus para o&#ener la ,igura H
3
2
1
0
~1
~2
~3
~1 ~0.8 ~0.6 ~0.4 ~0.2 0 0.2 0.4 0.6 0.8 1
Real Axis
,igura H= >&icaciof n de los polos a LC cuando el cero del con#rolador varfha
! Repueta en 0recuencia
0n es#a secciof n de#allaremos las !unciones de MATLAB para gra!icar la respues#a en !recuencia, es
decir para o&#ener los graf!icos de Bode y de :yuis#, con las !unciones bode y n:quist
respec#i+ vamen#e$
!.1 ,unciof n
bode
0s#a !unciof n nos permi#e o&#ener la respues#a en !recuencia de Bode para modelos LT;$ 0n#re las
!ormas mafs comunes de u#ili*ar es#a !unciof n se encuen#ran=
+ bode+s:s,= di&uja el graf!ico de Bode del modelo LT; !-! 'creado con tf o Pp9($ 0l
rango de !recuencia y el nuf mero de pun#os ue #omaraf para gra!icar los elige en !orma
au#omaf#ica$
+ bode+s:s,wmin,wmax,= di&uja el graf!ico de Bode para !recuencias en#re >
min
y >
ma@
'en rad1seg($
+ bode+s:s,w,= u#ili*a el el vec#or > de !recuencias propues#o para calcular el Bode$ %ado
ue el vec#or > de&e es#ar en escala logarfh#mica, e7is#e en MATLAB la !unciof n lo*space
ue genera un vec#or de !recuencias en !orma logarfh#mica$
+ bode+s:s1,s:s2,...,w,= di&uja el graf!ico de Bode de varios modelos LT; en una sola
!igu+ ra$ 0l parafme#ro > es opcional, #am&iefn se puede especi!icar color, #ipo de linea y
marcadores como se los u#ili*a con el comando plot$
+ Jma*,faseK!bode+s:s,w, o Jma*,fase,wK!bode+s:s,= devuelve la magni#ud y
la !ase en grados$ 0s#e comando no di&uja en pan#alla, magP:B:BGQ y &a!eP:B:BGQ de#ermina la
respues#a en >'G($ Aara o&#ener magni#udes en dB, de&emos calcular
ma*db!2&1lo*1&+ma*,$
P
h
a
s
e

(
d
e
g
)
;

M
a
g
n
i
t
u
d
e

(
d
B
)
T
o
:

Y
(
1
)
1(emplo <. %ada la siguien#e #rans!erencia, ueremos o&#ener el graf!ico de Bode
I'!( ?
-<00
s(s + 5)(s +
50)
Aara ello ejecu#emos los siguien#es comandos desde el >orG!pace=
X!Pp9+JK,J& %F
%F&K,2F&&,- bode+X,-
Bode Diagrams
From: U(1)
50
0
~50
~100
~150
~50
~100
~150
~200
~250
~300
~1 0 1 2 3
10 10 10 10 10
Frequency (rad/sec)
,igura U= Sraf!ico de Bode o&#enido con el comando bode+X,
!.! ,unciof n M:quist
0s#a !unciof n nos permi#e o&#ener la respues#a en !recuencia de :yuis# para modelos LT;$ 0n#re las
!ormas mafs comunes de u#ili*ar es#a !unciof n se encuen#ran=
+ n:quist+s:s,= di&uja el graf!ico de :yuis# de !-! ue es un modelo LT; creado con
los comandos tf o Pp9$ 0l rango de !recuencia y el nuf mero de pun#os ue u#ili*araf para
gra!icar son elegidos en !orma au#omaf#ica$
Las dis#in#as al#erna#ivas para es#e comando son las misma ue para la !unciof n bode,
e7cep#o el uf l#imos de los fh#ems ue se reempla*a por=
+ JBe,@mK!n:quist+s:s,w, o JBe,@m,wK!n:quist+s:s,= devuelve la par#e real e
ima+ ginaria de la respues#a en !recuencia, a lo largo de >$ La respues#a a la !recuencia >'G(
es#af dada por /eP:B:BGQR$mP:B:BGQ
1(emplo 9. %ado el sis#ema cuya !unciof n #rans!erencia viene dada por
G(s) =
1
(s +
1)
2
o&#ener el diagrama de :yuis#$
Aara ello ingresamos los siguien#es comandos
X!Pp9+JK,J%1
%1K,1,- n:quist+X,
y o&#uvimos la ,igura .

m
a
g
i
n
a
r
y

A
x
i
s
T
o
:

Y
(
1
)
0.8
Nyquist Diagrams
From: U(1)
0.6
0.4
0.2
0
~0.2
~0.4
~0.6
~0.8
~1 ~0.8 ~0.6 ~0.4 ~0.2 0 0.2 0.4 0.6 0.8 1
Real Axis
,igura .= Sraf!ico de :yuis# o&#enido con el comando
n:quist+X,
" Dien6 o de
control
Aresen#aremos ahora una herramien#a de diseng o in#erac#ivo llamada rltool ue puede u#ili*arse
para=
+ Anali*ar el lugar de las rafhces para los sis#emas de con#rol LT; );)M$
+ 0speci!icar los parafme#ros de un compensador de realimen#aciof n= polos, ceros y ganancia$
+ 07aminar cof mo cam&iando los parafme#ros del compensador, cam&ia el lugar de las rafhces
y varias respues#as a la*o cerrado, como la respues#a al escalof n uni#ario, respues#a al impulso
uni#ario, diagramas de Bode y1o :yuis# en#re o#ros$
".1 ,unciof n
rltool
Aara e7plicar mejor el uso de es#a herramien#a, seguiremos un ejemplo ue involucra un servome+
canismo elec#ro+hidrafulico, ue esencialmen#e es un ampli!icador de po#encia elec#ro+hidra
fulico, con#rolado por una vaflvula pilo#o y un ac#uador, ,igura 10$ 0s#os servomecanismos son
muy pe+ ueng os y se u#ili*an para con#rolar posiciof n$ >n modelo a la*o cerrado para el con#rol
de posiciof n puede represen#arse como aparece en la ,igura 10 'de#alles del modelado ma#emaf#ico
del mecanis+ mo y su lineali*aciof n ver I-, pag$ .1J o I1, pag$ D/J($
0n la ,igura 10, 2'!( represen#a el compensador ue deseamos diseng ar$ 0s#e compensador pue+
de ser #an#o una ganancia como un sis#ema LT;$ La plan#a lineali*ada viene dada por
D$10
H
G
ser'o
(s) =
s(s + 250)(s
2
+ 40s +
9.10
4
)
Aara es#e ejemplo, ueremos diseng ar un con#rolador de !orma #al ue la respues#a al escalof n a
la*o cerrado cumpla con las siguien#es especi!icaciones de diseng o=
+ 0l #iempo de es#a&lecimien#o menor a 0$0< seg$
+ 0l so&revalor maf7imo menor al <V$
u
& / &
$(s)
(
)
#
&
G
ser'o
(s)
&
,igura 10= )ervomecanismo elec#ro+hidrafulico y el diagrama de &loues del sis#ema mafs el com+
pensador, respec#ivamen#e$
,igura 11= Len#ana de la herramien#a rltool
Aara comen*ar, desde el >orG!pace de MATLAB, ingresemos el comando rltool, con el ue
a&rimos una nueva ven#ana, ,igura 11, en la ue encon#ramos=
+ >na &arra de menuf , en#re los ue encon#ramos, por ejemplo, una opciof n para
impor#ar1e7por#ar modelos y para edi#arlos$
+ >n graf!ico de &loues ue es la es#ruc#ura de realimen#aciof n ue u#ili*aremosE si
hacemos clicG so&re el &loue 2, podemos ver o edi#ar el compensador, y so&re P, % o +
para ver las carac#erfhs#icas de diseng o del modelo$
+ >n &o#of n para cam&iar en#re realimen#aciof n nega#iva y posi#iva$
+ >na descripciof n del compensador ue con!iguraremos$ Aor de!ec#o #oma el valor de
ganancia igual a 1 '2 ? 1($
+ Cua#ro &o#ones ue u#ili*aremos para agregar polos o ceros del compensador, &orrarlos o
moverlos$
+ >n cuadro de #e7#o para edi#ar la ganancia ue modi!icaraf el lugar de los polos a LC$
+ Bo#ones para edi#ar los ejes$
+ Bo#ones para modi!icar el Aoom del graf!ico$
+ C;ecG bo@e! para a&rir herramien#as de anaflisis de respues#a del sis#ema$
+ >na &arra de !tatu! ue provee in!ormaciof n$
>na ve* a&ier#a la ven#ana, de&emos impor#ar el modelo del sis#ema para el ue ueremos
diseng ar un compensador$ 07is#en cua#ro !ormas para impor#ar un modelo LT;, y efs#as son=
1. Cargar el modelo desde el >orG!pace de MATLAB, con el comando rltool+s:s,comp,,
don+ de !-! es la !unciof n #rans!erencia del sis#ema ingresada como #al, y comp la del
compensador 'opcional($
2. Cargar el modelo desde un archivo de e7#ensiof n .mat de un disco$
3. Cargar &loues LT; );)M desde un diagrama de );M>L;:j$
4. Crear los modelos u#ili*ando tf, ss o Pp9$
Aara es#e ejemplo, impor#emos nues#ro modelo del servomecanismo desde el >orG!pace$ Aara
ello de&emos previamen#e ingresar el modelo con la !unciof n tf o Pp9 y guardarla en una
varia&le, por ejemplo I!er"o$ >na ve* cargado el modelo, lo podemos impor#ar desde el menuf
$mport Model del menuf %ile$ 0n la ven#ana de impor#aciof n ue se desplegaraf encon#raremos
+ >n diagrama correspondien#e a la es#ruc#ura de realimen#aciof n ue u#ili*aremos$
+ >n &o#of n ue conmu#a en#re las dos posi&les es#ruc#uras de realimen#aciof n ue hay
con!igu+ radas$
+ >na lis#a para seleccionar desde dof nde se impor#araf el modelo$
+ >na lis#a de sis#emas LT; disponi&les o &loues$
+ >n cuadro de #e7#o para edi#ar el nom&re del diseng o$
+ Tres &o#ones con !lechas para #rans!erir el modelo seleccionado de la lis#a al componen#e de
diseng o del modelo, ya sea P, % o +$

m
a
g

A
x
e
s
+ Tres cuadros de #e7#os para los nom&res de los componen#es del diseng o$ %esde es#e recuadro
podemos #am&iefn de!inir !unciones de #rans!erencias para cada componen#e, u#ili*ando tf,
ss o Pp9$
Na sea en cualuiera de las dos con!iguraciones, cada componen#e represen#a= % + pre!il#roE P +
modelo de la plan#aE + + dinafmica de la plan#aE 2 + compensador a diseng ar$
)iguiendo con nues#ro ejemplo, carguemos el modelo lineal en P, seleccionafndolo desde la lis#a
de >orG!pace y luego haciendo un clic^ so&re la !lecha ue seng ala a P, o simplemen#e #ipeando en
el cuadro de #e7#o I!er"o 'nom&re de nues#ro modelo($ Luego de seleccionar Mj, en la regiof n de
graf!ico de la ven#ana de diseng o, apareceraf el graf!ico del lugar de las rafhces del modelo
ingresado, ,igura 1-$ Los peueng os cuadros rojos so&re efl corresponden a los polos a la*o
cerrado correspon+ dien#es al valor de la ganancia del compensador$
600
Root Locus Design
400
200
0
~200
~400
~600
~800 ~600 ~400 ~200 0 200 400 600
Real Axis
,igura 1-= Lugar de las rafhces ue resul#a cuando cargamos el modelo
Leamos has#a uef valor de ganancia podemos aplicarle al compensador para ue se man#enga
es#a&le a la*o cerrado, es decir, has#a ue los polos a la*o cerrado se man#engan en el semi+plado
i*uierdo del plano complejo$ 0s#e lfhmi#e lo podemos calcular de la siguien#e !orma=
1. Mover el pun#ero del mouse so&re un de los cuadrados rojos, donde apareceraf una mano en
lugar del pun#ero$ Arras#rar dicho cuadrado has#a lo mafs cerca del eje imaginario$ M&servar
ue el valor de la ganancia se va modi!icando$
2. Como no podemos sa&er si los polos se encuen#ran e7ac#amen#e so&re el eje imaginario, u#ili+
*ar el Aoom para acercarlos mejor$ >na ve* alcan*ado el eje imaginario, ui#ar el Aoom con el
&o#of n de los &inoculares$
3. Aor uf l#imo, veri!icar ue la ganancia correspondien#e para ue los polos a la*o cerrado sean
imaginarios puros es apro7imadamen#e D/$< 'ganancia crHStica($
0l valor de la ganancia podrfha ha&erse modi!icado direc#amen#e desde el recuadro correspon+
dien#e a la ganancia del compensador, has#a ue los polos a la*o cerrado se u&iuen so&re el eje
imaginario$
An#es de diseng ar el compensador, uisieframos conocer cof mo se compor#a el sis#ema a la*o
cerra+ do para un de#erminado valor de ganancia$ Aara ello, de&emos seleccionar el c;ecG bo@ ue
aparece

m
a
g

A
x
e
s
en la par#e in!erior de la ven#ana la opciof n del graf!ico ue no in#eresa conocer$ Aara es#e ejemplo
las especi!icaciones de diseng o vienen dadas so&re la respues#a al escalof n, por lo ue seleccionare+
mos dicha opciof n, ue desplegaraf una ven#ana de LT;L;0k0O$ )i edi#amos el valor de la
ganancia, por ejemplo -0, y presionamos 0:T0O, veremos como la respues#a al escalof n de la ven#ana
LT;L;0+ k0O se modi!icof $ Oecordemos ue en dicha ven#ana, cuando hacemos clicG so&re la
!igura con el &o#of n derecho del mouse, podemos seleccionar ue nos mues#re las carac#erfhs#icas ue
necesi#amos, en es#e caso el so&revalor y el #iempo de es#a&lecimien#o$ Aodemos o&servar ue en
es#e caso por mafs ue modi!iuemos la ganancia, las especi!icaciones nunca se alcan*an$ Aor lo ue
para ue se cumplan de&emos diseng ar un compensador$
Aara diseng ar el compensador, de&emos conocer dof nde ueremos ue se u&iuen los polos a
la*o cerrado para ue las especi!icaciones se cumplan$ Aor eso vamos a elegir del menuf (ools, la
opciof n Add IridEBoundar-, ue reali*araf rec#as donde se especi!iuen, en es#e caso le indicaremos
el #iempo de es#a&lecimien#o igual a 0$0< seg$ y el !ac#or de amor#iguamien#o igual a 0$H 'ver I1,
con#ra#apaJ( $ >na ve* seleccionados dichos valores, veremos ue en el graf!ico aparecen las dos
rec#as correspondien#es a las carac#erfhs#icas ingresadas$ Ahora sa&emos ue para ue se cumplan las
especi!icaciones de diseng o, los polos dominan#es del sis#ema a la*o cerrado de&erafn u&icarse en la
in#ersecciof n de dichas rec#as$ Aara ello, de&emos Lmo"erL el lugar de las rafhces agregando polos y
ceros al compensador$ Aara ello de&emos proceder de alguna de las siguien#es !ormas=
+ Utili'ando lo botone de a5re5ar7 o 8uitar7 polo o cero4 seleccionar el boto n
correspon- diente, luego con el puntero del mouse indicar do nde se ubicara el
polo y hacer un click en dicho lugar.
Aara nues#ro ejemplo, u&iuemos un par de polos complejos conjugados por de&ajo y a la
derecha de los polos a la*o a&ier#o$ Agreguemos un par de ceros complejos conjugados LcercaL
de los polos a la*o a&ier#o$ M&servemos cof mo se modi!icof el lugar de las rafhces$ )i #odavfha
no pasa por la in#ersecciof n de las rec#as correspondien#es a las carac#erfhs#icas de diseng o,
mover los polos y1o ceros$ >na ve* conseguido es#o, modi!icar la ganancia para ue los
polos a la*o cerrado se u&iuen donde ueremos, ,igura 1/$ Aor uf l#imo nos ueda veri!icar
con la respues#a al escalof n ue se cumplen las especi!icaciones dadas, ,igura 1D$
600
Root Locus Design
400
200
0
~200
~400
~600
~800 ~600 ~400 ~200 0 200 400 600
Real Axis
,igura 1/= >&icaciof n deseada de los polos a LC$
A
m
p
l
i
t
u
d
e
T
o
:

Y
(
1
)
;:S0:;0O;A %0 );)T0MA) %0 CM:TOML
Step
Respons
e
Fr
om
:
U(
1)
1
0.8
0.6
0.4
0.2
0
0 0.005 0.01 0.015 0.02 0.025 0.03 0.035 0.04 0.045 0.05
Time
(sec.
)
,igura 1D= Oespues#a al escalof n del sis#ema a LC$
+ Utili'ando el #enu- Edit compensator del #enu- Tools, o haciendo un click
sobre el compensa- dor del grafico de bloques de la derecha. Si ya realizamos el
procedimiento anterior, sabemos que los polos, ceros y ganancia del
compensador se puede aproximar con
$ =
9.7
Polos = 110
140i
Ceros = 70
270i
>na ve* encon#rado el compensador ue lleva a nues#ro sis#ema a ue cumpla con las
especi!i+ caciones dadas, podemos guardar los parafme#ros desde el menuf %ile, con la opciof n
1@port podemos llevarlo a un disco, o al >orG!pace de MATLAB$
1<
;:S0:;0O;A %0 );)T0MA) %0 CM:TOML
19
;:S0:;0O;A %0 );)T0MA) %0 CM:TOML
Como se describi en la seccin anterior, un sistema de control es una interconexin
de componentes que forman una configuracin del sistema que proporcionar una
respuesta deseada del sistema.
Un sistema de control puede representarse mediante un bloque:
Figura 1.1 Representacin de un Sistema de Control
El objetivo del control automtico es mantener en determinado valor de operacin las
variables del proceso, anulando la accin de las perturbaciones sobre la variable
controlada. Para tal propsito se disea el controlador adecuado permitiendo obtener
salidas controladas que cumplan con los requerimientos de diseo.
Para lograr dicho objetivo, tenemos que conocer las leyes fsicas de la planta o
proceso, plantear el sistema de ecuaciones y escoger el controlador para obtener la
salida deseada.
1.1E9e#plo de Site#a de Control
1.)Clai.icaci(n de Site#a de Control
a: Site#a de Control Lineale & no Lineale
De acuerdo a su naturaleza, se pueden clasificar como sistemas de control lineal y no
lineal.
Un sistema de control lineal es aquel que posee la propiedad de superposicin: si una
entrada consiste en la suma ponderada de varias seales, entonces la salida es
simplemente la superposicin (suma ponderada) de las respuestas del sistema para
cada una de estas seales.
Figura 1.2 Sistema de Control Lineal
Todos los sistemas son inherentemente no lineales. Si las variaciones de magnitud de
las variables del proceso son pequeas, entonces el sistema puede lineal izarse y
1H
;:S0:;0O;A %0 );)T0MA) %0 CM:TOML
aplicarse las tcnicas de control lineal; sin embargo, si dichas variaciones son amplias,
entonces tienen que aplicarse tcnicas de control no lineal.
Ejemplo de ecuacin diferencial que representa a un Sistema de Control lineal:
0 / <
( ' ( ' ( '
+ +
t t t
@ @ @
Ejemplo de ecuacin diferencial que representa a un Sistema de Control no lineal:
( ' D ( '
-
( ' ( '
>t !en @ @ @ t
t t
+ +
En el caso de que un sistema sea no lineal, para poder realizar el anlisis del Sistema
de Control, previamente deber ser linealizado.
b: Site#a de Control In%ariante & ;ariante con el tie#po
Los sistemas variantes en el tiempo son los sistemas cuyas caractersticas (tal como el
valor de masas o resistencias) cambian en el tiempo. Los valores de los elementos
pueden cambiar debido a factores ambientales tales como temperatura o radiacin.
Otro ejemplo de elementos variantes en el tiempo puede ser la masa de un cohete
donde el combustible es importante respecto a la masa total del cohete (y la misma
cambia al irse quemando el combustible). En las ecuaciones diferenciales describiendo
los sistemas variantes en el tiempo, algunos de los coeficientes de las ecuaciones son
funciones del tiempo.
Para sistemas invariantes en el tiempo, cuyas caractersticas no cambian con el
tiempo, el modelo del sistema que describe las relaciones entre entradas, variables de
estado y salidas, es independiente del tiempo. Si tal sistema est inicialmente en
reposo, retrasar la entrada por t
"
unidades de tiempo solo hace retrasar la salida por la
misma cantidad t
"
de unidades de tiempo, sin cambiar su forma ni tamao.
c: Site#a de Control Cauale & no Cauale
Un sistema es causal si su salida en cualquier instante de tiempo depende slo de los
valores de la entrada en el momento presente y en el pasado. Tambin se denomina
no anticipativo.
Ejemplo: ( ' ( 1 ' ( ' t t t
@ @ - +

En la naturaleza la mayora de las seales son causales.
Un sistema se denomina no causal cuando la salida depende de una seal futura.
1U
;:S0:;0O;A %0 );)T0MA) %0 CM:TOML
Ejemplo: ( - ' ( 1 ' ( ' + +
+
t t t
@ @ -
d: Site#a de Control Etable e Inetable
Un sistema es estable cuando al recibir una entrada limitada (su magnitud no crece en
forma ilimitada), genera una salida tambin limitada.
e: Site#a de Control Continuo & Dicreto
Las seales sirven para describir los fenmenos fsicos y se representan
matemticamente como funciones con una ms variables independientes.
En el caso de las seales continuas, la variable independiente es continua, es decir
puede tomar cualquier valor real.
Figura 1.3 Seal continua
Las seales discretas slo estn definidas en un conjunto discreto de valores de la
variable independiente.
Figura 1.4 Seal discreta
1.2Repreentaci(n de Site#a de Control
Un componente o proceso que vaya a ser controlado puede representarse mediante un
bloque.
Figura 1.5 Representacin de un proceso mediante un bloque
Todos los componentes de un Sistema de Control en forma similar pueden
representarse mediante bloques.
1.
;:S0:;0O;A %0 );)T0MA) %0 CM:TOML
Figura 1.6 Representacin de un Sistema de Control
En la Figura 1.6, se muestra un sistema de control en lazo cerrado el cual usa una
medida de la salida y la realimentacin de esta seal para compararla con la referencia.
La realimentacin permite controlar una salida deseada y puede mejorar la precisin,
pero requiere que se preste atencin al tema de la estabilidad de la respuesta.
La siguiente figura muestra un Sistema de Control, donde se muestran todas las
variables presentes.
Figura 1.7 Variables en un Sistema de Control
A continuacin se describe los componentes y las variables presentes en un Sistema
de Control:
*lanta4 Proceso o sistema a controlar (motor de CC, horno elctrico, invernadero).
;ariable Controlada4 Es la cantidad o condicin que se mide y controla. Es
considerada la salida del sistema.
;ariable Manipulada4 Es la variable o condicin de la planta que se modifica a fin de
influir sobre la variable controlada a travs de la dinmica de la planta.
*erturbaci(n4 Variable de entrada a la planta, accionador y elementos de medida,
sobre las que no se puede actuar. (nterferencias electromagnticas, carga del motor,
ruptura de plstico en invernadero, etc.).
Re5ulador o Controlador4 Realiza una accin de control con la finalidad de corregir el
error de desviacin que pudiera existir, entregando una seal de control.
-0
;:S0:;0O;A %0 );)T0MA) %0 CM:TOML
Accionador o Actuador4 Convierte las variaciones de salida del controlador en
variaciones correspondientes en la seal actuante o variable manipulada cuyos
cambios afectan el valor de la variable controlada mantenindola en el valor deseado.
Ele#ento de Medida o de reali#entaci(n4 Es un transductor o sensor que mide el
valor de la variable controlada y la adapta para poder realizar la comparacin con la
seal de referencia.
*erturbaci(n4 La perturbacin es una seal que tiende a afectar adversamente el valor
de la salida de un sistema. Puede ser interna si es originada por un componente del
sistema, o externa si es originada por una fuente externa.
-1
;:S0:;0O;A %0 );)T0MA) %0 CM:TOML
Captulo II
MODELO MATEMATICO DE SISTEMAS
Para entender y controlar sistemas, tenemos que obtener sus modelos matemticos
cuantitativos de ellos.
Para empezar con el anlisis y diseo lo primero que tenemos que hacer es obtener su
modelo matemtico que representa la dinmica del sistema.
En la teora de control necesitamos utilizar modelos dinmicos de los procesos
involucrados, que deben estar descriptos por ecuaciones diferenciales ordinarias
invariantes en el tiempo. En la pgina 26 de la referencia bibliogrfica de Dorf,
encontramos una tabla de resumen de las distintas ecuaciones dinmicas para distintos
casos: circuitos elctricos, flujo hidrulico, flujo de calor, etc.
En primer lugar se aplican las leyes fsicas del proceso y se obtiene una ecuacin
(lineal o no lineal), en el caso que nuestro sistema est descrito por ecuaciones no
lineales debemos proceder a linealizarlas alrededor del punto en equilibrio de
operacin del proceso.
Los modelos matemticos nos brindan los medios de capturar el comportamiento de un
sistema sujeto a condiciones iniciales, entradas de control y perturbaciones mediante
un conjunto de ecuaciones matemticas.
La importancia de los modelos matemticos radica en que pueden ser:
Simulados en situaciones hipotticas.
Ensayados en estados que seran peligrosos en el sistema real.
Usados como base para disear controladores.
--
;:S0:;0O;A %0 );)T0MA) %0 CM:TOML
!.1 0unci(n de Tran.erencia
La funcin de transferencia de un sistema lineal es la transformada de Laplace de la
variable de salida del sistema entre la transformada de Laplace de la variable de
entrada, con todas las condiciones iniciales asumidas como cero.
Figura 2.1 Entrada y salida de un sistema
La funcin de transferencia ser:
( '
( '
( '
! /
! C
! I
Otra definicin para la funcin de transferencia dice que es la transformada de Laplace
de la respuesta del elemento (sistema) a la funcin impulso cuando se toman las
condiciones iniciales como nulas.
Figura 2.2 Respuesta al impulso de un sistema
La funcin de transferencia ser:
[ ] ( ' ( ' ! I t g L
Ejemplo: Si un proceso est descrito por la siguiente ecuacin diferencial ordinaria,
donde "u es la seal de entrada, e "y la seal de salida:
- - - u u

+ + + / - -
Apliquemos la transformada de Laplace, llamando U(s) e Y(s) a las transformadas de
las seales u e y, respectivamente:
! 5 ! ! - - ! 5 ! - 5 ! ! 4 ! u 4 !
-
0 0 / / 0 - - - 0 $ ' ( $ ' ( ' ( $ ' ( $ ' ( $ ' ( $ ' ( $ ' ( ' ( + + +

Suponiendo las condiciones iniciales nulas, y realizando el cociente Y(s)/U(s),


determinamos la funcin de transferencia G(s):
I !
5 !
4 !
!
! !
' (
' (
' (

+
+ +
- 1
/ -
-
En general los sistemas que vamos a considerar estn descritos por modelos lineales,
estacionarios en tiempo continuo.
Estos sistemas pueden siempre representarse por una ecuacin diferencial ordinaria de
la forma:
u b u b - a - a -
m
m
n
n
n
0
( '
0
( 1 '
1
( '
+ + + + +


-/
;:S0:;0O;A %0 );)T0MA) %0 CM:TOML
Asumiendo condiciones iniciales nulas, aplicamos la transformada de laplace a la
ecuacin diferencial y la convertimos en algebraica.
( ' ( ' ( ' ( ' ( '
0 0
1
1
! 4 b ! 4 ! b ! 5 a ! 5 ! a ! 5 !
m
m
n
n
n
+ + + + +


La funcin de transferencia ser:
( '
( '
( '
! 4
! 5
! I
Que tambin puede expresarse como:
( ' ( ' ( ' ! I ! 4 ! 5
La funcin de transferencia es un modelo entrada salida.
Algunas definiciones de la funcin de transferencia:
Ceros del sistema: Son las races del numerador de G(s).
Polos del sistema: Son las races del denominador de G(s).
Grado relativo: Es el valor de nm.
!.! Lineali'aci(n de Site#a
Los sistemas estudiados hasta el momento fueron lineales, pero si un sistema tiene un
componente no lineal, debemos linealizar el sistema antes de encontrar la funcin de
transferencia.
Un sistema es no lineal si las relaciones entre algunas de sus variables no son lineales.
Sistemas con saturacin:
Sistemas con histresis:
Sistemas con zona muerta:
-D
;:S0:;0O;A %0 );)T0MA) %0 CM:TOML
Sistemas todo-nada:
La relacin entre dos variables se escribe como:
(( ' ' ( ' t @ % t -
Donde
(( ' ' t @ %
indica que
( 't -
es una funcin de
( 't @
. El punto de operacin normal
se designa por
0
@
. Como la curva es continua en el rango de inters, puede
desarrollarse la funcin en serie de Taylor:
Si realizamos una aproximacin en un intervalo pequeo de
0
@ @
, la pendiente en el
punto de operacin sera:
0
@ @
d@
d%

Luego la serie de Taylor quedara:


( ( ' ' ( ( ' '
0 0
@ t @ m - t -
La ecuacin lineal ser:
( ' ( ' t @ m t -
Ejemplo. Linealizar: H ( ' + @ t - en - @
Desarrollo:
-<
;:S0:;0O;A %0 );)T0MA) %0 CM:TOML
La aproximacin lineal ser:
( - ( ' '
( '
( - ' ( '
-

,
_

t @
dt
t d-
- t -
t
9
( '
/
-
( - ( ' '
. -
1
. ( '
t @
t @ t - + +
Esta aproximacin lineal nos puede servir para calcular la raz cuadrada de algunos
valores:
01 $ / ( - 09 $ - '
9
1
/ 9 $ - H 09 $ . + +
..// $ - ( - .9 $ 1 '
9
1
/ .9 $ 1 H .9 $ U + +
Ejemplo. Linealizar:
@
e t -
/
( '

en 0 @
Desarrollo:
La aproximacin lineal ser:
( 0 ( ' '
( '
( 0 ' ( '
0

,
_

t @
dt
t d-
- t -
t
@ @ e t -
t
@
/ 1 ( / ' 1 ( '
0
/
+

Esta aproximacin lineal nos puede servir para calcular la raz cuadrada de algunos
valores:
.H $ 0 ( 01 $ 0 ' / 1
( 01 $ 0 ' / 0/ $ 0


e e
Para una funcin de varias variables:
Despreciando los trminos no lineales:
-9
;:S0:;0O;A %0 );)T0MA) %0 CM:TOML
Un sistema o ecuacin no lineal se puede linealizar suponiendo que las perturbaciones
(cambios) de las variables dependientes, respecto a sus valores en una condicin de
equilibrio permanente o estacionaria arbitraria, son lo suficientemente pequeos para
que los productos y potencias de las variables perturbadas y sus derivadas puedan
despreciarse. Analicemos la siguiente ecuacin no lineal:
0 / - ( '
- Q
+ @ - t -
!." Dia5ra#a de Blo8ue
Es una representacin grfica de las funciones realizadas por cada componente y del
flujo de las seales. ndica las interrelaciones que existe entre los diversos
componentes.
Una forma esquemtica de representar los sistemas de control es a travs de los
diagramas de bloques. En dicho diagrama identificamos los principales componentes
como bloques, omitiendo detalles y mostrando la direccin principal de la informacin y
flujo de energa desde un componente a otro.
Los diagramas de bloques constan de bloques operacionales y unidireccionales que
representan la funcin de transferencia de las variables de inters.
Figura 2.3 Diagrama de bloque unitario
Del grafico podemos escribir:
( ' ( ' ( '
( '
( '
( ' ! I ! 4 ! 5
! 4
! 5
! I
En sistemas de control se usan frecuentemente puntos de suma y de bifurcacin, muy
frecuentes en sistemas de control de lazo cerrado.
-H
;:S0:;0O;A %0 );)T0MA) %0 CM:TOML
Figura 2.4 Punto de suma y punto de bifurcacin o separacin
!.".1 Tran.or#acione de dia5ra#a de blo8ue
Podemos encontrar diversos sistemas de control, representados con diagramas de
bloques complejos. Dichos diagramas los podemos reducir a un simple bloque
empleando las siguientes transformaciones:
a) Combinacin de bloques en serie:
b) Combinacin de bloques en paralelo:
c) Movimiento de un punto de suma anterior a un bloque:
d) Movimiento de un punto de separacin anterior a un bloque:
e) Eliminacin de un circuito de realimentacin:
Ejemplo: Reducir el siguiente diagrama de bloques:
Figura 2.5 Diagrama de bloques a reducir
En las figuras 2.6 y 2.7 mostramos dos reducciones sucesivas al diagrama del ejemplo.
-U
;:S0:;0O;A %0 );)T0MA) %0 CM:TOML
Figura 2.6 Primera reduccin.
Figura 2.7 Segunda reduccin.
Finalmente, de la figura 2.7, obtenemos la funcin de transferencia G(s) = Y(s)/R(s):
I !
5 !
/ !
I I
I I
I I I
I I
I
I
I
I I I I I
I I I I I
' (
' (
' (
$
$
$ $
$
$
$ $ $
$ $ $


+

_
,


+
+
1 -
1 /
1 - D
1 /
<
9
-
1 - < 1 9
1 / 1 - D
1
1
1
1
!.$ Dia5ra#a o +r<.ica de 0lu9o de Se=ale
Es una forma alternativa de dibujar los diagramas de bloques, tambin llamado
diagramas de Masn. En estos diagramas las funciones de transferencias las
representamos a travs de lneas con flechas (bloques), y las variables a travs de
nodos. Con el sentido de la flecha indicamos el sentido en como va la informacin
(como en los diagramas de bloques).
Una grfica de flujo de seal es un diagrama formado por nodos que se conectan
mediante varias derivaciones y es una representacin grfica de un conjunto de
relaciones lineales.
Figura 2.8 Grafica de flujo de seal unitaria
Los puntos de entrada y salida o uniones se llaman nodos.
( ' 1 ( ' 1- ( ' - ! ! !
5 I 5
-.
;:S0:;0O;A %0 );)T0MA) %0 CM:TOML
Mason gener una regla sistemtica para la reduccin de dichos diagramas que
enumeramos a continuacin. Estas reglas incluyen a sistemas con mltiples entradas y
salidas, y con varios lazos cerrados.
La regla de Mason dice que la funcin de transferencia desde la entrada j a la salida k,
est dada por:

(Gi
i
(Gi
(G
I
! I
$
( '
donde:
G
jki
= es la ganancia de un camino directo i que une la entrada j con la salida k; i toma
los valores de 1 hasta la cantidad de caminos directos que unen la entrada j con k.
= es el determinante del sistema = 1 - la sumatoria de las ganancias de todos los
lazos cerrados + la sumatoria de los productos de las ganancias de lazos cerrados que
no se tocan de a pares - la sumatoria de los productos de las ganancias de los lazos
que no se tocan tomados de a tres +.......

jki
= es el determinante del camino directo i, que une la entrada j con la salida k = es el
valor de pero para la parte del diagrama que no toca el camino .
Ejemplo: En la figura 2.9 representamos el diagrama de Mason para el mismo sistema
representado por diagramas de bloques en la figura 2.7.
Figura 2.9 Diagrama a reducir
De la figura observamos dos caminos directos, cuyas ganancias son: C
1
= G
1
.G
2
.G
5
; y
C
2
= G
1
.G
6
. Existen dos lazos cerrados en todo el sistema, cuyas ganancias son: L
1
=
G
1
.G
3
, y L
2
= -G
4
.G
1
.G
2
. No existen lazos que no se toquen entre s, por lo tanto el
determinante del sistema es: = 1 - (L
1
+ L
2
) = 1 - G
1
.G
3
+ G
4
.G
1
.G
2
. Los determinantes
de ambos caminos directos son 1 (
1
=
2
= 1), puesto que los dos caminos directos
tocan ambos lazos cerrados. Entonces, finalmente la funcin de transferencia de este
sistema queda:
D - 1 / 1
9 1 < - 1 - - 1 1
$ $ $ 1
$ $ $ $ $
( '
I I I I I
I I I I I C C
! I
+
+

/0
;:S0:;0O;A %0 );)T0MA) %0 CM:TOML
Observemos que es el mismo resultado obtenido en el ejemplo de los diagramas de
bloques.
!.1 ;ariable de Etado
En los temas anteriores se han presentado distintas estrategias para modelar el
comportamiento de sistemas dinmicos continuos, entre ellas:
Ecuaciones diferenciales
Funcin de transferencia
Respuestas al impulso
Diagramas de bloque
Diagramas de flujo de seal
En esta parte se estudia una nueva alternativa que emplea un conjunto de variables
denominadas 'ariables "e esta"o. Puede pensarse que stas son tan slo variables
matemticas auxiliares, aunque en ocasiones tienen un sentido fsico. Algunas de las
ventajas que se obtienen con esta nueva representacin son las siguientes:
La representacin de sistemas de mltiples entradas y mltiples salidas es ms
sencilla.
Toda la dinmica del sistema se representa por ecuaciones diferenciales de
primer orden.
Permite el desarrollo de mtodos computacionales ms eficientes para la
simulacin de sistemas dinmicos.
Brinda una nueva perspectiva sobre la dinmica de los sistemas.
Algunas de las tcnicas de control moderno (como el control robusto) se basan
en este tipo de representacin.
Figura 2.10 Sistema Dinmico con mltiples entradas y mltiples salidas
E9e#plo ).!1 Para conocer el comportamiento de un circuito RLC serie como el de la
figura 2.11, es necesario establecer los 'alores de
( 0 '
+
L
i
y
( 0 '
+
C
"
, por esta razn, las
variables ( 't
i
y ( 't C
"
sirven como variables de estado.
/1
;:S0:;0O;A %0 );)T0MA) %0 CM:TOML
Figura 2.11 Circuito RLC en serie.
Utilizando las leyes de Kirchof obtenemos:
Escribiendo en forma matricial:
Supongamos que en el circuito se quiere estudiar el comportamiento de las variables
( 't /
"
e ( 't L
i
, es decir, que seleccionamos estas variables como las salidas del
sistema. Dado que ( ' ( ' t L t /
/i "
, podremos escribir en forma matricial:
La representacin con variables de estado del circuito estara dada por las ecuaciones:
Que son de la forma:
Donde:
El estado de un sistema es un conjunto de variables tales que el conocimiento de estas
variables y de las funciones de entrada, junto con las ecuaciones que describen la
dinmica, proporcionan la salida y el estado futuro del sistema.
Para un sistema dinmico, el estado de un sistema se describe en funcin de un
conjunto de variables de estado
[ ] ( ' , (, ' (, '
- 1
t @ t @ t @
n

Estas variables son las que determinan el comportamiento futuro de un sistema cuando
se conocen el estado presente de ste y las seales de excitacin.
!.1.1 Ecuaci(n de Etado
El estado de un sistema se describe por el conjunto de ecuaciones diferenciales de
primer orden escritas en funcin de las variables de estado
[ ] ( ' , (, ' (, '
- 1
t @ t @ t @
n

.
Estas ecuaciones pueden escribirse de forma general como:
/-
;:S0:;0O;A %0 );)T0MA) %0 CM:TOML
En las ecuaciones
( 't u
es un vector que contiene cada una de las m entradas al
sistema,
( 't -
es un vector que contiene cada una de las ) salidas del sistema,
( 't @
es
un vector que contiene cada una de las n variables de estado del sistema, es decir:
Un sistema puede representarse mediante la notacin compacta como:
Donde:
( 't @
: Vector de estado (nx1)
( 't @
4 Derivada del vector de estado con respecto al tiempo (nx1)
( 't -
: Vector de salida (px1)
( 't u
: Vector de entrada o de control (mx1)
A : Matriz de estado o del sistema o de evolucin (nxn)
B : Matriz de entrada o de distribucin (nxp)
C : Matriz de salida o de observacin (pxn)
D : Matriz de transmisin directa o de prealimentacin (pxm)
La funcin de transferencia para una entrada y una salida a partir de la ecuacin de
estado, puede obtenerse utilizando la transformada de Laplace:
( ) 6 B A !$ C
! 4
! 5
+
1
( '
( '
Para obtener una representacin con variables de estado de sistemas de una entrada y
una salida de los cuales se conoce la ecuacin diferencial:
Se seleccionan las siguientes variables de estado:
Y la ecuacin diferencial puede escribirse como:
Y en forma matricial.
//
;:S0:;0O;A %0 );)T0MA) %0 CM:TOML
/D
;:S0:;0O;A %0 );)T0MA) %0 CM:TOML
Captulo III
ANALISIS DE SISTEMAS DE CONTROL EN EL DOMINIO DEL TIEM*O
El primer paso para realizar el anlisis temporal de un sistema de control es la
obtencin de su modelo matemtico, es decir, un conjunto de ecuaciones diferenciales
(en general) que describan el comportamiento de los elementos que componen dicho
sistema y la interaccin entre los mismos. Una vez obtenido el modelo del sistema ya
slo queda analizar su comportamiento.
Para hacerlo, diferenciamos dos tipos de respuesta en funcin de las condiciones en
que se produce: respuesta libre y respuesta forzada. La primera consisten en el
comportamiento del sistema cuando, sin necesidad de excitacin externa (entrada), el
sistema parte de un estado inicial distinto al equilibrio (por ejemplo es el caso si
soltramos un pndulo desde una posicin de 45 respecto a la vertical sin aplicar
ninguna fuerza externa sobre l). La respuesta forzada, consiste en el comportamiento
del sistema cuando partiendo del equilibrio (condiciones iniciales nulas), se aplica sobre
l una determinada entrada (por ejemplo, la aplicacin de una fuerza horizontal al
pndulo cuando ste se encuentra en reposo en su posicin vertical).
Se denomina respuesta temporal de un sistema a la evolucin en funcin del tiempo
(dinmica) de las seales de salida. Los conceptos fundamentales relacionados con el
comportamiento dinmico de los sistemas son su estabilidad y el anlisis de los
regmenes transitorio y permanente.
Los aspectos matemticos del anlisis y sntesis de sistemas de control se efectan
ordinariamente tanto en el dominio del tiempo como en el dominio de la frecuencia,
segn resulte ms cmodo, o dependiendo de en cual de ellos se hayan dado las
especificaciones a cumplir por un determinado diseo de sistemas de control. En este
captulo se abordar el anlisis en el dominio del tiempo, el cual incluye el estudio de la
respuesta completa de un sistema, es decir, tanto su rgimen transitorio como su
rgimen permanente (o estacionario).
/<
;:S0:;0O;A %0 );)T0MA) %0 CM:TOML
permanente a tran!itori
t - t - t - ( ' ( ' ( ' +
La respuesta transitoria se refiera a la forma en que llega el sistema a las condiciones
de estado estacionario: ms o menos rpido, con oscilaciones ms o menos
amortiguas, sobrepasando en mayor o menor medida la referencia deseada, etc. Se
define el rgimen transitorio como el periodo de tiempo en que la salida evoluciona
desde las condiciones iniciales hasta aproximadamente su valor final.
Se define el rgimen permanente como el periodo de tiempo a partir del cual la salida
ha alcanzado su valor final.
Figura 3.1 Rgimen permanente y transitorio
Analizar la respuesta transitoria de un sistema de control es importante porque permite
conocer la velocidad de respuesta del sistema a las seales de referencia (cuanto ms
rpido mejor) y sopesar el esfuerzo que sufren los componentes mecnicos que casi
siempre forman parte de l, ya que prcticamente todos ellos poseen cierta inercia y
sufren rozamientos que se manifiestan en retardos temporales en la respuesta. Por
tanto, si un sistema de control incluye componentes mecnicos es seguro que la salida
de un sistema no seguir instantneamente a variaciones muy rpidas de la entrada
(por ejemplo una entrada escaln).
En funcin de la forma en que un sistema alcanza el rgimen permanente distinguimos
entre sistemas sobreamortiguados y subamortiguados; se dice que un sistema es
sobreamortiguado si no se producen oscilaciones durante el periodo transitorio, y
subamortiguado en caso contrario.
Figura 3.2 Sistemas subamortiguados y sobreamortiguados
/9
;:S0:;0O;A %0 );)T0MA) %0 CM:TOML
No obstante hay que tener en cuenta que no siempre se alcanza un valor final de
equilibrio ya que hay sistemas en los que no se llega a alcanzar nunca el rgimen
permanente; es el caso de los sistemas inestables. Tambin existe la posibilidad de
que la salida se quede oscilando alrededor de un determinado valor. Por tanto, otra de
las principales caractersticas que interesa conocer al analizar un sistema es s ste
alcanza el rgimen permanente en algn momento. Nos referimos a este aspecto como
la estabilidad absoluta del sistema.
En el caso de que se alcance el rgimen permanente, interesa tambin conocer de qu
forma se llega al mismo, o sea, cuales son las caractersticas del rgimen transitorio.
Nos referimos a este ltimo aspecto como estabilidad relativa del sistema. No es lo
mismo llegar poco a poco de forma suave al valor final de salida, que dando bandazos,
aunque en ambos casos se alcance el valor final de equilibrio.
La herramienta fundamental para el anlisis de sistemas dinmicos es el conocimiento
de la situacin de los polos y ceros del sistema, debido a que el comportamiento de un
sistema, sea libre o forzado, queda completamente caracterizado por su localizacin.
Los ceros del sistema son las races del numerador de la funcin de transferencia y los
polos son las races del denominador. Dado que los coeficientes ai y bi de la funcin de
transferencia de un sistema fsico son reales, los ceros y polos del sistema deben ser
siempre reales o aparecer en forma de pares complejos conjugados.
0
1
1
0
1
1
( '
a ! a ! a
b ! b ! b
! I
n
n
n
n
m
m
m
m
+ + +
+ + +

Si un sistema es estable, en algn momento se alcanzar el rgimen permanente. Si


aplicamos un escaln a la entrada, la salida se mantendr constante una vez
alcanzado el permanente. Dicha constante recibe el nombre de valor final del sistema.
Si un sistema es estable, en algn momento se alcanzar el rgimen permanente. Si
aplicamos un escaln a la entrada, la salida se mantendr constante una vez
alcanzado el permanente. Dicha constante recibe el nombre de valor final del sistema.
El valor final de un sistema viene dado por:
( 't - lm -
t
t



Si el sistema es estable (absolutamente estable) podemos aplicar el teorema del valor
final y tenemos que
( ' ( ' ( '
0 0
! / ! !I lm ! !5 lm -
! !
t



Consideremos por ejemplo una entrada escaln de amplitud A, entonces:
/H
;:S0:;0O;A %0 );)T0MA) %0 CM:TOML
A I
!
A
! !I lm ! / ! !I lm -
! !
t
( 0 ' ( ' ( ' ( '
0 0



El valor final de la salida ante una entrada escaln es la amplitud del escaln (A)
multiplicada por el factor G(0) y se le denomina ganancia esttica del sistema y
determina en cuanto se amplifica o atena la entrada.
La respuesta en rgimen permanente es la respuesta temporal cuando t tiende a
infinito, es decir, cuando ha concluido el transitorio y se ha alcanzado el rgimen
estacionario; el sistema por tanto es estable (supuestamente) y responde a la accin de
control. La respuesta permanente indica la precisin del sistema de control; cuando se
acerca la salida real a la de referencia (idealmente ambas deberan coincidir). Si la
respuesta en rgimen permanente no coincide exactamente con la entrada, el sistema
presenta un error en estado estacionario que caracterizar la exactitud de la accin de
control.
( ' ( ' t - lm t -
t
p

Se define el error en estado estacionario como la diferencia entre la seal de referencia


y la seal de salida en estado estacionario (supuesto que el sistema es estable). Este
error coincide con el valor estacionario de la seal originada en el detector de error (si
la realimentacin es unitaria).
[ ] ( ' ( ' t - t r lm e
t
!!


El diseo de buenos controladores permitir llevar el error en rgimen permanente (si
existe) dentro de los lmites establecidos por las especificaciones de diseo.
".1 Repueta e5>n la ubicaci(n de lo polo
Cuando el sistema en estudio est representado por ecuaciones diferenciales
ordinarias simultneas, la funcin de transferencia resulta ser una razn de polinomios;
esto es:
I !
b !
a !
' (
' (
' (

donde a(s) y b(s) son polinomios en s. Para sistemas fsicamente reales el orden del
polinomio denominador a(s) siempre es mayor o igual al orden del numerador b(s), por
razones de causalidad.
Denominamos polos de G(s), a aquellos lugares del plano complejo s, en donde la
funcin de transferencia G(s) se hace infinita, o sea donde a(s) = 0 (las races del
polinomio denominador a(s)).
/U
;:S0:;0O;A %0 );)T0MA) %0 CM:TOML
Denominan ceros de G(s), a aquellos lugares del plano complejo s, en donde la funcin
de transferencia G(s) se hace cero, o sea donde b(s)=0 (las races del polinomio
numerador b(s)).
Los polos y ceros describen completamente a G(s), excepto por un multiplicador
constante, esto significa que las funciones G(s) las podemos representar directamente
en el plano s.
Ya que la respuesta de un sistema a un impulso est dada por su funcin de
transferencia, a dicha respuesta se la denomina respuesta natural del sistema.
Podemos usar los polos y ceros para determinar la respuesta temporal y as identificar
la forma de las respuestas temporales con las ubicaciones correspondientes de los
polos y ceros de la funcin de transferencia.
Tomemos por ejemplo la siguiente funcin de transferencia:
I !
!
! !
!
! !
' (
' (' (

+
+ +

+
+ +
- 1
/ -
- 1
1 -
-
Separando en fracciones simples:
I !
! !
' (
' ( ' (


+
+
+
1
1
/
-
Utilizando la tabla de transformadas de Laplace, obtenemos la respuesta natural del
sistema del ejemplo:
g t
e e t
t
t t
' (
$ ,
,
$

+
<

'


/ 0
0 0
-

Del ejemplo, podemos extendernos al caso general de polos en el eje real, observando
que la ubicacin de los polos dan los coeficientes de las exponenciales, y que los ceros
afectan solo en la magnitud de la amplitud de la respuesta.
Para el caso de races complejas conjugadas obtenemos una conclusin similar: los
polos determinan la forma de la respuesta temporal.
Dada la funcin de transferencia:
I !
!
! !
' (
+
+ +
- 1
- <
-
Separando en fracciones simples:
I !
i i
! i
i i
! i
A e
! i
A e
! i
i i
' (
' ( 1 ' ( 1

+
+ +
+

+

+ +
+
+

1 D D
1 -
1 D D
1 - - 1 - - 1 -

Utilizando la tabla de transformadas de Laplace:
g t
A
e e e
A
e e e A e t
i t it i t i t t
' ( cos' ( + +

- -
-
- -

/.
;:S0:;0O;A %0 );)T0MA) %0 CM:TOML
Como vemos, la respuesta natural a un par de polos complejos conjugados es una
sinusoide amortiguada por una exponencial. Tanto la exponencial, como la frecuencia
de la sinusoide dependen solo de los polos.
En la figura 3.3 esquematizamos las respuestas naturales de los sistemas dependiendo
de la ubicacin de los polos.
Figura 3.3 Respuestas temporales
asociadas con los polos en el plano s.
Los polos complejos conjugados los podemos definir en trminos de sus partes real e
imaginaria, tradicionalmente:
! i
d
t $
Ya que los polos complejos vienen de a pares, el denominador correspondiente al par
de complejos es:
a ! ! i ! i !
d d d
' ( ' $ (' $ ( ' ( + + + + +
- -
Cuando encontramos la funcin de transferencia a partir de ecuaciones diferenciales,
tpicamente podemos escribir el resultado en la forma polinomial:
I !
! !
n
n n
' (
+ +


- -
-
D0
;:S0:;0O;A %0 );)T0MA) %0 CM:TOML
Figura 3.4 Parmetros de los polos complejos.
Comparando las dos ltimas ecuaciones, encontramos la relacin entre los parmetros:

n
y

d n
1
-
A la conocemos como coeficiente de amortiguamiento, y a
n
como frecuencia natural
no-amortiguada.
En la figura 3.4 observamos el significado grfico de cada uno de estos parmetros.
Podemos observar (ver la figura 3.5) que cuando el coeficiente de amortiguamiento
es cercano a cero las respuestas del sistema son oscilatorias, mientras que cada vez
que el mismo se acerca a 1 es mayor el amortiguamiento de las oscilaciones hasta el
punto de no presentarlas.
Figura 3.5 Respuestas a un escaln para un sistema de segundo orden, para distintos
valores del coeficiente de amortiguamiento ( = 0.0, 0.1, 0.2,... , 1.0).
".! Epeci.icacione en el do#inio te#poral
Las especificaciones para el diseo de un sistema de control frecuentemente
involucran ciertos requerimientos asociados a la respuesta temporal del sistema. Los
requerimientos para una respuesta a un escaln los expresamos en trminos de
valores estndar ilustrados en la figura 3.6:
Tiempo de crecimiento (rise time) t
r
es el tiempo que toma el sistema para alcanzar la
vecindad de su nuevo set-point.
Tiempo de establecimiento (settling time) t
s
es el tiempo que toma el sistema para que
el transitorio decaiga.
Sobrepico (overshoot) M
p
es la cantidad mxima que el sistema se sobrepasa en el
transitorio su valor final dividido ese valor final (frecuentemente se lo da en porcentaje).
D1
;:S0:;0O;A %0 );)T0MA) %0 CM:TOML
Tiempo del pico (peak time) tp es el tiempo que toma el sistema para alcanzar el
mximo valor (el sobrepico).
Figura 3.6 Definiciones de tiempo de crecimiento, tiempo de establecimiento, tiempo del pico y sobrepico
de una respuesta a un escaln.
Analicemos el caso de una respuesta de un sistema de segundo orden (observemos la
figura 3.5). Examinando las curvas bajo las definiciones de las especificaciones
podemos dar relaciones entre las especificaciones y los valores de y
n
. Si
consideramos, por ejemplo, la curva para = 0.5 (como promedio), podemos decir que
el tiempo de crecimiento es:
t
r
n

1U $

Para el sobrepico podemos determinar una relacin en forma ms analtica, obteniendo


para qu punto la derivada de la respuesta a un escaln de un sistema de segundo
orden se hace cero, y luego evalundola en ese punto. As obtenemos:
t
p
d

y M e
p
<

1
,
1
-
0 1
Para el caso del tiempo de establecimiento, la duracin del mismo estar dada
principalmente por la exponencial envolvente e
t
, y a partir del mismo obtenemos:
t
!
n

D 9 D 9 $ $

(considerando la banda t1%)
Este tipo de especificaciones nos darn inecuaciones que limitarn los parmetros
n
,
, y ; que a su vez limitarn la ubicacin de los polos en el plano s, como mostramos
en la figura 3.7.
D-
;:S0:;0O;A %0 );)T0MA) %0 CM:TOML
Figura 3.7. Representaciones de las limitaciones en el plano s de: (a) en n, (b) en el coeficiente de
amortiguamiento , (c) en , y (d) los tres parmetros en conjunto.
"." E.ecto de lo polo adicionale & de lo cero
Hasta ahora hemos estudiado el comportamiento de los sistemas de segundo orden.
Ahora estudiaremos como afectan a la respuesta temporal agregar un cero o un polo.
Estudiemos el siguiente caso, tenemos una funcin de transferencia de la siguiente
forma:
I !
! !
1
-
1 -
' (
' (' (

+ +
Separando en fracciones simples queda:
I !
! !
1
-
1
-
-
' (
' ( ' (

+

+
Vemos que ambas exponenciales tienen una amplitud similar.
Agreguemos un cero en -1.1. La funcin de transferencia quedar de la forma:
I !
!
! !
-
- 11
11 1 -
' (
' $ (
$ ' (' (

+
+ +
Y separando en fracciones simples nos queda:
I !
! !
-
01U
1
19D
-
' (
$
' (
$
' (

+
+
+
Como vemos, la exponencial ms rpida disminuy su amplitud en ms de 10 veces.
Hagamos un anlisis ms detallado:
Tengamos en cuenta la funcin de transferencia normalizada de la siguiente manera:
I !
!
! !
n
n n
' (
' 1 (
' 1 ( ' 1 (

+
+ +


1
- 1
-
Observemos que el cero lo agregamos a un factor con respecto a la parte real de los
polos complejos conjugados: s = -..
n
= -..
D/
;:S0:;0O;A %0 );)T0MA) %0 CM:TOML
Figura 3.8 Respuesta a un escaln para la funcin de transferencia
I !
!
! !
n
n n
' (
' 1 (
' 1 ( ' 1 (

+
+ +


1
- 1
-
, para = 0.5 y = 1, 2, 4, 100, e infinito.
Figura 3.9 Sobrepico en funcin de y .
En la figura 3.8 mostramos las respuestas a un escaln de esta funcin de
transferencia para = 0.5 y para distintos valores de .
De la figura concluimos que a medida que el cero se acerca al valor de la parte real de
los polos, el sobrepico aumenta. En la figura 3.9. vemos como aumenta el sobrepico al
disminuir el valor de para distintos valores de . De la misma podemos afirmar que el
valor del sobrepico no es muy afectado por el cero si el mismo se encuentra ms all
de un factor 4 de la parte real de los polos complejos conjugados.
Si escribimos la funcin de transferencia de la siguiente manera:
I !
! !
!
! !
' (
+ +
+


+ +
1
- 1
1
- 1
- -

Notamos que el primer trmino es la funcin de transferencia original (sin el cero), y el
segundo trmino es la derivada de la funcin de transferencia original afectada por una
constante (1/.). Por lo tanto, la respuesta a un escaln de la funcin de transferencia
G(s) ser la respuesta a un escaln de la funcin de transferencia sin el cero, mas la
derivada de esa respuesta por la constante. De esta manera podemos explicar la
presencia de un sobrepico mayor. En la figura 3.10 mostramos la respuesta a un
DD
;:S0:;0O;A %0 );)T0MA) %0 CM:TOML
escaln para el sistema original, su derivada y la suma de ambas (respuesta al sistema
con el cero).
Figura 3.10 Respuesta del sistema original, su derivada y la suma de ambas.
Para el caso de un cero en el semiplano derecho, debemos considerar < 0, y sigue
valiendo el mismo anlisis. En la figura 3.11, mostramos la evolucin de la respuesta a
un escaln del sistema original, su derivada cambiada de signo y la respuesta del
sistema con un cero en el semiplano derecho (un cero de no mnima fase). De esta
figura observamos que la respuesta al escaln puede comenzar en sentido contrario a
la referencia y luego se corrige.
Figura 3.11 Respuesta a un escaln del sistema original, su derivada cambiada de signo y la suma de
ambas.
Analicemos ahora el caso de agregar un polo. Escribamos la funcin de transferencia
de la siguiente forma:
D<
;:S0:;0O;A %0 );)T0MA) %0 CM:TOML
I !
! ! !
n n n
' (

+

_
,

_
,
+

_
,
+

1
]
1
1
1
1 - 1
-

En la figura 3.12 mostramos las respuestas a un escaln para los sistemas donde es
0.5 y toma distintos valores.
Figura 3.12 Respuesta a un escaln para el sistema
I !
! ! !
n n n
' (

+

_
,

_
,
+

_
,
+

1
]
1
1
1
1 - 1
-

, para = 0.5 y = 1, 2, 5, 100 e infinito.


Como podemos observar de la figura, la presencia de un polo adicional afecta
sensiblemente al tiempo de crecimiento, y el mismo se hace ms grande cuanto el polo
adicional se acerca ms al origen.
En la figura 3.13. mostramos el comportamiento del tiempo de crecimiento en funcin
del valor de parametrizada con . Del mismo podemos inferir que si el polo adicional
est ms lejos que 4 veces la parte real de los polos complejos conjugados, el tiempo
de crecimiento no es prcticamente afectado.
Figura 3.13 Tiempo de crecimiento en funcin de , para = 0.5, 0.7 y 1.0.
Reglas a considerar en el diseo de un sistema de control:
D9
;:S0:;0O;A %0 );)T0MA) %0 CM:TOML
1) Para un sistema de segundo orden con ceros no finitos, los parmetros transitorios
los aproximamos por:
t
r
n

1U $

M
p
< '
$
(, $ 1
0 9
0 0 9


t
!
n

D 9 D 9 $ $

2) Un cero adicional en el semiplano izquierdo aumentar el sobrepico si est en un
factor 4 de la parte real de los polos complejos.
3) Un cero adicional en el semiplano derecho bajar el sobrepico (y puede que la
respuesta a un escaln parta en direccin contraria).
4) Un polo adicional en el semiplano izquierdo aumentar el tiempo extra dentro de un
factor 4 de la parte real de los polos complejos.
".$ Error de etado etacionario & ite#a tipo
El error e(t) de un sistema lo definimos como la referencia menos la entrada. En la
figura 3.14 mostramos dos diagramas de bloques equivalentes, con la definicin del
error. Observemos del segundo diagrama de bloques que si H/ = 1, e(t) = a(t).
Dicho error tendr un transitorio, y luego llegar a un estacionario al cual se lo
denomina error de estado estacionario.
Figura 3.14. Diagrama de bloques para la definicin del error.
Sistema tipo:
Es una clasificacin til que se realiza en control por sus respuestas segn la entrada
de referencia polinomiales.
DH
;:S0:;0O;A %0 );)T0MA) %0 CM:TOML
Llamemos F(s) a la funcin de transferencia desde la entrada al error:
E(s) = F(s) . R(s)
Supongamos que el sistema sea estable (que F(s) tenga polos en el semiplano
izquierdo de s), y r(t) es un polinomio.
Por el teorema del valor final, tenemos que el error de estado estacionario vale:
e
t
e t ! / ! % !
!!
!

lim ' ( lim $ ' ($ ' (


0

Este lmite puede valer cero, ser finito o infinito. La habilidad del sistema de control para
seguir funciones polinomiales est dada por el grado ms alto, k, del polinomio para el
cual el error es finito, pero distinto de cero. Entonces a dicho sistema lo
denominaremos de "sistema de tipo k.
Por ejemplo, un sistema de tipo 0 tiene un error de estado estacionario finito, no cero, a
una entrada polinomial de grado 0 (o sea a un escaln). Un sistema de tipo 1 tendr un
error de estado estacionario finito distinto de cero para una rampa de entrada.
Analicemos cuando vale el error de estado estacionario para un escaln y una rampa a
la entrada:
Escaln:
/ !
!
e % ! %
!!
!
' ( lim ' ( ' (

1
0
0

Rampa:
/ !
!
e
% !
!
d%
d!
!!
!
!
' ( lim
' (

1
-
0
0

utilizando L'Hospital
El tipo de sistema se fija entonces en el comportamiento de F(s) alrededor del cero:
expandiendo en serie de Taylor la funcin F(s)
% ! C C ! C ! ' ( + + +
0 1 -
-
entonces el valor del error en estado estacionario ser:
( )
e / ! C C ! C !
!!
!
+ + +

lim ' (
0
0 1 -
-

Pero
/ !
!
G
' (
+
1
1
, para el polinomio de grado k
e
C
!
C
!
C
!
!!
!
G G G
+ + +

_
,


lim
0
0 1
1
-
-
Y este lmite existir, si y solo si, C
0
= 0, ......, C
k-1
= 0, C
k
distinto de cero; y ste es el
valor del lmite.
A los C
i
los denominamos coeficientes de error y nuestro sistema es de tipo k si el
primer coeficiente distinto de cero es C
k
.
Caso especial: Retroalimentacin unitaria y constantes de error.
DU
;:S0:;0O;A %0 );)T0MA) %0 CM:TOML
Si H = , podemos modelar el sistema con retroalimentacin unitaria como muestra la
figura 4.5.
Figura 3.15 Diagrama de bloques de la retroalimentacin unitaria.
donde G(s) = (s).D(s).Gp(s).
Entonces tendremos:
% !
I !
' (
' (

+
1
1
Para un sistema de tipo 0:
C
I
0
1
1 0

+ ' (
Y para un sistema de tipo k (k 1):
C
! I ! ! I !
G
!
G
!
G

+

lim
' ( lim ' (
0
0
1 1
1
1

Se define entonces constante de error del sistema retroalimentado unitario de tipo k a:
2 ! I !
G
!
G

lim ' (
0

A las constantes de error para los tipos 0, 1 y 2; los denominamos respectivamente:
constante de error de posicin (K
p
= K
0
), de velocidad (K
v
= K
1
) y de aceleracin (K
a
=
K
2
).
Para la retroalimentacin unitaria, el tipo de sistema nos da un grado de la robustez de
nuestro sistema (nos da el grado del polinomio que el sistema puede seguir).
Para el caso de retroalimentacin unitaria, el sistema tipo est dado por la cantidad de
integradores puros (1/s) que posee el sistema.
Ejemplo: Sea la funcin de transferencia de nuestra planta:
I !
! ! T
p
' (
' (

+
1
1
Siendo H(s) = h, tendremos que nuestro error vale:
1 ! / ! 5 !
; I !
; I !
/ !
p
p
' ( ' ( ' (
' ( ' (
' (
' (
+
+

1 1
1
Entonces:
% !
; I !
; I !
p
p
' (
' ( ' (
' (

+
+
1 1
1
Y el error de estado estacionario a una entrada escaln ser:
e % !
! !T ;
! !T ;
;
;
!!
! !

+ +
+ +



lim ' ( lim
' ( ' (
' (
0 0
1 1
1
1

D.
;:S0:;0O;A %0 );)T0MA) %0 CM:TOML
Como vemos, el sistema es de tipo 0 a pesar que la planta tiene un integrador puro. Si
h = 1 (retroalimentacin unitaria), el error de estado estacionario a un escaln es 0, y el
sistema pasa a ser de tipo 1.
<0
;:S0:;0O;A %0 );)T0MA) %0 CM:TOML
Captulo I;
ESTABILIDAD DE SISTEMAS DE CONTROL
La estabilidad es una propiedad cualitativa de los sistemas dinmicos a la que cabe
considerar como la ms importante de todas. Ello es debido a que, en la prctica, todo
sistema debe ser estable. Si un sistema no es estable, normalmente carece de todo
inters y utilidad.
Realizaremos el anlisis de la estabilidad de los sistemas dinmicos, es decir, a
establecer criterios que permitan discernir si un determinado sistema dinmico, dado en
una cierta forma de representacin matemtica, es estable o no. En captulos
posteriores se estudiaran las modificaciones a introducir en los sistemas dinmicos
para modificar su estabilidad.
Un sistema, inicialmente en reposo, se dice estable si ante cualquier seal de entrada
acotada, es decir, que no alcanza valores infinitos, responde con una seal de salida
acotada.
Un sistema lineal y estacionario, representado por una funcin racional propia G(s) es
estable si y solo si, todos los polos de G(s) estn situados en el semiplano izquierdo
abierto del plano s.
Una forma equivalente de expresar lo anterior es decir que los polos de G(s) tienen la
parte real negativa.
En el semiplano izquierdo abierto, a que se alude en el anterior teorema, se excluye el
eje imaginario. Si se incluye este eje imaginario se habla del semiplano izquierdo
cerrado.
Teorema. Un sistema con funcin de transferencia *+s, es estable si y solo si los polos
de *+s, tienen parte real negativa, esto es, si y solo si los polos de *+s, estn ubicados
en la parte izquierda del plano complejo.
<1
;:S0:;0O;A %0 );)T0MA) %0 CM:TOML
En conclusin: Una condicin necesaria y suficiente para la Estabilidad de un sistema
es que los polos estn en el semiplano izquierdo abierto (polos con parte real negativa,
Re{pl} - .)
$.1. Etabilidad con entrada & alida li#itada
Definicin:
Se dice que un sistema tiene estabilidad de entrada y salida limitada si cada entrada
limitada da lugar a una salida limitada.
Observemos que esta definicin es independiente de lo que ocurra dentro del sistema:
una variable interna del sistema puede crecer ilimitadamente segn esta definicin.
Comprobar esta propiedad es fcil utilizando la propiedad de convolucin:
Llamando u(t) a la entrada, y(t) la salida y h(t) la respuesta a un impulso, tenemos que
la salida es:
- t ; u t d ' ( ' ( ' (


Si u(t) es limitada, entonces existe M tal que
u M <
y entonces la salida est
limitada por:
- ; u d ; u d M ; d

+
' (
Por lo tanto, la salida estar limitada si la integral
; d ' (

es limitada.
Por otro lado, supongamos que esta integral es no limitada, y consideramos la entrada
limitada u(t-) = +1, si h(t) > 0, y u(t-t) = -1, si h(t) < 0. En este caso:
- t ; d ' ( ' (


y por lo tanto la salida es no limitada. O sea que si la integral es no limitada, el sistema
no es estable.
Conclusin:
El sistema con respuesta de impulso h(t) es estable con entrada y salida limitadas si, y
solo si, la integral
; d ' (

es limitada.
<-
;:S0:;0O;A %0 );)T0MA) %0 CM:TOML
Figura 4.1. Circuito elctrico.
Ejemplo: Analicemos la estabilidad del circuito elctrico que muestra la figura 4.1.
Para este sistema elctrico tenemos que el capacitor hace de un integrador puro, y por
lo tanto la respuesta al impulso ser el escaln unitario (si C = 1).
Por lo tanto la integral ser:
; d d ' (

+ +

0
y esta integral es no limitada, por lo tanto segn esta definicin de estabilidad, este
sistema no es estable.
Notar que la funcin de transferencia de este sistema tiene un polo en el origen (en el
eje imaginario): G(s) = 1/s.
Si un sistema constante tiene cualquier polo en el eje imaginario o en el semiplano
derecho, la respuesta no ser estable con entrada y salida limitadas.
Si todos los polos estn dentro del semiplano izquierdo, entonces la respuesta ser
estable con entrada y salida limitadas. Por lo tanto, para sistemas constantes, podemos
utilizar la ubicacin de los polos de la funcin de transferencia del sistema para verificar
su estabilidad.
$.!. Criterio de etabilidad de Rout?
Como concluimos en la seccin anterior, basta probar que todos los polos de la funcin
de transferencia estn en el semiplano derecho para afirmar que el sistema es estable.
El criterio de Routh nos dice si todas las races de la ecuacin caracterstica (polos de
la funcin de transferencia) estn en el semiplano izquierdo, o en su defecto, cuntas
races estn fuera del mismo.
La forma de verificar la estabilidad de un sistema consiste entonces en calcular las
races del polinomio denominador de la funcin de transferencia. Esto es relativamente
fcil si uno dispone de un software como Matlab.
Por ejemplo, si el polinomio denominador es:
9 11 9 ( '
- /
+ + + ! ! ! ! 6
</
;:S0:;0O;A %0 );)T0MA) %0 CM:TOML
Las races del polinomio sern: -1; -2 y -3.
Surge el interrogante de si existir alguna condicin sobre los coeficientes del
polinomio denominador de la funcin transferencia que asegure que sus races (es
decir, los polos de la funcin de transferencia) estn todas en el semiplano izquierdo
del plano "s, es decir que asegure que el sistema sea estable, sin necesidad de
calcular las races.
De hecho esta condicin existe y es conocida como el Criterio de Estabilidad de Routh.
Si bien el criterio es del siglo 19, cuando no exista Matlab, es todava de utilidad para
determinar el rango de coeficientes del polinomio que aseguran la estabilidad, cuando
estos coeficientes estn en forma simblica.
Criterio:
Dada la ecuacin caracterstica de nuestro sistema de la forma:

Condiciones:
1) Una condicin necesaria es que los a
i
sean todos positivos. Si alguno de ellos es
cero o negativo significa que algn polo no pertenece al semiplano izquierdo.
2) Es condicin necesaria y suficiente para la estabilidad, es que todos los coeficientes
de la primera columna del arreglo de Routh sean positivos. Si alguno lo fuera, la
cantidad de cambios de signos en la primera columna nos dice la cantidad de polos
inestables del sistema.
El arreglo de Routh se construye de la siguiente manera:
s
n
: 1 a
2
a
4
...
s
n-1
: a
1
a
3
a
5
...
s
n-2
: b
1
b
2
b
3
...
s
n-3
: c
1
c
2
c
3
...
. .
. .
s
2
: *
s
1
: *
s
0
: *
Los coeficientes 1, a
1
, b
1
, c
1
, ... *; son los coeficientes de la primera columna del arreglo
de Routh, que nos dicen si el sistema es estable.
Los coeficientes de la tercera fila los determinamos de la siguiente manera:
<D
;:S0:;0O;A %0 );)T0MA) %0 CM:TOML
b
a
a a
a
b
a
a a
a
b
a
a a
a
1
-
1 /
1
-
D
1 <
1
/
9
1 H
1
1 1 1

1
]
1

1
]
1

1
]
1
de# de# de#

Los coeficientes de la cuarta fila:
c
a a
b b
b
c
a a
b b
b
c
a a
b b
b
1
1 /
1 -
1
-
1 <
1 /
1
/
1 H
1 D
1

1
]
1

1
]
1

1
]
1
de# de# de#

Y as se completan todas las filas sucesivamente.
Ejemplo: Tenemos que la ecuacin caracterstica de cierta funcin de transferencia es:
a ! ! ! ! ! ! ! ' ( $ $ $ $ + + + + + +
9 < D / -
D / - D D
Cumple la condicin necesaria. Armemos el arreglo de Routh:
s
6
: 1 3 1 4
s
5
: 4 2 4 -
s
4
: 2.5 0 4 -
s
3
: 2 -2.4 - -
s
2
: 3 4 - -
s
1
: -
5.067
- - -
s
0
: 4 - - -
Del arreglo vemos que en la primera columna hay dos cambios de signo, por lo tanto
esta ecuacin tiene dos raices en el semiplano derecho, o sea, la funcin de
transferencia tiene dos polos inestables. Podemos determinar que los polos son:
-3.2644, 0.6769 t j.0.7488 (los dos polos inestables), -0.6046 t j.0.9935 y -0.8858.
El criterio de Routh es til para determinar el rango de ganancias el controlador que
aseguran la estabilidad de un sistema retroalimentado.
Por ejemplo, si tenemos el siguiente sistema de control, necesitamos conocer para que
valores de K el sistema es estable.
La funcin transferencia en lazo cerrado resulta:
( ) 2 ! G ! !
! 2
! I
LC
+ + +
+

9 <
( 1 '
( '
- /
<<
;:S0:;0O;A %0 );)T0MA) %0 CM:TOML
El arreglo de Routh resulta:
s
3
: 1 K-6
s
2
: 5 K
s
1
: (4K-30)/5 -
s
0
: K -
Para que el sistema sea estable se debe cumplir que:
0
<
/0 D
>
2
y 0 > 2
Es decir:
< , H > 2
y 0 > 2
Por lo que el sistema ser estable si se cumple que:
< , H > 2
Casos especiales:
1) Primer elemento de una fila es cero:
Si el primer elemento en una fila es cero, lo reemplazamos por una constante
pequea positiva, y continuamos construyendo el arreglo de Routh. Esto significa que
existen polos sobre el eje imaginario.
Ejemplo: Tenemos la siguiente ecuacin caracterstica: a ! ! ! ! ! ' ( $ $ $ + + + +
D / -
< H < 9
El arreglo de Routh es:
s
4
: 1 7 6
s
3
: 5 5 0
s
2
: 6 6 -
s
1
: 0 0 -
nuev
o
s
1
: 0 -
s
0
: 6 - -
En este caso tenemos dos races en el eje imaginario, ya que si fuera negativo,
habra dos cambios de signo y por lo tanto dos polos en el semiplano derecho.
Podemos comprobar que las races de esta ecuacin caracterstica son: .-3, -2 y t1.j
(polos en el eje imaginario).
2) Fila entera con ceros:
Si una fila est llena de ceros, tomamos el polinomio auxiliar de la fila anterior y lo
derivamos con respecto a s, y el resultado lo utilizamos para seguir construyendo el
arreglo de Routh.
<9
;:S0:;0O;A %0 );)T0MA) %0 CM:TOML
Ejemplo: Tenemos la siguiente ecuacin caracterstica:
a ! ! ! ! ! ! ' ( $ $ $ $ + + + + +
< D / -
< 11 -/ -U 1-
El arreglo de Routh es:
s
5
: 1 11 28
s
4
: 5 23 12
s
3
: 6.4 25.6 0
s
2
: 3 12 -
s
1
: 0 0 -
nuevo
s
1
: 6 0 -
s
0
: 12 - -
Aqu utilizamos la ecuacin auxiliar a
1
(s) = 3.s
2
+ 12 (de la cuarta fila), y la derivamos:
6s; reemplazando la quinta fila. Aqu vemos que no existe ningn cambio de signo, lo
que significa que no existe ninguna raz en el semiplano derecho. Que exista una fila
completa de ceros, significa la existencia de races simtricas con respecto al origen,
sobre el eje imaginario o sobre el eje real. En estos casos, estas races estn dadas
por la ecuacin auxiliar a
1
(s) (en este ejemplo las races son s = t2.j).
Podemos comprobar que las races de esta ecuacin caracterstica son: .-3, -1, -1 y
t2.j (polos en el eje imaginario).
<H
;:S0:;0O;A %0 );)T0MA) %0 CM:TOML
Captulo ;
LU+AR DE RAICES
Es una grfica que nos sirve para predecir el comportamiento de un sistema a lazo
cerrado, cuando algunos parmetros del sistema se cambian (normalmente la
ganancia).
Para comprender la importancia del lugar de races, vamos a analizar el
comportamiento de un sistema cuando se encuentra en un sistema de control.
Supongamos que el sistema se define por la siguiente funcin de transferencia:
( / '
1
( '
+

! !
! I
Vamos a controlar este sistema con un controlador muy simple, en el que la entrada al
sistema a ser controlado es proporcional (con ganancia K).
Figura 5.1. Planta con un controlador proporcional
La ganancia a lazo cerrado est dado por:
2 ! !
2
! !
2
! !
2
! /
! C
+ +

+
+
+

/
( / '
1
( / '
( '
( '
-
Queremos examinar de qu manera el comportamiento del sistema vara segn los
cambios de K, as que se prueba varios valores de K. Probamos con K = 1, 10 y 100.
<U
;:S0:;0O;A %0 );)T0MA) %0 CM:TOML
Figura 5.2. Respuesta al escaln con K=1
Observando la figura 5.2, podemos concluir que la respuesta es demasiado lenta.
Figura 5.3. Respuesta al escaln con K=10
Con K = 10 la respuesta es casi deseable, aunque es posible que se desee ajustar K,
para llegar a tener menos sobreoscilacin.
Figura 5.4. Respuesta al escaln con K=100
La respuesta con K = 100 es demasiado oscilatoria. Es evidente que con este mtodo
"prueba y error" se puede tardar mucho tiempo en encontrar un adecuado valor para K.
Es necesario otro enfoque para hacer frente a esos sistemas.
Para el sistema descrito anteriormente, es posible calcular la ubicacin precisa de las
races, y elegir un valor de K que nos de una buena respuesta. Para sistemas ms
<.
;:S0:;0O;A %0 );)T0MA) %0 CM:TOML
complicados no es tan simple por lo que se necesita un mtodo ms general para
resolver el problema. Este mtodo ms general se llama el mtodo "Lugar de Races".
Con esta tcnica podemos hacer una grfica de las races variando un parmetro (por
lo general, la ganancia).
Analicemos la ecuacin caracterstica de:
2 ! !
2
! /
! C
+ +

/ ( '
( '
-
El cual ser: 0 /
-
+ + 2 ! !
Podemos encontrar algunas races para diferentes valores de K:
3 Race
1 -2,62, -0,38
2 -2, -1
4 -1,5 j1.32
10 -1,5 j2.78
20 -1,5 j4.21
40 -1,5 j6.14
100 -1,5 j9.89
Luego dibujamos las diferentes races en el plano "s
Figura 5.5. Grfica de las races de la ecuacin caracterstica para diferentes valores de K
Se observa que para valores pequeos de K el sistema comienza sobreamortiguado, y
conforme aumenta K se convierte en subamortiguado cada vez ms.
El lugar de races muestra el camino de las races cuando K varia, pero no muestra los
valores actuales de K. La grfica del lugar de races ser:
90
;:S0:;0O;A %0 );)T0MA) %0 CM:TOML
Figura 5.6. Lugar de Races dibujado en el MATLAB
El punto de partida para las races, cuando K = 0, se muestra por las dos pequeas "x",
en s = 0 y s =- 3. Cuando K aumenta las dos races se mueven horizontalmente y se
renen en S =- 1,5, luego se mueven verticalmente.
A continuacin se realizar un anlisis ms general para dibujar el lugar de races.
Supongamos tener el sistema de la figura 5.7, donde K
A
es la ganancia de nuestro
controlador, el cual puede ser elegido por el diseador.
Figura 5.7. Diagramas de bloques del sistema de control tpico.
La funcin de transferencia de este sistema es:
5 !
/ !
2 2 I !
2 2 I !
A p
A p
' (
' (
' (
' (


+ 1
Los polos de esta funcin de transferencia estarn dados por las races de la ecuacin
caracterstica:
1 0 + 2 2 I !
A p
' (
.
Dependiendo de la ganancia K
A
que elija el diseador, ser la respuesta dinmica que
tendr el sistema retroalimentado (la ubicacin de los polos depende de esta
ganancia).
Se propuso que el diseador del sistema de control construya el lugar geomtrico de
todas las races posibles de la ecuacin
1 0 + 2 2 I !
A p
' (
a medida que K
A
vara desde 0 a infinito. De esta manera podemos elegir
adecuadamente la ganancia K
A
y ver los efectos de polos y ceros adicionales.
91
;:S0:;0O;A %0 );)T0MA) %0 CM:TOML
Tenemos que la funcin de transferencia de la planta es:
I ! 2 I ! 2
b !
a !
p p p
' ( ' (
' (
' (

donde a(s) y b(s) son polinomios de grado n y m respectivamente, y n m.
Estos polinomios los podemos escribir de las siguientes maneras:
b ! ! b ! b
b ! ! A ! A ! A
b ! ! A
m m
m
m
i
i
m
' ( $
' ( ' ($ ' ( ' (
' ( ' (
+ + +

1
1
1 -
1
a ! ! a ! a
a ! ! p ! p ! p
a ! ! p
n n
n
m
i
i
m
' ( $
' ( ' ($ ' ( ' (
' ( ' (
+ + +

1
1
1 -
1
Llamemos K a: K = K
A
. K
p
.
Entonces la ecuacin caracterstica la podemos escribir de las siguientes maneras:
1 0 + 2 I ! ' (
[5.1]
1 0 + 2
b !
a !
' (
' (
[5.2]
a ! 2 b ! ' ( ' ( + 0
[5.3]
I !
2
' (
1
[5.4]
Consideraremos primeramente el caso en que K es positivo.
El grado de la ecuacin caracterstica es el grado mayor de los dos polinomios a(s) y
b(s) (observando la ecuacin 5.3), y por lo tanto es de grado n. Esto significa que el
nmero de ramas del lugar geomtrico de las races estar dado por n el grado del
polinomio denominador de la funcin de transferencia a lazo abierto.
De la ecuacin 5.3 tambin podemos decir que para K = 0, las races de la ecuacin
caracterstica estar dada por los polos de la funcin de transferencia a lazo abierto
(las races de a(s)); y que para K infinito, las races de la ecuacin caracterstica estar
dada por los ceros de la funcin de transferencia a lazo abierto (las races de b(s)).
Conclusin: existir n ramas en el lugar geomtrico de las races que partirn de los
polos a lazo abierto y terminarn en los ceros a lazo abierto.
Pautas para el trazado de un lugar geomtrico de las races:
Definicin :
9-
;:S0:;0O;A %0 );)T0MA) %0 CM:TOML
El lugar geomtrico de las races, es el lugar geomtrico de valores de s para el cual 1
+ K.G(s) = 0 se cumple, ya que el parmetro K (real) vara desde cero a infinito. Por lo
general, 1 + K.G(s) es el denominador de una funcin de transferencia de inters, de
modo que las races en el lugar geomtrico son polos en lazo cerrado del sistema.
Partiendo de la ecuacin 5.4, y teniendo en cuenta que la funcin compleja la podemos
discriminar en su magnitud y fase, y para K positivos, podemos arribar a la siguiente
definicin:
Definicin :
El lugar geomtrico de las races de G(s) es el lugar geomtrico de puntos en el plano s
donde la fase de G(s) es 180.
Esto se lo conoce como la condicin de fase, que significa matemticamente:
I ! l ' ( + 1U0 /90

, con l entero.
Figura 5.8. Punto de prueba y los ngulos
formados con los polos y ceros.
Ejemplo: Tenemos la siguiente funcin de transferencia G(s) a lazo abierto:
( )
[ ]
( )
{ }
I !
!
! ! !
' (
+
+ + +
1
- D D
-
En la figura 5.8 mostramos con cruces la ubicacin de los polos de esta funcin de
transferencia, y con crculos los ceros. Suponemos un punto de prueba ubicado en s
o
=
-1 + 2.j, y realizamos la suma de las contribuciones de las fases para determinar si es o
no punto del lugar de races:
I
1 1 - / D
= 90
o
- 116
o
.6 - 0
o
-76
o
-33
o
.7
= -136
o
.3
La fase de G para este punto de prueba vale -136
o
.3, y no 180
o
por lo tanto este punto
de prueba no pertenece al lugar geomtrico de las races.
9/
;:S0:;0O;A %0 );)T0MA) %0 CM:TOML
1.1. *ao para tra'ar el lu5ar 5eo#@trico de la race
PASO 1: Dibujamos los polos y ceros de la funcin de transferencia a lazo abierto (con
x y o).
PASO 2: Encontramos la parte del eje real de los lugares geomtricos de las races.
Si tomamos un punto de prueba sobre el eje real, la contribucin en ngulo de los ceros
o polos complejos conjugados se anular, puesto que uno de los ngulos se cancela
con el de su conjugado.
Entonces debemos considerar solo los polos y ceros que se encuentran sobre el eje
real. Los mismos aportarn 0 si el punto de prueba est a la derecha del polo o cero, y
aportar con -180 o +180 si el punto de prueba est a la izquierda del polo o cero,
respectivamente.
Conclusin: Es lu/ar /eom0trico "e las ra1ces2 a)uel lu/ar "el eje real )ue est3 a la
iz)uier"a "e un n4mero impar "e polos # ceros.
PASO 3: Dibujamos las asntotas para valores grandes de K.
Cuando K tiende a infinito, la ecuacin 1 + K.G(s) = 0 se satisface solamente si G(s) =
0.
Esto puede ocurrir de dos maneras:
- En los ceros de G(s), o sea las races del polinomio b(s).
- Escribamos la ecuacin caracterstica de la siguiente manera:
1 0 + 2
b !
a !
' (
' (
1 0
1
1
1
1
+
+ + +
+ + +

2
! b ! b
! a ! a
m m
m
n n
n
$
$
Si n > m, G(s) tiende a cero cuando s tiende a infinito.
Para K grandes, m ceros se cancelaran con m polos, y los (n-m) polos restantes se
veran agrupados como en un solo polo mltiple en :
1
1
0 +

2
!
! 2
n m
' (
,

0
Tomemos un punto de prueba
! / e
(
0

$
, para un valor grande y fijo de R, y
variable. Aplicando el criterio de la fase, tenemos:
' ( n m l
l
o o
+ 1U0 /90
9D
;:S0:;0O;A %0 );)T0MA) %0 CM:TOML
El ngulo
l
nos dar el ngulo que forman las asntotas, que sern de:
1 , $$$ , - , 1 , 0
( '
/90 1U0

+
m n l
m n
l
o o
l

El lugar de origen de las asntotas est en


!
0

. Averigemos cunto vale :
! a ! a ! a ! p ! p ! p
n n n
n n
+ + + +

1
1
-
-
1 -
$ $ ' ($' ($$$$$' (
Es fcil de deducir que:
a p
i
i
n
1
1

, el opuesto de la sumatoria de los polos a lazo


abierto.
Por otro lado, la ecuacin caracterstica la podemos escribir de la siguiente manera:
! a ! a ! a 2 ! b ! b ! b
n n n
n
m m m
m
+ + + + + + + + +

1
1
-
-
1
1
-
-
0 $ $ ' $ $ (
Si m < (n-1), tenemos que K no afectar el coeficiente de s
n-1
, que ser a
1
; y por lo
tanto, si llamamos r
i
las races de esta ecuacin, tenemos que:



a r p
i
i
n
i
i
n
1
1 1
Ahora, para K grandes, m de las races coinciden con los ceros z
i
, y (n-m) son del
sistema asinttico
1
' ( !
n m



, cuyos polos sumarn (n-m) . . Por lo tanto:
r n m A p
i
i
n
i
i
m
i
i
n


+ +
1 1 1
' (
Entonces, el centro de las asntotas estar dado por:
( '
1 1
m n
A p
m
i
i
n
i
i

PASO 4: Calculamos los ngulos de salida y de llegada de polos y ceros.


Esto lo analizamos considerando un punto de prueba muy cercano al polo o al cero, y
aplicando el criterio de fase.
PASO 5: Estimamos (o calculamos) los puntos donde los lugares geomtrico de las
races cruzan el eje imaginario.
Esto podemos obtener determinando el K, para el cual el sistema se torna inestable
(con el criterio de Routh), y luego determinando las races de la ecuacin caracterstica
para ese K.
9<
;:S0:;0O;A %0 );)T0MA) %0 CM:TOML
Otra manera de determinarlo es reemplazar en la ecuacin caracterstica s por j., de
esta manera tenemos dos ecuaciones (una para la parte real de la ecuacin y otra para
la imaginaria), con dos incgnitas: K y .
PASO 6: Estimamos la localizacin de las races mltiples, especialmente en el eje
real, y determinamos los ngulos de llegada y salida de estos lugares.
Supongamos que para un determinado K, existen races mltiples. Llamemos en ese
caso r
i
, a las races de la ecuacin caracterstica para ese K, o sea:
1 0
1 -
+ 2 I ! ! r ! r ! r % !
n
$ ' ( ' ($ ' ($$$$' ( ' (
Llamemos r

a la raz mltiple, entonces habr un trmino de la productoria que ser:


(s- r

)
a
, con a 2. O sea:
% ! ! r ! r
a
i
i
n a
' ( ' ( ' (


1
Derivemos esta productoria, y evalumosla en s = r

:
d% !
d!
! r ! r ! r ! r ! r ! r
d% !
d!
! r
i
i
n a
a
i
i
n a
a
i
i
n a
! r
' (
' ( ' ( ' ( ' ( ' ( ' (
' (

+ + +
+ + +


1
1 - 1
1
0 0 0 0
Aplicando ste resultado a la ecuacin caracterstica, y sabiendo que se debe cumplir
en s = r

:
a ! 2 b ! ' ( $ ' ( + 0
y
da
d!
2
db
d!
! r ! r
+

$ 0
Combinando ambas ecuaciones para eliminar K:
da
d!
a !
b !
db
d!
! r ! r


' (
' (
0
Que es equivalente a:
1
0
b !
da
d!
a !
b !
db
d!
! r ! r
' (
' (
' (

_
,



Si dividimos esta ecuacin por -b(s), obtendremos que:
d
d!
a
b
! r

_
,

0
Entonces tenemos que la condicin de races mltiples es la siguiente:
0
( '
1

,
_

r !
! I d!
d
PASO 7: Completamos el dibujo, combinando los resultados anteriores.
99
;:S0:;0O;A %0 );)T0MA) %0 CM:TOML
Ejemplo: Tenemos la siguiente funcin de transferencia a lazo abierto:
I !
!
! !
' (
' (

+
+
1
.
-
En la figura 5.9 mostramos los resultados de los sucesivos pasos seguidos para el
trazado del lugar geomtrico de las races para esta funcin de transferencia.
PASO 1 PASO 2

PASO 3 PASO 4

PASO 5 PASO 6
PASO 7
9H
;:S0:;0O;A %0 );)T0MA) %0 CM:TOML
Figura 5.9. Pasos para el trazado del lugar geomtrico de las races para la funcin de transferencia del
ejemplo.
Para el paso 3, el clculo del centro y ngulo de las asntotas son:

l
l


1U0 /90
/ 1
.0 -H0


,
A

+


. 0 0 1
/ 1
D
Para el paso 4, el clculo de los ngulos de salida de los polos en el origen
(suponiendo un apartamiento pequeo de los mismos), aplicando el criterio del ngulo:
- 0 0 1U0 /90 .0 .0 + +

n ,
De la misma manera podemos determinar el ngulo de salida del otro polo, y el de
llegada al cero.
Para el paso 6, determinamos la raz mltiple realizando la derivada, la cual vale

m
/
. Podemos comprobar que la multiplicidad de esta raz es 3, ya que la derivada
segunda de -1/G(s) con respecto a s evaluada en ese punto tambin es cero. Por lo
tanto los ngulos de entrada a ese polo mltiple es:
/ 1U0 /90 90 90 1U0

n , ,
Y los ngulos de salida son:
/ 1U0 1U0 /90 1-0 0 1-0 +

n , ,
1.!. Condici(n de #a5nitud
El criterio de magnitud es el siguiente que lo obtenemos aplicando el mdulo a la
ecuacin [5.4]:
I !
2
' (
1
, y para K > 0:
2
I !

1
' (
Este criterio nos permite determinar el valor de K, una vez escogido una ubicacin
determinada del lugar geomtrico de las races.
9U
;:S0:;0O;A %0 );)T0MA) %0 CM:TOML
Figura 5.10 Lugar de las races del ejemplo, con un punto de prueba y los vectores para determinar la
ganancia.
Ejemplo: Supongamos tener la siguiente funcin de transferencia:
I !
! ! !
' (
' (

+ +
1
D U
-
cuyos polos se ubican en el origen y en -2t2.j. En la figura 5.10 mostramos el lugar de
las races para esta funcin de transferencia.
Elegimos un punto de prueba en -0.667t2.j, que pertenece al lugar geomtrico de las
races, pues ese punto cumple con ciertos requerimientos para nuestro sistema de
control.
Entonces determinamos la ganancia K para llegar a ese punto como:
2
I !
! ! ! ! !
1
0 0 - 0 /
' (
2 -10U 1/// D -19 11U< $ $ $ $
9.
;:S0:;0O;A %0 );)T0MA) %0 CM:TOML
Captulo ;I
ANALISIS DE SISTEMAS DE CONTROL EN EL DOMINIO DE LA 0RECUENCIA
Si tenemos una planta G(s) (ver la figura 6.1) estable, al cual se aplica una entrada
sinusoidal r(t) = a. sen(.t), vamos a demostrar
que la salida ser tambin una funcin sinusoidal con la misma frecuencia , luego del
transitorio inicial (o sea cuando t tiende a infinito).
Figura 6.1 Sistema de Control con entrada senoidal
Si la entrada a la planta tiene la forma r(t) = a. sen(.t), su transformada de Laplace es:
/ !
a
!
' (

+

- -

Entonces la salida de la planta Y(s) ser:
5 ! I ! / ! I !
a
!
I !
a
! ( ! (
' ( ' ( ' ( ' ( ' (
' ( ' (


+


+


- -

Como G(s) es estable, s = tj. son polos simples de Y(s). Entonces Y(s) puede ser
expandida, usando expansin en fracciones simples, como:
S's( de polos los a de&idos Terminos ( '
1 1
+
+
+

( !
G
( !
G
! 5
donde:
( '
- -
( ' ( '
1

( I
(
a
(
a
( I
( !
a
! I G
( !
H0
;:S0:;0O;A %0 );)T0MA) %0 CM:TOML
G
a
(
I (
1
-


' (
Como todos los polos de G(s) tienen su parte real negativa, sus respuestas tendern a
cero cuando el tiempo t tienda a infinito.
Entonces, la respuesta estacionaria del sistema debido a la entrada sinusoidal ser:
- t L
a I (
( ! (
a I (
( ! (
!
' (
' (
' (
' (
' (

1
]
1
1
- -

Todos los coeficientes de G(s) los asumimos que son reales, pero generalmente es
compleja, y la podemos expresar como su forma polar:
I ( A e
(
' ( ' (
' (




donde A y estn definidos como:
( ) ( )
[ ]
A I ( I ( I ( ' (= ' ( Oe' ' (( ;m' ' (( +
- -
1
-
(( ' Oe'
(( ' ;m'
arc#an ( '

( I
( I
A es la amplitud de G y es la fase de G.
Si G(s) tiene todos los coeficientes reales, entonces A() es una funcin par (o sea
A() = A(-)); y () es una funcin impar (o sea, () = -(-)).
Entonces:
I ( A e A e
( (
' ( ' ( ' (
' ( ' (




y sustituyendo en y
s
(t) tenemos:
- t
a A e e
(
a A e e
(
!
( ( t ( ( t
' (
' ( ' (
' ( ' (





- -
- t a A
e e
(
!
( t ( t
' ( ' (
' ' (( ' ' ((


+ +


-
- t a A t
!
' ( ' ( sin' ' (( +
que demuestra que la salida tambin es senoidal.
).1Dia5ra#a de Bode
Los diagramas de Bode es otra forma de representar el comportamiento dinmico de
alguna planta. Aprovechndose del resultado obtenido en el punto anterior, Bode
representa la planta a travs de dos diagramas: uno de magnitud donde muestra en
cuanto cambia logartmicamente la amplitud del seno en funcin de la frecuencia de la
sinusoide, y otra en donde representa el cambio de fase tambin en funcin de la
frecuencia .
H1
;:S0:;0O;A %0 );)T0MA) %0 CM:TOML
Supongamos una funcin de transferencia G(s) descripta por sus ceros y polos.
Evaluemos G(j.), suponiendo un cero y dos polos:
I (
( A
( p ( p
!
! !
r e
r e r e
r
r r
e
(
( (
(
' (
' ( ' (
' (

+
+ +

_
,


+ +


1
1 -
1
- /
1
- /
1
- /
1
- /
1 - /
Entonces el mdulo de G(j.) ser:
I (
r
r r
' (

1
- /
y su logaritmo:
log ' ( log log log
10 10 1 10 - 10 /
I ( r r r
en decibeles:
I r r r
db
-0 -0 -0
10 1 10 - 10 /
log log log
Y la fase es:
I
1 - /
Por lo tanto para realizar el diagrama Bode de G(s) basta conocer como son las
respuestas de cada uno de sus polos y ceros, pues luego se suman directamente.
Estudiemos entonces tres casos de diagramas de Bode:
) n polos o ceros en el origen: 2 (
n
' (
) polos o ceros simples: ' ( ( +
t
1
1
) polos o ceros complejos conjugados:
( (
n n

_
,
+

+

1
]
1
1
t

-
1
- 1
Caso :
Magnitud:
-0 -0 -0
10 10 10
+ log ' ( log log 2 ( 2 n (
n

-0 -0 -0
10 10 10
+ log ' ( log log 2 ( 2 n
n

son rectas de distintas pendientes, segn el valor de n (ver la figura 6.2). Si hubiera un
K distinto de 1, debera sumarse una constante (20 . log K) a la recta.
H-
;:S0:;0O;A %0 );)T0MA) %0 CM:TOML
Figura 6.2. Diagrama de magnitud para polos y ceros en el origen (con K = 1).
Fase:
La fase estar dada por (j.)
n
, que ser constante (independiente del valor de ), y
ser de n.90: para n = -1 la fase ser constante y valdr -90, para n = -2 la fase ser
constante y valdr -180, para n = 1 la fase ser constante y valdr +90.
Caso :
En este caso, tanto para el diagrama de magnitud como para el diagrama de fase, las
curvas se aproximan por asntotas para frecuencias muy bajas o muy altas.
Magnitud:
Analicemos j..+1
para . << 1,
( I ( + 1 1 -0 0
10
log ' (
para . >> 1,
( ( I ( + + 1 -0 -0
10 10 10
log ' ( 'log log (
Figura 6.3. Diagrama de magnitud para un cero simple en -1/ ( = 10).
H/
;:S0:;0O;A %0 );)T0MA) %0 CM:TOML
Figura 6.4. Diagrama de fase para un cero simple en -1/ ( = 10).
El punto de cruce de estas asntotas est en = 1/ (ver la figura 6.3). En ese punto es
la mxima desviacin de la curva de las asntotas, que vale 3 db. Para el caso de un
polo simple, la pendiente de la recta sera negativa.
Fase:
Para . << 1,
1 0

Para . >> 1,
( .0

(para un polo sera -90)


Para . = 1,
' ( ( + 1 D<

(para un polo sera -45)


En la figura 6.4 mostramos como es la curva de la fase de un cero simple con las
asntotas que la representan.
Caso :
En este caso analizamos:
( (
n n

_
,
+

+

1
]
1
1
t

-
1
- 1
Para este caso podemos decir que para el caso particular de = 1.0, tenemos dos
polos simples en el mismo lugar, lo que nos dar diagramas de magnitud y fase
similares a los del caso anterior: el diagrama de magnitud luego del punto de quiebre
(que ser en =
n
) tendr una pendiente de t40 db/dec (positivo en el caso de ceros
y negativo en el caso de polos); y el diagrama de fase envs de subir o bajar t90, lo
har a t180 (positivo en el caso de ceros y negativo en el caso de polos).
Para ms chicos las asntotas siguen siendo las mismas pero las curvas cambian
alrededor de la frecuencia
n
, como mostramos en las figuras 6.5 y 6.6, para el caso de
polos. En el diagrama de magnitud aparece un pico de resonancia que se hace ms
HD
;:S0:;0O;A %0 );)T0MA) %0 CM:TOML
pronunciado a medida que se hace ms chico. En el diagrama de fase el cambio de
fase se hace cada vez ms abrupto a medida que se hace ms chica.
Figura 6.5. Diagrama de magnitud de un par de polos complejos conjugados, con
n = 1, y = 0.1, 0.2, 0.3, ...... 1.0.
Figura 6.6. Diagrama de fase de un par de polos complejos conjugados, con
n = 1, y = 0.1, 0.2, 0.3, ...... 1.0.
Del diagrama de magnitud podemos ver que la frecuencia en donde se produce el pico

p
es cercana a
n
(se aproxima ms a ella a medida que se hace ms chica), por lo
tanto podemos aproximar el valor del pico de la resonancia como:
M I (
pico n

' (

1
-
para
<0 < $
Y como vemos, el pico est estrechamente relacionado con el .
Ejemplo: Tenemos la funcin de transferencia:
H<
;:S0:;0O;A %0 );)T0MA) %0 CM:TOML
I !
!
! ! !
' (
' $ (
' ( ' (

+
+ +
-000 0 <
10 <0
a la cual queremos obtener su respuesta en frecuencia.
Evaluamos entonces la funcin en s = j.:
I (
(
(
( (
' (
$

_
,

_
,


+

_
,


-
0 <
1
10
1
<0
1
Luego realizamos la construccin de los diagramas de Bode, empezando por el polo en
el origen, luego por el cero en 0.5, y despus sucesivamente por los polos en 10 y en
50; mediante las asntotas.
En las figuras 6.7 y 6.8 mostramos los diagramas de magnitud y de fase para este
sistema, con el trazado de las asntotas en lnea ms gruesa.
Figura 6.7. Diagrama de magnitud para el ejemplo.
Figura 6.8. Diagrama de fase para el ejemplo.
).!. Epeci.icacione en la repueta en .recuencia
H9
;:S0:;0O;A %0 );)T0MA) %0 CM:TOML
Ancho de banda:
Definimos ancho de banda como la frecuencia mxima a la cual la salida de un sistema
rastrear una entrada sinusoidal de manera satisfactoria.
Por convencin, para el sistema que mostramos en la figura 8.9 (sistema con
retroalimentacin unitaria), el ancho de banda es la frecuencia de r a la cual la salida y
est atenuada por un factor 0.707 veces la entrada (o sea hasta -3 db).
El ancho de banda (
AB
) es una medida de la velocidad de respuesta del sistema, pues
est relacionado con
n
(para = 0.7,
AB

n
; para otros siempre est dentro de un
factor 2); y por lo tanto est relacionado con el tiempo de crecimiento.
Figura 6.9. Sistema con
retroalimentacin unitaria y su diagrama de magnitud para la definicin de ancho de banda y mximo
resonante.
Magnitud mxima resonante (M
p
):
Es la magnitud mxima que toma el diagrama de magnitud como mostramos en la
figura 6.9.
Est relacionada con la amortiguacin del sistema, pero en la prctica no se usa y se
usa ms frecuentemente los conceptos de m3r/enes "e /anancia y "e fase, para
indicar el grado de amortiguacin del sistema. Estos conceptos los definiremos ms
adelante en la siguiente seccin.
).". Etabilidad
Habamos visto que un punto del plano s, que cumpla con las siguientes condiciones
pertenece al lugar geomtrico de las races del sistema retroalimentado:
2 I ! ' ( 1
y
I ! ' ( 1U0

Sabemos que el punto de estabilidad neutra de este sistema, es cuando las ramas del
lugar geomtrico de las races cruzan el eje imaginario j. (generalmente, cuando no
existen ceros y polos en el semiplano derecho, al aumentar la ganancia se hace
inestable, cuando a bajas ganancias es estable).
Entonces, para esa ganancia, tenemos que los puntos de cruce sern:
HH
;:S0:;0O;A %0 );)T0MA) %0 CM:TOML
2 I ( ' ( 1
y
I ( ' ( 1U0

Entonces, para los casos en donde aumentar la ganancia conduce a la insetabilidad, el


sistema ser estable si
2 I ( < ' ( 1
, en
I ( ' ( 1U0

Esto sucede simplemente debido a que cualquier punto K menor que el valor en el
punto neutralmente estable debe ser estable.
El factor para el cual la ganancia es menor que el valor crtico se conoce como mar/en
"e /anancia.
Por otro lado, mar/en "e fase es la cantidad por la que la fase de G(j.) sobrepasa los
-180 cuando la magnitud cruza los 0 db (o sea cuando
2 I ( ' ( 1
).
Para sistemas de no mnima fase, estos criterios no pueden usarse; y debemos recurrir
al criterio de estabilidad de Nyquist.
).$Dia5ra#a de N&8uit
El criterio de estabilidad de Nyquist se basa en el principio de Cauchy, y por lo tanto lo
enunciamos aqu.
Principio de Cauchy
Una evaluacin del contorno de una funcin compleja solo encerrar al origen si el
contorno contiene una singularidad de la funcin.
En la figura 6.10 ilustramos este concepto.
HU
;:S0:;0O;A %0 );)T0MA) %0 CM:TOML
Figura 6.10. Evaluaciones de
dos funciones complejas, sobre una curva cerrada del plano s (la primera sin cerrar ninguna singularidad
y la segunda si).
Figura 6.11. Contorno de Cauchy utilizado en control.
El principio lo podemos extender dando cabida a mltiples singularidades (polos o
ceros de la funcin), dentro del contorno de evaluacin. Entonces el nmero y direccin
de las vueltas alrededor del origen cambiar.
En particular, en control, dejamos que el contorno C
1
en el plano s encierre totalmente
el semiplano derecho (ver la figura 6.11).
La evaluacin resultante de H(s) solo encerrar el origen si H(s) tiene un polo o cero en
el semiplano derecho.
Una idea clave que hace til esto es que podemos emplear la evaluacin del contorno
C
1
de la funcin de lazo abierto de K.G(s) para determinar la estabilidad del sistema:
La funcin de transferencia de lazo cerrado es:
H.
;:S0:;0O;A %0 );)T0MA) %0 CM:TOML
5 !
/ !
% !
2 I !
2 I !
' (
' (
' (
' (
' (


+ 1
Por lo tanto, las races de lazo cerrado son los ceros de:
1 0 + 2 I ! ' (
Si el contorno de evaluacin de s, que encierra el semiplano de la derecha, contiene un
cero o un polo de 1+K.G(s), entonces el contorno evaluado de 1+K.G(s) encerrar el
origen.
Pero 1+K.G(s) es simplemente K.G(s) movido hacia la derecha en 1. Por lo tanto, si
1+K.G(s) encierra al origen, K.G(s) encerrar a -1.
La representacin de la evaluacin de K.G(s) de esta manera, la conocemos como
grfica de Nyquist o grfica polar.
Ahora, si G(s) = b(s)/a(s) (con a(s) y b(s) polinomios):
1 1 + +
+
2 I ! 2
b !
a !
a ! 2 b !
a !
' (
' (
' (
' ( ' (
' (
Como los polos de G(s) se conocen, entonces tambin conocemos las races de a(s).
Supongamos por el momento que no hay ningn polo en el semiplano derecho (no
existen races de a(s) en ese semiplano); una vuelta alrededor del -1 de la funcin
K.G(s), usando el contorno de la figura 6.11, indica que hay una raz inestable del
sistema de lazo cerrado.
Si utilizamos la convencin de recorrer el contorno en el sentido de las agujas del reloj,
la cantidad de vueltas que K.G(s) alrededor del -1 en el sentido horario indicar la
cantidad de ceros menos la cantidad de polos que la funcin 1+K.G(s) tiene dentro del
contorno (o sea en el semiplano derecho), o sea:
N = Z - P
donde:
N es el nmero de vueltas en el sentido horario de K.G(s) alrededor del -1.
Z es la cantidad de ceros de 1+K.G(s) en el semiplano derecho.
P es la cantidad de polos de 1+K.G(s) en el semiplano derecho.
Pero el valor de P lo conocemos, pues son la cantidad de races de a(s) en el
semiplano derecho (o sea que son la cantidad de polos inestables que tiene la funcin
de transferencia de lazo abierto).
Entonces podemos determinar Z, que es la cantidad de races de la ecuacin
caracterstica que existen en el semiplano derecho (o sea la cantidad de polos
inestables que posee la funcin de transferencia a lazo cerrado):
Z = N - P
U0
;:S0:;0O;A %0 );)T0MA) %0 CM:TOML
En caso de existir polos de lazo abierto en el eje imaginario, se modifica el contorno en
el lugar del polo con un pequeo semicrculo de radio que pasa del lado derecho del
polo (as se esquiva el mismo).
Para la construccin del grfico de Nyquist, uno puede basarse en la informacin que
nos suministra los diagramas de Bode, ya que los mismos nos dan la magnitud y la
fase de la imagen del semieje imaginario positivo. Para la imagen del otro semieje, es
simplemente el reflejo de la curva anterior con el eje real. Solo debemos analizar lo que
pasa con la imagen del semicrculo en el infinito, y si existen polos de la funcin a lazo
abierto en el eje imaginario.
Podemos resumir el anlisis de la estabilidad de Nyquist en los siguientes pasos:
1) Realizar el grfico polar de K.G(s), con ayuda de los diagramas de Bode, como lo
mencionamos anteriormente.
2) Calcular el nmero de vueltas en el sentido de las agujas del reloj alrededor de -1, y
llamarlo N.
3) Determinar el nmero de polos inestables de G(s) (polos en el semiplano derecho), y
llamarlo P.
4) La cantidad de races de lazo cerrado inestables que llamamos Z, ser entonces: Z =
N + P.
Ejemplo:
En la figura 9.3 mostramos el diagrama de bloques del sistema al cual queremos
analizar su estabilidad por el mtodo de Nyquist.
Figura 6.12. Diagrama de bloques del sistema del ejemplo.
Realizamos el diagrama de Nyquist para:
2 I (
(
(
(

+

_
,

' (


1
10
1
El diagrama obtenido lo mostramos en la figura 6.13. Notar que para -> 0 por el lado
positivo la fase es de 90, con magnitud infinita; y que alrededor del origen para w
desde -90 hasta +90 (pasando por los 0), su imagen va desde los -90 a los +90
pasando por 180.
U1
;:S0:;0O;A %0 );)T0MA) %0 CM:TOML
Otra cosa para observar, es que la curva de w > 0 viene desde +j (habitualmente viene
de -j). Esto es as por tratarse de un sistema de no mnima fase.
Figura 6.13. Grfico de Nyquist para el sistema del ejemplo.
Como vemos, el sistema es condicionalmente estable, ya que para K chicos, el nmero
de vueltas alrededor del -1 es de +1 (P = 1), por lo tanto Z = N + P = 1 + 1 = 2 y el
sistema es inestable.
Pero para K grandes, N el nmero de vueltas alrededor del -1 es -1 (gira en sentido
antihorario, ya que el punto de cruce por el eje real se corre a la izquierda del -1), y por
lo tanto Z = N + P = -1 + 1 = 0, y el sistema es estable en ese caso.
El cruce por el eje real se realiza cuando
10
(cuando la fase vale -180, realizar el
diagrama de Bode), y as podemos determinar el K para el cual tenemos el lmite de
estabilidad que es K = 1.
).1 M<r5ene de 5anancia & de .ae
En la figura 6.14 mostramos cmo interpretar los mrgenes de ganancia y de fase en
una grfica de Nyquist o grfica polar.
U-
;:S0:;0O;A %0 );)T0MA) %0 CM:TOML
Figura 6.14. Mrgenes de ganancia y de fase en un grfico polar.
De la figura vemos que estos mrgenes nos dicen cun cerca est la curva de encerrar
al -1.
Para sistemas de primero y segundo orden, la fase nunca cruza la lnea de -180, y por
lo tanto el margen de ganancia es infinito.
Para sistemas de orden superior es posible tener ms de un cruce de la magnitud por
los 0 db, o tambin ms de un cruce de la fase por los 180, y los mrgenes pueden
ser mal interpretados.
Adems, para sistemas con fase no mnima, exhiben criterios de estabilidad distintos a
los definidos anteriormente.
En todos estos casos especiales, pueden estudiarse muy bien con el grfico y el criterio
de Nyquist.
Los mrgenes de ganancia y de fase (sobre todo ste ltimo), dan una medida del
grado de estabilidad del sistema. Los podemos relacionar con otros parmetros:
El margen de fase lo podemos relacionar con el parmetro . En la figura 6.15
mostramos en funcin del margen de fase para los sistemas de segundo orden
(funcin de transferencia a lazo cerrado
T !
! !
' (
+ +


-
- -
-
; y con funcin de
transferencia a lazo abierto
( )
I !
! !
' (
+


-
-
), donde demostramos que las podemos
aproximar por: MF 100 , para < 0.7.
U/
;:S0:;0O;A %0 );)T0MA) %0 CM:TOML
Figura 6.15. en funcin del margen de fase para un sistema de segundo orden (lnea contnua), con
lnea de trazo y punto la aproximacin utilizada MF=100 . .
Figura 6.16. Sobrepico (Mp) y pico resonante (Mr) en funcin del margen de fase para un sistema de
segundo orden.
Tambin podemos ver que el sobrepico de una respuesta escaln est relacionado con
la magnitud del pico resonante como lo mostramos en la figura 6.16.
).) Teore#a de Bode
Teorema:
Para cualquier sistema de mnima fase (es decir, uno sin polos ni ceros en el semiplano
de la derecha), la fase de G(j.) est relacionada en forma nica con la magnitud de
G(j. ).
En otras palabras, dado el diagrama de magnitud de un sistema de mnima fase,
podemos determinar su correspondiente diagrama de magnitud.
No haremos la demostracin aqu, pero lo que podemos comprobar es que la
pendiente de la magnitud de G(j.) en las partes asintticas de los diagramas coincide
con un valor para la fase constante de n . 90 (donde n es la pendiente en dcada de
amplitud por dcada de frecuencia en una escala logartmica contra logartmica).
UD
;:S0:;0O;A %0 );)T0MA) %0 CM:TOML
Podemos concluir, adems, que si conocemos el diagrama de fase, podemos
determinar el diagrama de magnitud (en un sistema de mnima fase), solo si
conocemos el valor de la magnitud en alguna frecuencia.
Sistemas de no-mnima fase:
Sistemas de no-mnima fase reciben su nombre ya que los polos y ceros en el
semiplano derecho contribuyen con una fase mayor (en valor absoluto) que sus
respectivos polos y ceros simtricos respecto al eje imaginario del semiplano izquierdo;
dando los mismos diagramas de magnitud.
Dejamos como ejercicio al lector la comprobacin de lo enunciado.
Debemos recalcar aqu entonces que el teorema de Bode solo es vlido para los
sistemas de mnima fase nicamente.
).2. Repueta en .recuencia de la'o cerrado
Hasta ahora hemos realizado los diagramas de Bode de los sistemas a lazo abierto.
Analicemos que ocurre cuando cerramos el lazo.
Tpicamente los sistemas describen el siguiente comportamiento:
( ) 2 I ( para
c
>> << 1,
( ) 2 I ( para
c
<< >> 1,
donde
c
es la frecuencia de cruce por los 0 db (del sistema a lazo abierto). Por lo tanto
la magnitud de la funcin de transferencia a lazo cerrado es:
( )
( )
( )
T (
2 I (
2 I (


+

'



1
1,
,
ll
j S mm
c
c
En las cercanas del cruce por cero, donde
( ) 2 I ( 1
, |T| depende fuertemente
del margen de fase.
Una margen de fase de 90 significa una fase de K.G evaluada en
c
igual a -90, y por
lo tanto |T(j.
c
)| = 0.707. Por otro lado, un margen de fase de 45 lleva a un |T(j.
c
)| =
1.31. En la figura 9.8 mostramos los diagramas de magnitud para lazo cerrado, para
sistemas de distintas mrgenes de fase (22, 45 y 90).
Esto muestra que el ancho de banda (
AB
) para valores pequeos del margen de fase
es tpicamente algo mayor que la frecuencia del cruce por cero
c
, y generalmente
menor a 2.
c
. Entonces:

c AB c
-
U<
;:S0:;0O;A %0 );)T0MA) %0 CM:TOML
Figura 6.17. Diagrama de magnitud para sistemas de lazo cerrado.
).A. Retrao en el tie#po
Sabemos que un retraso temporal en una funcin de transferencia est representada
como:
I ! e
6
!T
' (

Analicemos cunto contribuye en la magnitud del sistema:
I ( e T ( T
6
( T
' ( cos' ( $sin' (

1
, para todo .
O sea que el retraso temporal no afecta el diagrama de magnitud del sistema (esto es
razonable pues e
-s.T
solo retrasa la respuesta en el tiempo y no afecta la amplitud de la
respuesta).
Analicemos cmo modifica la fase:
I ( T
6
' (
O sea que la fase se hace ms negativa a medida que aumenta la frecuencia (lo
hace linealmente con ). En la figura 9.9 mostramos el diagrama de fase para
I ! e
6
!T
' (

, con T = 1 seg.
Esto significa que lograr anchos de banda superiores a = 5 / T se hacen imposibles y
= 3 / T se hacen muy difciles.
U9
;:S0:;0O;A %0 );)T0MA) %0 CM:TOML
Figura 6.18 Diagrama de fase para un retraso temporal.
BIBLIO+RA0IA
Richar C. Dorf (2000), Sistemas Modernos de Control. E.U.A.: Addison Wesley
beroamericana
Katsuhiko Ogata (1998), ngeniera de Control Moderna. Mexico: Prentice Hall.
Benjamn C. Kuo (1996), Sistemas de Control Automtico, Mexico: Prentice Hall.
Eronini Umez (2001), Dinmica de Sistemas de Control. Mxico: Thomson
Learning
Katsuhiko Ogata (2008), Sistemas de Control en tiempo discreto. Mexico:
Prentice Hall.
Franklin, Gene F.; Powell, J. David & Emami-Naeini, Abbas (1994), "Feedback
Control of Dynamic Systems", tercera edicin, Addison-Wesley.
Chen, Chi-Tsong (1993), "Analog & Digital Control System Design", edicin
internacional, Saunders College Publishing.
UH

You might also like