Subido por ferrerma13

MANUAL CURSO MATLAB

Anuncio
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
Introducción
Este curso de introducción a MatLab está orientado a estudiantes de ingeniería
interés por la programación. Los conocimientos de ingeniería requeridos no
demasiado altos ya que está pensado para estudiantes de todos los cursos. Las
primeras lecciones servirán de repaso para los estudiantes de cursos avanzados y
actuales para los estudiantes de los primeros cursos.
con
son
dos
muy
Los conocimientos que hay que tener sobre ordenadores son los básicos. Este curso
está pensado para dotar a los asistentes con un instrumento de proceso y cálculo. La
razón fundamental por la que esto es importante en el análisis de ingeniería (al igual
que en otras disciplinas) es que en muchas ocasiones las modernas teorías y los
modelos en las que éstas se sustentan no producen soluciones analíticas y hay que
buscar por tanto soluciones numéricas a los problemas que plantean.
Otra razón de importancia es que incluso en el caso en que la teoría produzca
soluciones analíticas a veces es conveniente realizar simulaciones de los modelos o
presentar los resultados de un modo que requiere el proceso de datos para problemas
muy particulares.
Un lenguaje de programación como MatLab permite resolver todos los problemas que
resuelven paquetes de programación diseñados para propósitos generales y además
permite resolver también los problemas particulares que se nos planteen para los
cuales no existen paquetes. MatLab es un lenguaje de programación tan flexible como
Fortran y, aunque por ser un lenguaje interpretado sea más lento que Fortran o C,
tiene unas capacidades gráficas y una sencillez de manejo que lo hacen perfecto para
iniciarse en la programación. Además las últimas versiones de MatLab permiten el diseño
de interfaces gráficas de usuario (gui) que nos permiten diseñar entornos gráficos muy
fáciles de usar por aquellos a los que nuestros programas estén dirigidos.
En este curso vamos a ver los comandos básicos de programación e iremos amenizando el
aprendizaje con ejercicios de modelos sencillos, para que al tiempo que aprendemos a
manejar el lenguaje vayamos viendo su utilidad con problemas concretos de ingeniería.
Una vez que tengamos los conocimientos básicos estaremos en condiciones de subir un
nivel con la versión MatLab 6.5 en la que existen una serie de bibliotecas para una
variedad sorprendente de problemas entre los que se encuentran el análisis de señales,
matemáticas control, redes neuronales y un largísimo etcétera.
No cabe ninguna duda de que este instrumento de trabajo tiene valor en el mercado y
por tanto es bueno acostumbrarse a manejarlo con soltura. La notación a utilizar en el
texto indicará en negrita nombres de comandos interpretables por MatLab como disp o
nombres de archivos que MatLab puede leer como programa.m.
El autor…
1
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
Tabla de contenido
Capitulo I:
Información general e introducción al programa Matlab
(Lo básico antes de comenzar)
ACERCA DE ESTE MANUAL
¿QUE ES MATLAB ???
Arranque y espacio de trabajo
USO DEL HELP
CONTROL DE LOS FORMATOS DE SALIDA Y DE OTRAS OPCIONES DE MATLAB
OPERACIONES CON MATRICES Y VECTORES
DEFINICIÓN DE MATRICES DESDE TECLADO
OPERACIONES CON MATRICES
TIPOS DE MATRICES PREDEFINIDOS
FORMACIÓN DE UNA MATRIZ A PARTIR DE OTRAS
NÚMEROS REALES DE DOBLE PRECISIÓN
NÚMEROS COMPLEJOS: FUNCIÓN COMPLEX
CADENAS DE CARACTERES
VARIABLES Y EXPRESIONES MATRICIALES
OPERADOR DOS PUNTOS (:)
FUNCIONES MATEMÁTICAS ELEMENTALES QUE OPERAN DE MODO ESCALAR
FUNCIONES QUE ACTÚAN SOBRE VECTORES
FUNCIONES QUE ACTÚAN SOBRE MATRICES
FUNCIONES MATRICIALES ESPECIALES
FUNCIONES DE FACTORIZACIÓN Y/O DESCOMPOSICIÓN MATRICIAL
MÁS SOBRE OPERADORES RELACIONALES CON VECTORES Y MATRICES
FUNCIONES PARA CÁLCULOS CON POLINOMIOS
OTROS TIPOS DE DATOS DE MATLAB
CADENAS DE CARACTERES
GRÁFICOS BIDIMENSIONALES
FUNCIÓN PLOT
ESTILOS DE LÍNEA Y MARCADORES EN LA FUNCIÓN PLOT
AÑADIR LÍNEAS A UN GRÁFICO YA EXISTENTE
COMANDO SUBPLOT
CONTROL DE LOS EJES
FUNCIÓN LINE()
CONTROL DE VENTANAS GRÁFICAS: FUNCIÓN FIGURE
Otras funciones gráficas 2-D
FUNCIÓN FPLOT
FUNCIÓN FILL PARA POLÍGONOS
ENTRADA DE PUNTOS CON EL RATÓN
GRAFICOS 2D Y 3D
Graficas de curvas dadas en coordenadas polares y parametricas.
Comandos básicos de programación
COMO HACER UN PROGRAMA EN MATLAB (GENERALIDADES)
PROGRAMACIÓN DE MATLAB
BIFURCACIONES Y BUCLES
Comando END
Comando IF
Comando WHILE
Comando FOR
Comando PLOT
Funciones de dos variables
Comando DISP
Comando INPUT
FICHEROS *.M
FICHEROS DE COMANDOS (SCRIPTS)
RECOMENDACIONES GENERALES DE PROGRAMACIÓN
2
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
Capitulo II:
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
Introducción
Tratamiento mediante funciones de transferencia. (Sistemas continuos)
Dominio Temporal
Dominio Frecuencial
Respuesta en frecuencia
Márgenes de estabilidad
Efectos de los retardos
Comandos relacionados con operaciones de bloques
Lugar de las raíces
Estudio temporal y frecuencial de sistemas de primer y segundo orden
Sistemas de primer orden
Sistemas de segundo orden
Análisis del efecto de un cero en la respuesta temporal de un sistema de segundo
orden
Influencia de polos adicionales.
Polos dominantes
Tratamiento mediante funciones de transferencia. Sistemas discretos
Tratamiento mediante descripción en el espacio de estados
Manipulación mediante objetos
Resumen de los comandos mas importantes del Control System Toolbox
Capitulo III:
Simulink
Simulink
Introducción al Simulink
Librería de bloques.
Crear un nuevo modelo
Agregar un bloque al Área de trabajo
Unir bloques con una línea.
Sacar una derivación
Bloques más comunes (de interés para la materia Control) de la librería de Simulink.
Ejemplo elemental
Parámetros de simulación
Iniciar y detener una simulación.
Capitulo IV:
Complementarios…
PID. Descripción y reglas heurísticas de Sintonización
Introducción
El sistema a controlar
Controlador PID
Control a lazo cerrado.
Ajuste del PID. Reglas del Ziegler-Nichols.
Primer método de Ziegler-Nichols
Segundo método de Ziegler-Nichols
Comentarios finales:
3
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
4
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
5
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
Capitulo I: Información general e introducción al programa Matlab
(Lo básico antes de comenzar)
1.ACERCA DE ESTE MANUAL
Las primeras versiones de este manual estuvieron dirigidas a alumnos de un curso
introductorio de una aplicación que, para muchos alumnos, iba a constituir su
primer contacto con los ordenadores y/o con la programación por lo tanto estaba
estructurado de forma muy sencilla pero a pesar de lo resumido estaban muy bien
explicadas todas las actividades desarrolladas en él.
Desde este momento, este manual se ha adaptado a las asignaturas de Controles
Automáticos e Instrumentación de Plantas de la especialidad de Ingeniería Mecánica
en La Universidad del Zulia, Núcleo Cabimas.
Por encima de la asignatura citada, este manual puede ser útil a un público más
amplio, que incluye a alumnos de cursos superiores de las distintas escuelas de
Ingeniería, a alumnos de Tercer Ciclo y a profesores que quieren conocer más de
cerca las posibilidades que tendría MATLAB en sus asignaturas, asi como a aquellas
personas que esten realizando o piensen realizar cursos de mejoramiento
profesional en el area tecnica, cientifica o industrial en los cuales se requiera
de una herramienta computacional de la talla de MATLAB..
Se ha pretendido llegar a un equilibrio entre el detalle de las explicaciones, la
amplitud de temas tratados y el número de páginas. En algunos casos, junto con las
instrucciones introducidas por el usuario se incluye la salida de MATLAB; en otros
casos no se incluye dicha salida, pero se espera que el lector disponga de un PC
con MATLAB y vaya introduciendo esas instrucciones a la vez que avanza en estas
páginas. En muchas ocasiones se anima al lector interesado a ampliar el tema con
la ayuda del programa (toda la documentación de MATLAB está disponible on-line a
través del Help).
En cualquier caso recuérdese que la informática moderna, más que en
“saber” consiste en “saber encontrar lo que se necesita” en pocos
segundos.
2.¿QUE ES MATLAB ???
Eso es una buena Pregunta, MATLAB es el nombre abreviado de “MATrix LABoratory” o
en cristiano “Laboratorio de Matrices”. Lo más fácil es pensar en MATLAB como en
una calculadora programable muy potente, como éstas, MATLAB es capaz de realizar
las operaciones básicas de suma, resta, multiplicación, división, etc.... A la vez
que puede manejar números complejos, logaritmos, operaciones trigonométricas,
operaciones lógicas, ... Por último, podemos almacenar, procesar y recuperar datos
mediante algoritmos numéricos, en realidad, MATLAB es mucho más que una buena
calculadora… Una de las capacidades más atractivas es la de realizar una amplia
variedad de gráficos en dos y tres dimensiones, realiza cálculos numéricos
con vectores y matrices conformados por números escalares, tanto
reales como complejos. Es la herramienta de cálculo numérico por excelencia,
es un lenguaje de programación fácil de usar y extremadamente potente, posee
poderosas capacidades gráficas y es una plataforma de desarrollo de aplicaciones,
ya que cuenta con numerosos grupos de herramientas (Código básico y librerías
6
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
especializadas llamados toolboxes) de aplicación específica (toolbox de matemática
simbólica, toolbox de procesamiento de señales, toolbox de control,etc)
3.Arranque y espacio de trabajo
MATLAB se puede arrancar como cualquier otra aplicación de
Windows 95/98/2000/ME/XP/NT, clicando dos veces en el icono
correspondiente en el escritorio (figura 1) (donde quiera que
esté ubicado según la configuración del ordenador) o por medio
del menú INICIO. Al arrancar MATLAB se abre una ventana del tipo
de la indicada en la Figura 2.
Figura 1
En la ventana inicial (“ventana de comandos”) se
sugieren ya algunos comandos para el usuario
inexperto que quiere echar un vistazo a la
aplicación. En dicha ventana aparece también el
prompt (aviso) característico de MATLAB (»). Esto
quiere decir que el programa está preparado para
recibir instrucciones.
Esta ventana será la mayor parte del tiempo la
ventana de trabajo con la que estaremos casi
siempre interactuando, es decir será a través de
Figura 2. Ventana Inicial
ella que intercambiaremos información con el
programa al introducir datos y obtener respuesta a lo solicitado.
Como ya se dijo matlab es un programa fundamentalmente de calculo, por lo tanto
seria bueno apreciar desde el principio la potencia de este, se puede comenzar con
algunos ejemplos sencillos sobre tópicos básicos desde el punto de vista
matemático. Supongamos que queremos calcular el determinante de una matriz
cuadrada de orden 3, (esto es algo muy común dentro de cualquier curso básico de
calculo o de algebra elemental) para lo cual recurrimos el método aquel de la suma
algebraica del producto de los elementos de las diagonales principales, menos la
suma algebraica del producto de las diagonales secundarias…. Y listo problema
resuelto, pero cuan engorroso es este procedimiento?, y aun mas a cuantos errores
de calculo estamos propensos?, aun así alguien bien experimentado en el área de
los números podría pensar que esto no es problema, solo hay que practicar un poco
hasta tener soltura y fluidez de lo que se hace. Pues hagamos una pequeña
modificación en el tamaño de la matriz y volvamos a realizar el calculo del
determinante… hablemos de pasar de una matriz de orden 3, a una de orden 5 (solo
aumentar el orden en 2 unidades….) la cantidad de cálculos relacionados con este
pequeño cambio aumenta en forma exponencial lo cual evidentemente aumenta la
posibilidad de errores, hace la operación exponencialmente mas engorrosa e
inevitablemente dispara hasta niveles inaceptables el tiempo de calculo, además de
disminuir por todo lo anterior la confiabilidad de los cálculos realizados.
Ahora bien veamos como maneja matlab esto.
Para una matriz cuadrada de orden 3 el procedimiento para calcular el determinante
es el siguiente:
1. definir o introducir la matriz
2. pedir al programa que calcule el determinante
Para una matriz cuadrada de orden 5 el procedimiento es:
7
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
1. definir o introducir la matriz
2. pedir al programa que calcule el determinante..
Como puede verse el procedimiento es sencillo y no cambia en nada, la única
diferencia es la introducción de los datos o elementos de la matriz… veamos como
se hace esto, en las siguientes líneas aparece una corrida de el calculo del
determinante de una matriz de orden 3 y luego el calculo para una de orden 5
para el de orden 3:
>> a=[1 2 3;4 5 6;7 8 45]
a =
1
2
3
4
5
6
7
8
45
>> b=det(a)
b =
-108
Para el de orden 5:
>> c=[1 2 3 4 5;4 5 7 5 6;7 8 4 7 5;4 2 5 6 2;7 0 9 0 9]
c =
1
2
3
4
5
4
5
7
5
6
7
8
4
7
5
4
2
5
6
2
7
0
9
0
9
>> d=det(c)
d =
4630
Como puede verse el procedimiento en efecto no cambia, se utilizaron los mismos
comandos e instrucciones para ambos casos, lo único que cambia son los datos
introducidos (matlab no es adivino para adivinar a cual matriz debe extraerle el
determinante) y constituye la parte en la cual el usuario interactúa con el
computador.
En este punto es bueno aclarar que matlab no es un programa que hace milagros ni
resuelve problemas de ningún tipo, matlab es solo una herramienta de trabajo la
cual facilita las cosas pero nunca podrá resolver problemas y tomar decisiones en
base a análisis de nada, ese trabajo es de cada uno de nosotros, ninguna
herramienta,
mecánica,
electrónica
o
computacional
puede
sustituir
los
conocimientos ni puede realizar nuestro trabajo, ellas son solo eso herramientas
que lo facilitan pero no resuelven por si solas nada, por ello es importante el
conocimiento de lo que se esta haciendo, además como toda herramienta
computacional, el programa (al igual que la computadora en general) es un programa
“ESTUPIDO” ya que siempre ara lo que tu le pidas que haga, el problema esta en que
en muchísimas ocasiones, lo que le pedimos que haga no es lo que queremos que
haga, y por lo tanto al proporcionar mal informaron de entrada obtendremos datos o
información de salida (respuesta) incorrecta o inconsistente lo cual no es culpa
del programa…
Ante tal situación quedan dos soluciones, la primera consiste en no utilizar el
programa al no ser responsables i consientes de lo que escribimos, y la segunda
consiste en que al contrario del caso anterior necesitamos hacernos responsables
de los datos que proporcionamos además de saber que es lo que quiero hacer o
calcular y pedirle exactamente eso al programa…
8
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
Como ejemplo adicional considérese el trabajo que daría resolver una simple matriz
de 3 por tres pero que sus elementos sean decimales y complejos….
Parta este caso, matlab resuelve de igual manera… veamos.
>> e=[1+i 3+5i 0.34+9i;5+8i 0+i 1;0+3i 6 2]
e =
Columns 1 through 2
1.0000 + 1.0000i
3.0000 + 5.0000i
5.0000 + 8.0000i
0 + 1.0000i
0 + 3.0000i
6.0000
Column 3
0.3400 + 9.0000i
1.0000
2.0000
>> f=det(e)
f =
-3.9378e+002 +2.2032e+002i
» A= rand(6), B= inv(A), B*A
A=
0.9501
0.2311
0.6068
0.4860
0.8913
0.7621
0.4565
0.0185
0.8214
0.4447
0.6154
0.7919
0.9218
0.7382
0.1763
0.4057
0.9355
0.9169
0.4103
0.8936
0.0579
0.3529
0.8132
0.0099
0.1389
0.2028
0.1987
0.6038
0.2722
0.1988
0.0153
0.7468
0.4451
0.9318
0.4660
0.4186
2.7510
-2.5266
-0.6076
-0.7576
-4.6087
3.3088
3.6505
-1.4681
-2.1058
-0.6076
-4.7057
2.9929
0.1513 -6.2170 -2.4143
-0.5742 5.3399 1.5631
-0.0857 1.5345 1.8561
-0.3681 3.1251 -0.6001
2.5299 6.1284 0.9044
-0.1943 -5.1286 -0.6537
B=
5.7430
-4.4170
-1.3917
-1.6896
-3.6417
2.7183
ans =
1.0000 0.0000
0 0.0000 0.0000 -0.0000
0.0000 1.0000
0.0000 0.0000 -0.0000 0.0000
0
0 1.0000 -0.0000 -0.0000 0.0000
0.0000
0 -0.0000 1.0000 -0.0000 0.0000
-0.0000 0.0000 -0.0000 -0.0000 1.0000 0.0000
-0.0000 -0.0000 -0.0000 -0.0000 -0.0000 1.0000
»
Para apreciar desde el principio la
Potencia de MATLAB, se puede comenzar
por escribir la siguiente línea, a
continuación del prompt. Al final hay
que pulsar intro.
En realidad, en la línea de comandos
que se muestra se han escrito tres
instrucciones diferentes, separadas
por comas. Como consecuencia, la
respuesta del programa tiene tres
partes también, cada una de ellas
correspondiente
a
una
de
las
instrucciones.
Con
la
primera
instrucción se define una matriz
cuadrada
(6x6)
llamada
A,
cuyos
elementos
son
números
aleatorios
entre cero y uno (aunque aparezcan
sólo 4 cifras, han sido calculados
con
16
cifras).
En
la
segunda
instrucción se define una matriz B
que es igual a la inversa de A.
Finalmente se ha multiplicado B por
A, y se comprueba que el resultado es
la matriz unidad.
Otro de los puntos fuertes de MATLAB
son los gráficos, que se verán con
más detalle en una sección posterior.
A título de ejemplo, se puede teclear
la siguiente línea y pulsar intro:
» x=-4:.01:4; y=sin(x);
» plot(x,y), grid, title('Función seno(x)')
En la Figura 3 se puede observar que se abre una nueva ventana en la que aparece
representada la función sin(x). Esta figura tiene un título "Función seno(x)" y
una cuadrícula o "grid". En realidad la línea anterior contiene también varias
instrucciones separadas por comas o puntos y comas. En la primera se crea un
vector x con 801 valores reales entre -4 y 4, separados por una centésima. A
continuación se crea un vector y, cada uno de cuyos elementos es el seno del
9
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
correspondiente elemento del vector x. Después se dibujan los valores de y en
ordenadas frente a los de x en abscisas. Las dos últimas instrucciones establecen
la cuadrícula y el título.
Para
borrar
todas
las
salidas
anteriores
de
MATLAB y dejar limpia la
ventana
principal
se
pueden
utilizar
las
funciones clc y home. La
función
clc
(clear
console) elimina todas las
salidas
anteriores,
mientras
que
home
las
mantiene, pero lleva el
prompt (» ) a la primera
línea de la ventana.
Figura N ° 3
Si se desea salir del
programa,
basta
teclear
los comandos quit o exit,
o bien elegir Exit MATLAB
en el menú File (también
se
puede
utilizar
el
Alt+F4 de todas las aplicaciones de Windows).
Como puede observarse matlab con unas simples líneas de código puede ejecutar
tareas extremadamente complejas en las que el usuario de forma manual tardaría
muchísimo tiempo y los resultados no serian de la calidad grafica que aquí se
obtiene sin mencionar nada de la precisión y la rapidez…
4.USO DEL HELP
MATLAB dispone de un excelente Help con el que
se
puede encontrar la información que se
desee. La Figura 4 muestra las distintas
opciones que aparecen en el menú Help.
También puede obtenerse ayuda de cualquier
comando tecleando la palabra “help” seguida
del nombre del comando y matalb responderá con
Figura 4
un resumen de la aplicación de dicho comando
además de algunos ejemplos sobre su aplicación.
También puede solicitarse ayuda de la misma forma sobre los tolbox de cualquier
área, a lo que matlab responderá con una lista de los comandos contenidos en dicho
tolbox y el usuario deberá seleccionar aquel o aquellos que le interesen para ese
momento…
5.CONTROL DE LOS FORMATOS DE SALIDA Y DE OTRAS OPCIONES
DE MATLAB
Los formatos de salida en la ventana principal de MATLAB se pueden controlar
fácilmente a partir del cuadro de diálogo que se abre con el comando Preferences
del menú File. En la Figura 5 y en la Figura 6 se ven dos de los tres cuadros de
diálogo a los que se accede al elegir ese comando.
10
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
El cuadro de diálogo de la Figura 5 permite elegir un editor de programas distinto
del que trae MATLAB, así como elegir el directorio donde están los ficheros Help.
Figura 5
Figura 6
Respecto a los formatos numéricos con que MATLAB muestra los resultados
(recuérdese que siempre calcula con la máxima precisión), se pueden activar las
mismas posibilidades por medio de comandos tecleados en la línea de comandos de
MATLAB. Los más importantes de estos comandos son los siguientes:
format
format
format
format
format
format
format
format
format
format
format
short
long
hex
bank
short e
short g
long e
long g
loose
compact
rat
coma fija con 4 decimales (defecto)
coma fija con 15 decimales
cifras hexadecimales
números con dos cifras decimales
notación científica con 4 decimales
notación científica o decimal, dependiendo del valor
notación científica con 15 decimales
notación científica o decimal, dependiendo del valor
introduce algunas líneas en blanco en la salida (defecto)
elimina las líneas en blanco citadas (opción recomendada)
expresa los números racionales como cocientes de enteros.
MATLAB aplica un factor de escala general a las matrices cuando los elementos más
grandes o más pequeños son superiores o inferiores respectivamente a una
determinada cantidad.
6.OPERACIONES CON MATRICES Y VECTORES
Ya se ha comentado que MATLAB es fundamentalmente un programa para cálculo
matricial. Inicialmente se utilizará MATLAB como programa interactivo, en el que
se irán definiendo las matrices, los vectores y las expresiones que los combinan y
obteniendo los resultados sobre la marcha. Si estos resultados son asignados a
otras variables podrán ser utilizados posteriormente en otras expresiones. En este
sentido MATLAB sería como una potente calculadora matricial (en realidad es esto y
mucho más...).
Antes de tratar de hacer cálculos complicados, la primera tarea será aprender a
introducir matrices y vectores desde el teclado. Más adelante se verán otras
formas más potentes de definir matrices y vectores.
6.1. DEFINICIÓN DE MATRICES DESDE TECLADO
Como en casi todos los lenguajes de programación, en MATLAB las matrices y
vectores son variables que tienen nombres. Ya se verá luego con más detalle las
reglas que deben cumplir estos nombres. Por el momento se sugiere que se utilicen
letras mayúsculas para matrices y minúsculas para vectores y escalares (MATLAB no
11
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
exige esto, pero puede resultar útil). Para definir una matriz no hace falta
establecer de antemano su tamaño (de hecho, se puede definir un tamaño y cambiarlo
posteriormente). MATLAB determina el número de filas y de columnas en función del
número de elementos que se proporcionan (o se utilizan). Las matrices se definen
por filas; los elementos de una misma fila están separados por blancos o comas,
mientras que las filas están separadas por pulsaciones intro o por caracteres
punto y coma (;). Por ejemplo, el siguiente comando define una matriz A de
dimensión (3x3):
»
A
1
4
7
A=[1 2 3; 4 5 6; 7 8 9]
=
2 3
5 6
8 9
» A'
ans =
1 4 7
A partir de este momento la matriz A está
disponible
para
hacer
cualquier
tipo
de
operación
con
ella
(además
de
valores
numéricos, en la definición de una matriz o
vector
se
pueden
utilizar
expresiones
y
funciones
matemáticas).
Por
ejemplo,
una
sencilla operación con A es hallar su matriz
traspuesta. En MATLAB el apóstrofo (') es el
símbolo
de
trasposición
matricial.
Para
calcular A' (traspuesta de A) basta teclear lo
siguiente (se añade a continuación la respuesta
del programa):
2 5 8
3 6 9
»
B
1
2
3
B=A'
=
4 7
5 8
6 9
» B*A
ans =
66 78 90
78 93 108
90 108 126
» A=[1 4 -3; 2 1 5; -2 5 3]
A =
1 4 -3
2 1 5
-2 5 3
B=inv(A)
B =
0.1803 0.2213 -0.1885
0.1311 0.0246 0.0902
-0.0984 0.1066 0.0574
12
Como el resultado de la operación no ha sido
asignado a ninguna otra matriz, MATLAB utiliza
un nombre de variable por defecto (ans, de
answer), que contiene el resultado de la última
operación. La variable ans puede ser utilizada
como operando en la siguiente expresión que se
introduzca. También podría haberse asignado el
resultado a otra matriz llamada B:
Ahora ya están definidas las matrices A y B, y
es posible seguir operando con ellas. Por
ejemplo, se puede hacer el producto B*A (deberá
resultar una matriz simétrica):
En MATLAB se accede a los elementos de un
vector poniendo el índice entre paréntesis (por
ejemplo x(3) ó x(i)). Los elementos de las
matrices se acceden poniendo los dos índices
entre paréntesis, separados por una coma (por
ejemplo A(1,2) ó A(i,j)). Las matrices se
almacenan por columnas (aunque se introduzcan
por filas, como se ha dicho antes), y teniendo
en cuenta esto puede accederse a cualquier
elemento de una matriz con un sólo subíndice.
Por ejemplo, si A es una
matriz (3x3) se
obtiene el mismo valor escribiendo A(1,2) que
escribiendo A(4). Invertir una matriz es casi
tan fácil como trasponerla. A continuación se
va a definir una nueva matriz A -no singularen la forma:
Ahora se va a calcular la inversa de A y el
resultado se asignará a B. Para ello basta
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
hacer uso de la función inv( ) (la precisión o número de cifras con que se muestra
el resultado se puede cambiar con el menú File/Preferences/General):
» B*A
ans =
1.0000 0.0000 0.0000
0.0000 1.0000 0.0000
0.0
0.0000 1.0000
» x=[10 20 30] % vector fila
x =
10 20 30
» y=[11; 12; 13] % vector columna
y =
11
12
13
» x+y
??? Error using ==> +
Matrix dimensions must agree.
» x+y'
ans =
21 32 43
Para
comprobar
que
este
resultado
correcto basta pre-multiplicar A por B;
es
De forma análoga a las matrices, es posible
definir un vector fila x en la forma
siguiente
(si
los
tres
números
están
separados por blancos o comas, el resultado
será un vector fila):
Por el contrario, si los números están
separados por intros o puntos y coma (;) se
obtendrá un vector columna:
MATLAB tiene en cuenta la diferencia entre
vectores fila y vectores columna. Por
ejemplo, si se intenta sumar los vectores x
e y se obtendrá el siguiente mensaje de
error:
Estas dificultades desaparecen si se suma x
con el vector traspuesto de y:
Aunque ya se ha visto en los ejemplos
anteriores el estilo sencillo e intuitivo
con el que MATLAB opera con matrices y
vectores, a continuación se va a estudiar
este tema con un poco más de detenimiento.
6.2. OPERACIONES CON MATRICES
MATLAB puede operar con matrices por medio de operadores y por medio de funciones.
Se han visto ya los operadores suma (+), producto (*) y traspuesta ('), así como
la función invertir inv( ).
Los operadores matriciales de MATLAB son los siguientes:
OPERADOR
+
–
*
'
^
\
/
.*
./ y .\
.^
DESCRIPCION
adición o suma
sustracción o resta
multiplicación
traspuesta
potenciación
división-izquierda
división-derecha
producto elemento a elemento
división elemento a elemento
elevar a una potencia elemento a elemento
Estos operadores se aplican
también a las variables o
valores escalares, aunque con
algunas
diferencias. Todos
estos
operadores
son
coherentes
con
las
correspondientes operaciones
matriciales: no se puede por
ejemplo sumar matrices que no
sean del mismo tamaño. Si los
operadores no se usan de modo
correcto
se
obtiene
un
mensaje de error.
Los operadores anteriores se pueden aplicar también de modo mixto, es decir con un
operando escalar y otro matricial. En este caso la operación con el escalar se
aplica a cada uno de los elementos de la matriz. Considérese el siguiente ejemplo:
13
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
»
A
1
3
A=[1 2; 3 4]
=
2
4
» A*2
ans =
2 4
6 8
» A-4
ans =
-3 -2
-1 0
Los operadores de división requieren una cierta explicación adicional. Considérese
el siguiente sistema de ecuaciones lineales, Ax = b (1) en donde x y b son
vectores columna, y A una matriz cuadrada invertible. La resolución de este
sistema de ecuaciones se puede escribir en las 2 formas siguientes (¡Atención a la
2ª forma, basada en la barra invertida (\), que puede resultar un poco extraña):
x = inv(A)*b (2a)
x = A\b (2b)
»
A
1
b
2
»
x
0
1
A=[1 2], b=[2]
=
2
=
x=A\b
=
Así pues, el operador división-izquierda por
una matriz (barra invertida \) equivale a
premultiplicar por la inversa de esa matriz.
En realidad este operador es más general y más
inteligente de lo que aparece en el ejemplo
anterior: el operador división-izquierda es
aplicable aunque la matriz no tenga inversa e
incluso no sea cuadrada, en cuyo caso la
solución que se obtiene (por lo general) es la
que proporciona el método de los mínimos
cuadrados. Cuando la matriz es triangular o
simétrica aprovecha esta circunstancia para
reducir el número de operaciones aritméticas.
En algunos casos se obtiene una solución de
mínima con no más de r elementos distintos de
cero, siendo r el rango de la matriz. Esto
puede estar basado en que la matriz se reduce
a forma de escalón y se resuelve el sistema
dando
valor
cero
a
las
variables
independientes. Por ejemplo, considérese el
siguiente ejemplo de matriz (1x2) que conduce
a un sistema de infinitas soluciones:
que es la solución obtenida dando valor cero a
la variable independiente x(1).
» A=[1 2; 1 0; 0 1], b=[2 0 0]'
A =
1 2
1 0
0 1
b =
2
0
0
» x=A\b, resto=A*x-b
x =
0.3333
0.6667
Por otra parte, en el caso de un sistema de
resto =
ecuaciones redundante (o sobre-determinado) el
-0.3333
resultado de MATLAB es el punto más “cercano”
0.3333
-en el sentido de mínima norma del error- a
0.6667
las
ecuaciones
dadas
(aunque
no
cumpla
exactamente ninguna de ellas). Véase el siguiente ejemplo de tres ecuaciones
formadas por una recta que no pasa por el origen y los dos ejes de coordenadas:
14
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
En MATLAB existe también la posibilidad de aplicar elemento a elemento los
operadores matriciales (*, ^, \ y /). Para ello basta precederlos por un punto
(.). Por ejemplo:
» [1 2 3 4]^2
??? Error using ==> ^
Matrix must be square.
» [1 2 3 4].^2
ans =
1 4 9 16
» [1 2 3 4]*[1 -1 1 -1]
??? Error using ==> *
Inner matrix dimensions must agree.
» [1 2 3 4].*[1 -1 1 -1]
ans =
1 -2 3 –4
TIPOS DE DATOS
Ya se ha dicho que MATLAB es un programa preparado para trabajar con vectores y
matrices.
Como caso particular también trabaja con variables escalares (matrices de
dimensión 1). MATLAB trabaja siempre en doble precisión, es decir guardando cada
dato en 8 bytes, con unas 15 cifras decimales exactas. Ya se verá más adelante que
también puede trabajar con cadenas de caracteres (strings) y, desde la versión
5.0, también con otros tipos de datos: Matrices de más dos dimensiones, matrices
dispersas, vectores y matrices de celdas, estructuras y clases y objetos.
6.3. TIPOS DE MATRICES PREDEFINIDOS
Existen en MATLAB varias funciones orientadas a definir con gran facilidad
matrices de tipos particulares. Algunas de estas funciones son las siguientes:
eye(4)
zeros(3,5)
zeros(4)
ones(3)
ones(2,4)
forma la matriz unidad de tamaño (4x4)
forma una matriz de ceros de tamaño (3x5)
ídem de tamaño (4x4)
forma una matriz de unos de tamaño (3x3)
idem de tamaño (2x4)
genera un vector con n valores igualmente espaciados entre x1 y
linspace(x1,x2,n)
x2
genera un vector con n valores espaciados logarítmicamente
logspace(d1,d2,n) entre 10^d1 y 10^d2. Si d2 es pi 6 , los puntos se generan
entre 10^d1 y pi
forma una matriz de números aleatorios entre 0 y 1, con
rand(3)
distribución uniforme, de tamaño (3x3)
rand(2,5)
idem de tamaño (2x5)
forma una matriz de números aleatorios de tamaño (4x4), con
randn(4)
distribución normal, de valor medio 0 y varianza 1.
crea una matriz (4x4) con los números 1, 2, ... 4*4, con la
magic(4)
propiedad de que todas las filas y columnas suman lo mismo
crea una matriz de Hilbert de tamaño (5x5). La matriz de
Hilbert es una matriz cuyos elementos (i,j) responden a la
hilb(5)
expresión (1/(i+j-1)). Esta es una matriz especialmente difícil
de manejar por los grandes errores numéricos a los que conduce.
invhilb(5)
crea directamente la inversa de la matriz de Hilbert
kron(x,y)
produce una matriz con todos los productos de los elementos del
15
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
vector x por los elementos del vector y. Equivalente a x'*y,
donde x e y son vectores fila
construye una matriz cuyo polinomio característico tiene como
coeficientes los elementos del vector pol (ordenados de mayor
grado a menor)
construye la matriz de Vandermonde a partir del vector v (las
columnas son las potencias de los elementos de dicho vector)
compan(pol)
vander(v)
Existen otras funciones para crear matrices de tipos particulares. Con Help/Help
Window se puede obtener información sobre todas las funciones disponibles en
MATLAB, que aparecen agrupadas por directorios. En matlab\elmat aparecen la mayor
parte de las funciones estudiadas en este apartado.
6.4. FORMACIÓN DE UNA MATRIZ A PARTIR DE OTRAS
MATLAB ofrece también la posibilidad de crear una matriz a partir de matrices
previas ya definidas, por varios posibles caminos:
Recibiendo alguna de sus propiedades (como por ejemplo el tamaño),
Por composición de varias submatrices más pequeñas,
Modificándola de alguna forma.
A continuación se describen algunas de las funciones que crean una nueva matriz a
partir de otra o de otras, comenzando por dos funciones auxiliares:
[m,n]=size(A)
n=length(x)
zeros(size(A))
ones(size(A))
A=diag(x)
x=diag(A)
diag(diag(A))
blkdiag(A,B)
triu(A)
tril(A)
rot90(A,k)
flipud(A)
fliplr(A)
reshape(A,m,n)
devuelve el número de filas y de columnas de la matriz A. Si la matriz es
cuadrada basta recoger el primer valor de retorno
calcula el número de elementos de un vector x
forma una matriz de ceros del mismo tamaño que una matriz A previamente
creada
ídem con unos
forma una matriz diagonal A cuyos elementos diagonales son los elementos
de un vector ya existente x
forma un vector x a partir de los elementos de la diagonal de una matriz
ya existente A
crea una matriz diagonal a partir de la diagonal de la matriz A
crea una matriz diagonal de submatrices a partir de las matrices que se
le pasan como argumentos
forma una matriz triangular superior a partir de una matriz A (no tiene
por qué ser cuadrada). Con un segundo argumento puede controlarse que se
mantengan o eliminen más diagonales por encima o debajo de la diagonal
principal.
ídem con una matriz triangular inferior
Gira k*90 grados la matriz rectangular A en sentido antihorario. k es un
entero que puede ser negativo. Si se omite, se supone k=1
halla la matriz simétrica de A respecto de un eje horizontal
halla la matriz simétrica de A respecto de un eje vertical
Cambia el tamaño de la matriz A devolviendo una matriz de tamaño m×n
cuyas columnas se obtienen a partir de un vector formado por las columnas
de A puestas una a continuación de otra. Si la matriz A tiene menos de
m×n 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, ejecútense
las siguientes líneas de comandos y obsérvense los resultados obtenidos:
» A=rand(3)
» B=diag(diag(A))
16
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
» C=[A, eye(3); zeros(3), B]
En el ejemplo anterior, la matriz C de tamaño (6x6) se forma por composición de
cuatro matrices de tamaño (3x3). Al igual que con simples escalares, las
submatrices que forman una fila se separan con blancos o comas, mientras que las
diferentes filas se separan entre sí con intros o puntos y comas. Los tamaños de
las submatrices deben de ser coherentes.
7.NÚMEROS REALES DE DOBLE PRECISIÓN
Los elementos constitutivos de vectores y matrices son números 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 cómo trabaja MATLAB con estos
números y los casos especiales que presentan.
MATLAB mantiene una forma especial para los números muy grandes (más grandes que
los que es capaz de representar), que son considerados como infinito. Por ejemplo,
obsérvese cómo responde el programa al ejecutar el siguiente comando:
» 1.0/0.0
Warning: Divide by zero
ans =
Inf
Así pues, para MATLAB el infinito se representa como
inf ó Inf. MATLAB tiene también una representación
especial para los resultados que no están definidos
como números. Por ejemplo, ejecútense los siguientes
comandos y obsérvense las respuestas obtenidas:
» 0/0
Warning: Divide by zero
ans =
NaN
» inf/inf
ans =
NaN
En ambos casos la respuesta es NaN, que es la
abreviatura de Not a Number. Este tipo de respuesta,
así como la de Inf, son enormemente importantes en
MATLAB, pues permiten controlar la fiabilidad de los
resultados de los cálculos matriciales. Los NaN se
propagan al realizar con ellos cualquier operación
aritmética, en el sentido de que, por ejemplo,
cualquier número sumado a un NaN da otro NaN. MATLAB
tiene esto en cuenta. Algo parecido sucede con los
Inf.
MATLAB dispone de tres funciones útiles relacionadas con las operaciones de coma
flotante. Estas funciones, que no tienen argumentos, son las siguientes:
Eps
Realmin
Realmax
devuelve la diferencia entre 1.0 y el número de coma flotante
inmediatamente superior. Da una idea de la precisión o número de
cifras almacenadas. En un PC, eps vale 2.2204e-016.
devuelve el número más pequeño con que se puede trabajar
(2.2251e-308)
devuelve el número más grande con que se puede trabajar
(1.7977e+308)
8.NÚMEROS COMPLEJOS: FUNCIÓN COMPLEX
» a=sqrt(-4)
a =
0 + 2.0000i
» 3 + 4j
ans =
3.0000 + 4.0000i
17
En muchos cálculos matriciales los datos y/o los resultados
no son reales sino complejos, con parte real y parte
imaginaria. MATLAB trabaja sin ninguna dificultad con números
complejos. Para ver como se representan por defecto los
números complejos, ejecútense los siguientes comandos:
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
En la entrada de datos de MATLAB se pueden
utilizar indistintamente la i y la j para
representar el número imaginario unidad (en la
salida, sin embargo, puede verse que siempre
aparece la i). Si la i o la j no están
definidas como variables, puede intercalarse el
signo (*). Esto no es posible en el caso de que
sí estén definidas, porque entonces se utiliza
el valor de la variable. En general, cuando se
está trabajando con números complejos, conviene
no utilizar la i como variable ordinaria, pues
puede dar lugar a errores y confusiones. Por
ejemplo, obsérvense los siguientes resultados:
» i=2
i =
2
» 2+3i
ans =
2.0000 + 3.0000i
» 2+3*i
ans =
8
» 2+3*j
ans =
2.0000 + 3.0000i
Cuando i y j son variables utilizadas para
otras finalidades, como unidad imaginaria puede utilizarse también la función
sqrt(-1), o una variable a la que se haya asignado el resultado de esta función.
La asignación 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á más adelante):
» A = [1+2i 2+3i; -1+i 2-3i]
A =
1.0000 + 2.0000i 2.0000 + 3.0000i
-1.0000 + 1.0000i 2.0000 - 3.0000i
» A = [1 2; -1 2] + [2 3; 1 -3]*I % En este caso el * es necesario
A =
1.0000 + 2.0000i 2.0000 + 3.0000i
-1.0000 + 1.0000i 2.0000 - 3.0000i
Puede verse que es posible definir las partes reales e imaginarias por separado.
En este caso sí es necesario utilizar el operador (*), según se muestra en el
ejemplo anterior.
MATLAB dispone asimismo de la función complex, que crea un número complejo a
partir de dos argumentos que representan la parte real e imaginaria, como en el
ejemplo siguiente:
» complex(1,2)
ans =
1.0000 +
2.0000i
Es importante advertir que el operador de matriz traspuesta
('), aplicado a matrices complejas, produce la matriz
conjugada y traspuesta. Existe una función que permite hallar
simplemente la matriz conjugada (conj()) y el operador punto y
apóstrofo (.') que calcula simplemente la matriz traspuesta.
9.CADENAS DE CARACTERES
MATLAB puede definir variables que contengan cadenas de caracteres. En MATLAB las
cadenas de texto van entre apóstrofos o comillas simples (Nótese que en C van
entre comillas dobles: "cadena"). Por ejemplo, en MATLAB:
s = 'cadena de caracteres'
Las cadenas de texto tienen su más clara utilidad en temas que se verán más
adelante y por eso se difiere hasta entonces una explicación más detallada.
18
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
10. VARIABLES Y EXPRESIONES MATRICIALES
Ya han aparecido algunos ejemplos de variables y expresiones matriciales. Ahora se
va a tratar de generalizar un poco lo visto hasta ahora.
Una variable es un nombre que se da a una entidad numérica, que puede ser una
matriz, un vector o un escalar. El valor de esa variable, e incluso el tipo de
entidad numérica que representa, puede cambiar a lo largo de una sesión de MATLAB
o a lo largo de la ejecución de un programa. La forma más normal de cambiar el
valor de una variable es colocándola a la izquierda del operador de asignación
(=). Una expresión de MATLAB puede tener las dos formas siguientes: primero,
asignando su resultado a una variable,
variable = expresión
y segundo evaluando simplemente el resultado del siguiente modo, expresión en cuyo
caso el resultado se asigna automáticamente a una variable interna de MATLAB
llamada ans (de answer) que almacena el último resultado obtenido. Se considera
por defecto que una expresión termina cuando se pulsa intro. Si se desea que una
expresión continúe en la línea siguiente, hay que introducir tres puntos (...)
antes de pulsar intro. También se pueden incluir varias expresiones en una misma
línea separándolas por comas (,) o puntos y comas (;).
Si una expresión 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 impresión de grandes
cantidades de números cuando se trabaja con matrices de gran tamaño.
A semejanza de C, MATLAB distingue entre mayúsculas y minúsculas en los nombres de
variables. Los nombres de variables deben empezar siempre por una letra y pueden
constar de hasta 31 letras y números. El carácter guión bajo (_) se considera como
una letra. A diferencia del lenguaje C, no hace falta declarar las variables que
se vayan a utilizar. Esto hace que se deba tener especial cuidado con no utilizar
nombres erróneos en las variables, porque no se recibirá ningún aviso del
ordenador.
El comando clear tiene varias formas posibles:
Clear
sin
argumentos,
clear A, b
clear global
Clear
functions
clear all
clear elimina todas las variables creadas previamente (excepto las
variables globales).
Borra las variables indicadas.
Borra las variables globales.
Borra las funciones.
Borra todas
funciones.
las
variables,
incluyendo
las
globales,
y
las
11. OPERADOR DOS PUNTOS (:)
Este operador es muy importante en MATLAB y puede usarse de varias formas. Se
sugiere al lector que practique mucho sobre los ejemplos contenidos en este
apartado, introduciendo todas las modificaciones que se le ocurran y haciendo
pruebas abundantes (¡Probar es la mejor forma de aprender!).
Para empezar, defínase un vector x con el siguiente comando:
19
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
» x=1:10
x =
1
2
3
4
5
6
7
8
9
10
En cierta forma se podría decir que el operador (:) Representa un rango: en este
caso, los números enteros entre el 1 y el 10. Por defecto el incremento es 1, pero
este operador puede también utilizarse con otros valores enteros y reales,
positivos o negativos. En este caso el incremento va entre el valor inferior y el
superior, en las formas que se muestran a continuación:
» 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 coseno. Ejecútese y obsérvese el resultado
(recuérdese que con (;) Después de un comando el resultado no aparece en
pantalla).
» x=[0.0:pi/50:2*pi]';
» y=sin(x); z=cos(x);
» [x y z]
El operador dos puntos (:) es aún más útil y potente –y también más complicado–
con matrices. A continuación se va a definir una matriz A de tamaño 6x6 y después
se realizarán diversas operaciones sobre ella con el operador (:).
» A=magic(6)
A =
35
1
6
3
32
7
31
9
2
8
28
33
30
5
34
4
36
29
26
21
22
17
12
13
19
23
27
10
14
18
24
25
20
15
16
11
Recuérdese que MATLAB accede a los elementos de una matriz por medio de los
índices de fila y de columna encerrados entre paréntesis y separados por una coma.
Por ejemplo:
» A(2,3)
ans =
7
El siguiente comando extrae los 4 primeros elementos de la 6ª fila:
» A(6, 1:4)
ans =
4
36
29
13
20
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
Los dos puntos aislados representan "todos los elementos".
siguiente comando extrae todos los elementos de la 3ª fila:
» A(3, :)
ans =
31
9
2
22
27
Por
ejemplo,
el
20
Para acceder a la última fila o columna puede utilizarse la palabra end, en lugar
del número correspondiente. Por ejemplo, para extraer la sexta fila (la última) de
la matriz:
» A(end, :)
ans =
4 36 29 13 18 11
El siguiente comando extrae todos los elementos de las filas 3, 4 y 5:
» A(3:5,:)
ans =
31
9
8
28
30
5
2
33
34
22
17
12
27
10
14
20
15
16
Se pueden extraer conjuntos disjuntos de filas utilizando corchetes [ ]. Por
ejemplo, el siguiente comando extrae las filas 1, 2 y 5:
» A([1 2 5],:)
ans =
35
1
6
3
32
7
30
5
34
26
21
12
19
23
14
24
25
16
En los ejemplos anteriores se han extraído 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 continuación se va a definir una matriz identidad B de tamaño
6x6 y se van a reemplazar filas de B por filas de A. Obsérvese que la siguiente
secuencia de comandos sustituye las filas 2, 4 y 5 de B por las filas 1, 2 y 3 de
A,
» B=eye(size(A));
» B([2 4 5],:)=A(1:3,:)
B =
1
0
0
0
35
1
6
26
0
0
1
0
3
32
7
21
31
9
2
22
0
0
0
0
0
19
0
23
27
0
0
24
0
25
20
1
Se pueden realizar operaciones aún más complicadas, tales como la siguiente
» B=eye(size(A));
» B(1:2,:)=[0 1; 1 0]*B(1:2,:)
21
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
Como nuevo ejemplo, se va a ver la forma de invertir el orden de los elementos de
un vector:
» x=rand(1,5)
x =
0.9103
0.7622
0.2625
0.0475
0.7361
» x=x(5:-1:1)
x =
0.7361
0.0475
0.2625
0.7622
0.9103
Obsérvese que por haber utilizado paréntesis –en vez de corchetes– los valores
generados por el operador (:) afectan a los índices del vector y no al valor de
sus elementos. Para invertir el orden de las columnas de una matriz se puede hacer
lo siguiente:
» A=magic(3)
A =
8
1
6
3
5
7
4
9
2
Se sustituyen las dos primeras filas de B por el producto de dichas filas por una
matriz de permutación.
» A(:,3:-1:1)
ans =
6
1
8
7
5
3
2
9
4
Aunque hubiera sido más fácil utilizar la función fliplr(A), que es específica
para ello. Finalmente, hay que decir que A(:) representa un vector columna con las
columnas de A una detrás de otra.
12. FUNCIONES MATEMÁTICAS ELEMENTALES QUE OPERAN DE MODO
ESCALAR
Estas funciones, que comprenden las funciones matemáticas trascendentales y otras
funciones básicas, actúan sobre cada elemento de la matriz como si se tratase de
un escalar.
Se aplican de la misma forma a escalares, vectores y matrices. Algunas de las
funciones de este grupo son las siguientes:
Comando
sin(x)
cos(x)
tan(x)
asin(x)
acos(x)
atan(x)
Descripción
seno
coseno
tangente
arco seno
arco coseno
arco tangente (devuelve un ángulo entre p/2 y p/2)
atan2(x) arco tangente (devuelve un ángulo entre y ); se le pasan 2 argumentos,
proporcionales al seno y al coseno
sinh(x) seno hiperbólico
cosh(x) coseno hiperbólico
tanh(x) tangente hiperbólica
22
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
asinh(x)
acosh(x)
atanh(x)
log(x)
log10(x)
exp(x)
sqrt(x)
sign(x)
rem(x,y)
mod(x,y)
round(x)
fix(x)
floor(x)
ceil(x)
gcd(x)
lcm(x)
real(x)
imag(x)
abs(x)
angle(x)
arco seno hiperbólico
arco coseno hiperbólico
arco tangente hiperbólica
logaritmo natural
logaritmo decimal
función exponencial
raíz cuadrada
devuelve -1 si <0, 0 si =0 y 1 si >0. Aplicada a un número complejo,
devuelve un vector unitario en la misma dirección
resto de la división (2 argumentos que no tienen que ser enteros)
similar a rem (Ver diferencias con el Help)
redondeo hacia el entero más próximo
redondea hacia el entero más próximo a 0
valor entero más próximo hacia 
valor entero más próximo hacia 
máximo común divisor
mínimo común múltiplo
partes reales
partes imaginarias
valores absolutos
ángulos de fase
13. FUNCIONES QUE ACTÚAN SOBRE VECTORES
Las siguientes funciones actúan sobre vectores (no sobre matrices ni sobre
escalares)
Comando
Descripción
Máximo elemento de un vector. Devuelve el valor máximo xm y la
[xm,im]=max(x)
posición que ocupa im
Mínimo elemento de un vector. Devuelve el valor mínimo y la
min(x)
posición que ocupa.
sum(x)
suma de los elementos de un vector
devuelve el vector suma acumulativa de los elementos de un vector
cumsum(x)
(cada elemento del resultado es una suma de elementos del
original)
mean(x)
valor medio de los elementos de un vector
std(x)
desviación típica
prod(x)
producto de los elementos de un vector
devuelve el vector producto acumulativo de los elementos de un
Cumprod(x)
vector
ordenación de menor a mayor de los elementos de un vector x
[y,i]=sort(x) Devuelve el vector ordenado y, y un vector i con las posiciones
iniciales en x de los elementos en el vector ordenado y.
En realidad estas funciones se pueden aplicar también a matrices, pero en ese caso
se aplican por separado a cada columna de la matriz, dando como valor de retorno
un vector resultado de aplicar la función a cada columna de la matriz considerada
como vector. Si estas funciones se quieren aplicar a las filas de la matriz basta
aplicar dichas funciones a la matriz traspuesta.
14. FUNCIONES QUE ACTÚAN SOBRE MATRICES
Las siguientes funciones exigen que el(los) argumento(s) sean matrices. En este
grupo aparecen algunas de las funciones más útiles y potentes de MATLAB. Se
clasificarán en varios subgrupos:
23
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
3.5.1. FUNCIONES
Comando
B = A'
B = A.'
v = poly(A)
t = trace(A)
[m,n] = size(A)
n = size(A)
nf = size(A,1)
nc = size(A,2)
MATRICIALES ELEMENTALES
Descripción
calcula la traspuesta (conjugada) de la matriz A
calcula la traspuesta (sin conjugar) de la matriz A
devuelve
un
vector
v
con
los
coeficientes
del
polinomio
característico de la matriz cuadrada A
devuelve la traza t (suma de los elementos de la diagonal) de una
matriz cuadrada A
devuelve el número de filas m y de columnas n de una matriz
rectangular A
devuelve el tamaño de una matriz cuadrada A
devuelve el número de filas de A
devuelve el número de columnas de A
15. FUNCIONES MATRICIALES ESPECIALES
Las funciones exp(), sqrt() y log() se aplican elemento a elemento a las matrices
y/o vectores que se les pasan como argumentos. Existen otras funciones similares
que tienen también sentido cuando se aplican a una matriz como una única entidad.
Estas funciones son las siguientes (se distinguen porque llevan una "m" adicional
en el nombre):
Comando
expm(A)
sqrtm(A)
logm()
Descripción
Si A=XDX', expm(A)=X*diag(exp(diag(D)))*X'
devuelve una matriz que multiplicada por sí misma da la matriz A
es la función recíproca de expm(A)
Aunque no pertenece a esta familia de funciones, se puede considerar que el
operador potencia (^) está emparentado con ellas. Así, es posible decir que A^n
está definida si A es cuadrada y n un número real. Si n es entero, el resultado se
calcula por multiplicaciones sucesivas. Si n es real, el resultado se calcula
como: A^n=X*D.^n*X' siendo [X,D]=eig(A)
16. FUNCIONES
MATRICIAL
DE
FACTORIZACIÓN
Y/O
DESCOMPOSICIÓN
A su vez este grupo de funciones se puede subdividir en 4 subgrupos:
Funciones basadas en la factorización triangular (eliminación de Gauss):
Comando
[L,U] = lu(A)
B = inv(A)
d = det(A)
E = rref(A)
[E,xc] = rref(A)
U = chol(A)
24
Descripción
descomposición de Crout (A = LU) de una matriz. La matriz L es una
permutación de una matriz triangular inferior (dicha permutación
es consecuencia del pivotamiento por columnas utilizado en la
factorización)
calcula la inversa de A. Equivale a B=inv(U)*inv(L)
devuelve el determinante d de la matriz cuadrada A. Equivale a
d=det(L)*det(U)
reducción a forma de escalón (mediante la eliminación de Gauss con
pivotamiento por columnas) de una matriz rectangular A
reducción a forma de escalón con un vector xc que da información
sobre una posible base del espacio de columnas de A
descomposición de Cholesky de matriz simétrica y positivodefinida. Sólo se utiliza la diagonal y la parte triangular
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
superior de A. El resultado es una matriz triangular superior tal
que A = U'*U
devuelve una estimación del recíproco de la condición numérica de
la matriz A basada en la norma sub-1. Si el resultado es próximo a
1 la matriz A está bien condicionada; si es próximo a 0 no lo
está.
c = rcond(A)
Funciones basadas en el cálculo de valores y vectores propios:
Comando
[X,D] = eig(A)
[X,D] = eig(A,B)
Descripción
valores propios (diagonal de D) y vectores propios (columnas de X)
de una matriz cuadrada A. Con frecuencia el resultado es complejo
(si A no es simétrica)
valores propios (diagonal de D) y vectores propios (columnas de X)
de dos matrices cuadradas A y B (Ax = lBx).
Funciones basadas en la descomposición QR:
Comando
[Q,R] = qr()
B = null(A)
Q = orth(A)
Descripción
descomposición QR de una matriz rectangular. Se utiliza para
sistemas con más ecuaciones que incógnitas.
devuelve una base ortonormal del subespacio nulo (kernel, o
conjunto de vectores x tales que Ax = 0) de la matriz rectangular
A
las columnas de Q son una base ortonormal del espacio de columnas
de A. El número de columnas de Q es el rango de A
Funciones basadas en la descomposición de valor singular
Comando
[U,D,V] = svd(A)
B =
r =
nor
nor
c =
pinv(A)
rank(A)
= norm(A)
= norm(A,2)
cond(A)
Descripción
Descomposición
de
valor
singular
de
una
matriz
rectangular(A=U*D*V'). U y V son matrices ortonormales. D es
diagonal y contiene los valores singulares
Calcula la pseudo-inversa de una matriz rectangular A
Calcula el rango r de una matriz rectangular A
Calcula la norma sub-2 de una matriz (el mayor valor singular)
Co mismo que la anterior
Condición numérica sub-2 de la matriz A. Es el cociente entre el
máximo y el mínimo valor singular. La condición numérica da una
idea de los errores que se obtienen al resolver un sistema de
ecuaciones lineales con dicha matriz: su logaritmo indica el
número de cifras significativas que se pierden
Normas de matrices:
Comando
Descripción
norm(A)
norma sub-2, es decir, máximo valor singular de A, max(svd(A)).
normest(A)
calcula una estimación o aproximación de la norma sub-2. Útil para
matrices grandes en las que norm(A) necesita demasiado tiempo
norm(A,2)
lo mismo que norm(A)
norm(A,1)
norma sub-1 de A, máxima suma de valores absolutos por columnas, es
decir: max(sum(abs((A))))
norm(A,inf)
norma sub- de A, máxima suma de valores absolutos por filas, es
25
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
decir: max(sum(abs((A'))))
Normas de vectores:
Comando
norm(x,p)
norm(x)
norm(x,inf)
norm(x,1)
17. MÁS
Descripción
norma sub-p, es
norma euclídea;
norma sub-¥, es
norma sub-1, es
SOBRE
MATRICES
decir sum(abs(x)^p)^(1/p).
equivale al módulo o norm(x,2).
decir max(abs(x)).
decir sum(abs(x)).
OPERADORES
RELACIONALES
CON
VECTORES
Y
Cuando alguno de los operadores relacionales vistos previamente (<, >, <=, >=, ==
y ~=) actúa entre dos matrices (vectores) del mismo tamaño, el resultado es otra
matriz (vector) de ese mismo tamaño conteniendo unos y ceros, según los resultados
de cada comparación entre elementos hayan sido true o false, respectivamente.
» A=magic(3)
A=
816
357
492
» M=A>4
M=
101
011
010
Por ejemplo, supóngase que se define una matriz magic A de tamaño
3x3 y a continuación se forma una matriz binaria M basada en la
condición de que los elementos de A sean mayores que 4 (MATLAB
convierte este cuatro en una matriz de cuatros de modo automático).
Obsérvese con atención el resultado:
De ordinario, las matrices "binarias" que se obtienen de la
aplicación de los operadores relacionales no se almacenan en memoria
ni se asignan a variables, sino que se procesan sobre la marcha.
MATLAB dispone de varias funciones para ello. Recuérdese que
cualquier valor distinto de cero equivale a true, mientras que un
valor cero equivale a false.
Algunas de estas funciones son:
Comando
any(x)
any(A)
all(x)
all(A)
find(x)
find(A)
Descripción
función vectorial; chequea si alguno de los elementos del vector x cumple una
determinada condición (en este caso ser distinto de cero). Devuelve un uno ó un
cero
se aplica por separado a cada columna de la matriz A. El resultado es un vector
de unos y ceros
función vectorial; chequea si todos los elementos del vector x cumplen una
condición. Devuelve un uno ó un cero
se aplica por separado a cada columna de la matriz A. El resultado es un vector
de unos y ceros
busca índices correspondientes a elementos de vectores que cumplen una
determinada condición. El resultado es un vector con los índices de los
elementos que cumplen la condición
cuando esta función se aplica a una matriz la considera como un vector con una
columna detrás de otra, de la 1ª a la última.
18. FUNCIONES PARA CÁLCULOS CON POLINOMIOS
Para MATLAB un polinomio se puede definir mediante un vector de coeficientes. Por
ejemplo, el polinomio:
x4 – 8x2 + 6x – 10 = 0
Se puede representar mediante el vector [1, 0, -8, 6, -10]. MATLAB puede realizar
diversas
26
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
operaciones sobre él, como por ejemplo evaluarlo para un determinado valor de x
(función
polyval()) y calcular las raíces (función roots()):
» pol=[1 0 -8 6 -10]
pol =
1 0 -8 6 -10
» roots(pol)
ans =
-3.2800
2.6748
0.3026 + 1.0238i
0.3026 - 1.0238i
» polyval(pol,1)
ans =
-11
Para calcular producto de polinomios MATLAB utiliza una función llamada conv() (de
producto de convolución). En el siguiente ejemplo se va a ver cómo se multiplica
un polinomio de segundo grado por otro de tercer grado:
» pol1=[1 -2 4]
pol1 =
1 -2 4
» pol2=[1 0 3 -4]
pol2 =
1 0 3 -4
» pol3=conv(pol1,pol2)
pol3 =
1 -2 7 -10 20 -16
Para dividir polinomios existe otra función
orientadas al
cálculo con polinomios son las siguientes:
Comando
poly(A)
roots(pol)
llamada
deconv().
Las
funciones
Descripción
polinomio característico de la matriz A
raíces del polinomio pol
evaluación del polinomio pol para el valor de x. Si x es un
Polyval(pol,x)
vector, pol se evalúa para cada elemento de x
polyvalm(pol,A)
evaluación del polinomio pol de la matriz A
conv(p1,p2)
producto de convolución de dos polinomios p1 y p2
división del polinomio p por el polinomio q. En c se devuelve
[c,r]=deconv(p,q)
el cociente y en r el resto de la división
descompone el cociente entre p1 y p2 en suma de fracciones
Residue(p1,p2)
simples(ver »help residue)
Polyder(pol)
calcula la derivada de un polinomio
Polyder(p1,p2)
calcula la derivada de producto de polinomios
calcula los coeficientes de un polinomio p(x) de grado n que se
Polyfit(x,y,n)
ajusta a los datos p(x(i)) ~= y(i), en el sentido de mínimo
error cuadrático medio.
27
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
19. OTROS TIPOS DE DATOS DE MATLAB
En los Capítulos precedentes se ha visto la “especialidad” de MATLAB: Trabajar con
vectores y matrices. En este Capítulo se va a ver que MATLAB puede también
trabajar con otros tipos de datos:
Conjuntos o cadenas de caracteres, fundamentales en cualquier lenguaje de
programación.
Hipermatrices, o matrices de más de dos dimensiones.
Estructuras, o agrupaciones bajo un mismo nombre de datos de naturaleza diferente.
Vectores o matrices de celdas (cell arrays), que son vectores o matrices cuyos
elementos pueden ser cualquier otro tipo de dato.
Matrices dispersas o matrices dispersas, que son matrices que pueden ser de muy
gran tamaño con la mayor parte de sus elementos cero.
20. CADENAS DE CARACTERES
MATLAB trabaja también
diferencias respecto a
del manejo de cadenas
caracteres están en el
esté instalado MATLAB.
con cadenas de
C/C++ y Java.
de caracteres
sub-directorio
caracteres, con ciertas semejanzas y también
A continuación se explica lo más importante
en MATLAB. Las funciones para cadenas de
toolbox\matlab\strfun del directorio en que
Los caracteres de una cadena se almacenan en un vector, con un carácter por
elemento. Cada carácter ocupa dos bytes. Las cadenas de caracteres van entre
apóstrofos o comillas simples, como por ejemplo: 'cadena'. Si la cadena debe
contener comillas, éstas se representan por un doble carácter comilla, de modo que
se pueden distinguir fácilmente del principio y final de la cadena. Por ejemplo,
para escribir la cadena ni 'idea' se escribiría 'ni''idea'''. Una matriz de
caracteres es una matriz cuyos elementos son caracteres, o bien una matriz cuyas
filas son cadenas de caracteres. Todas las filas de una matriz de caracteres deben
tener el mismo número de elementos. Si es preciso, las cadenas (filas) más cortas
se completan con blancos.
A continuación se pueden ver algunos ejemplos y practicar con ellos:
» c='cadena'
c =
cadena
» size(c) % dimensiones del array
ans =
1 6
» double(c) % convierte en números ASCII cada carácter
ans =
99 97 100 101 110 97
» char(abs(c)) % convierte números ASCII en caracteres
ans =
cadena
» cc=char('más','madera') % convierte dos cadenas en una matriz
cc =
más
madera
» size(cc) % se han añadido tres espacios a 'más'
ans =
2 6
28
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
Las funciones
siguientes:
más
importantes
para
manejo
de
cadenas
de
caracteres
son
las
double(c)
char(v)
char(c1,c2)
convierte en números ASCII cada carácter
convierte un vector de números v en una cadena de caracteres
crea una matriz de caracteres, completando con blancos las
cadenas más cortas
deblank(c)
elimina los blancos al final de una cadena de caracteres
disp(c)
imprime el texto contenido en la variable c
ischar(c)
detecta si una variable es una cadena de caracteres
isletter()
detecta si un carácter es una letra del alfabeto. Si se le pasa
un vector o matriz de caracteres devuelve un vector o matriz de
unos y ceros
isspace()
detecta si un carácter es un espacio en blanco. Si se le pasa un
vector o matriz de caracteres devuelve un vector o matriz de unos
y ceros
strcmp(c1,c2)
comparación de cadenas. Si las cadenas son iguales devuelve un
uno, y si no lo son, devuelve un cero (funciona de modo diferente
que la correspondiente función de C)
strcmpi(c1,c2)
igual que strcmp(c1,c2), pero ignorando la diferencia entre
mayúsculas y minúsculas
strncmp(c1,c2,n) compara los n primeros caracteres de dos cadenas
c1==c2
compara dos cadenas carácter a carácter. Devuelve un vector o
matriz de unos y ceros
s=[s,' y más']
concatena cadenas, añadiendo la segunda a continuación de la
primera
findstr(c1,c2)
devuelve un vector con las posiciones iniciales de todas las
veces en que la cadena más corta aparece en la más larga
strmatch(cc,c)
devuelve los índices de todos los elementos de la matriz de
caracteres (o vector de celdas) cc, que empiezan por la cadena c
strrep(c1,c2,c3) sustituye la cadena c2 por c3, cada vez que c2 es encontrada en
c1
[p,r]=strtok(t) separa las palabras de una cadena de caracteres t. Devuelve la
primera palabra p y el resto de la cadena r
int2str(v)
convierte un número entero en cadena de caracteres
num2str(x,n)
convierte un número real x en su expresión por medio de una
cadena de caracteres, con cuatro cifras decimales por defecto
(pueden especificarse más cifras, con un argumento opcional n)
str2double(str) convierte una cadena de caracteres representando un número real
en el número real correspondiente
vc=cellstr(cc)
convierte una matriz de caracteres cc en un vector de celdas vc,
eliminando los blancos adicionales al final de cada cadena. La
función char() realiza las conversiones opuestas
sprintf
convierte valores numéricos en cadenas de caracteres, de acuerdo
con las reglas y formatos de conversión del lenguaje C.
Con las funciones anteriores se dispone
posibilidades
para trabajar con cadenas de caracteres.
en
MATLAB
de
una
amplia
A continuación se pueden ver algunos ejemplos:
» num2str(pi) % el resultado es una cadena de caracteres, no un número
ans =
3.142
29
gama
de
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
» num2str(pi,8)
ans =
3.1415927
Es habitual convertir los valores numéricos en cadenas de caracteres para poder
imprimirlos como títulos en los dibujos o gráficos. Véase el siguiente ejemplo:
» fahr=70; grd=(fahr-32)/1.8;
» title(['Temperatura ambiente: ',num2str(grd),' grados centígrados'])
21. GRÁFICOS BIDIMENSIONALES
MATLAB utiliza un tipo especial de ventanas para realizar las operaciones
gráficas. Ciertos comandos abren una ventana nueva y otros dibujan sobre la
ventana activa, bien sustituyendo lo que hubiera en ella, bien añadiendo nuevos
elementos gráficos a un dibujo anterior. Todo esto se verá con más detalle en las
siguientes secciones.
5.1. Funciones gráficas 2D elementales
MATLAB dispone de cuatro funciones básicas para crear gráficos 2-D. Estas
funciones se diferencian principalmente por el tipo de escala que utilizan en los
ejes de abscisas y de ordenadas.
Estas cuatro funciones son las siguientes:
Comando
Descripción
crea un gráfico a partir de vectores y/o columnas de matrices, con
plot()
escalas lineales sobre ambos ejes.
loglog()
ídem con escala logarítmica en ambos ejes
ídem con escala lineal en el eje de ordenadas y logarítmica en el eje
semilogx()
de abscisas
ídem con escala lineal en el eje de abscisas y logarítmica en el eje de
semilogy()
ordenadas
En lo sucesivo se hará referencia casi exclusiva a la primera de estas funciones
(plot). Las demás se pueden utilizar de un modo similar.
Existen además otras funciones orientadas a añadir títulos al gráfico, a cada uno
de los ejes, a dibujar una cuadrícula auxiliar, a introducir texto, etc. Estas
funciones son las siguientes:
Comando
title('título')
Descripción
añade un título al dibujo
añade una etiqueta al eje de abscisas. Con xlabel off
xlabel('tal')
desaparece
añade una etiqueta al eje de ordenadas. Con ylabel off
ylabel('cual')
desaparece
introduce 'texto' en el lugar especificado por las coordenadas
x e y. Si x e y son vectores, el texto se repite por cada par
text(x,y,'texto') de elementos. Si texto es también un vector de cadenas de texto
de la misma dimensión, cada elemento se escribe en las
coordenadas correspondientes
Introduce texto con ayuda del ratón: el cursor cambia de forma
gtext('texto')
y se espera un clic para introducir el texto en esa posición
define rótulos para las distintas líneas o ejes utilizados en
legend()
la figura. Para más detalle, consultar el Help
grid
activa la inclusión de una cuadrícula en el dibujo. Con grid
30
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
off desaparece la cuadrícula
Borrar texto (u otros elementos gráficos) es un poco más complicado; de hecho, hay
que preverlo de antemano. Para poder hacerlo hay que recuperar previamente el
valor de retorno del comando con el cual se ha creado. Después hay que llamar a la
función delete con ese valor como argumento. Considérese el siguiente ejemplo:
» v = text(1,.0,'seno')
v =
76.0001
» delete(v)
Los dos grupos de funciones anteriores no actúan de la misma forma. Así, la
función plot dibuja una nueva figura en la ventana activa (en todo momento MATLAB
tiene una ventana activa de entre todos las ventanas gráficas abiertas), o abre
una nueva figura si no hay ninguna abierta, sustituyendo cualquier cosa que
hubiera dibujada anteriormente en esa ventana. Para verlo, se comenzará creando un
par de vectores x e y con los que trabajar:
» x=[-10:0.2:10]; y=sin(x);
Ahora se deben ejecutar los comandos siguientes (se comienza cerrando la ventana
activa,
para que al crear la nueva ventana aparezca en primer plano):
» close % se cierra la ventana gráfica activa anterior
» grid % se crea una ventana con una cuadrícula
» plot(x,y) % se dibuja la función seno borrando la cuadrícula
Se puede observar la diferencia con la secuencia que sigue:
» close
» plot(x,y) % se crea una ventana y se dibuja la función seno
» grid % se añade la cuadrícula sin borrar la función seno
En el primer caso MATLAB ha creado la cuadrícula en una ventana nueva y luego la
ha borrado al ejecutar la función plot. En el segundo caso, primero ha dibujado la
función y luego ha añadido la cuadrícula. Esto es así porque hay funciones como
plot que por defecto crean una nueva figura, y otras funciones como grid que se
aplican a la ventana activa modificándola, y sólo crean una ventana nueva cuando
no existe ninguna ya creada. Más adelante se verá que con la función hold pueden
añadirse gráficos a una figura ya existente respetando su contenido.
a.FUNCIÓN PLOT
Esta es la función clave de todos los gráficos 2-D
en MATLAB. Ya se ha dicho que el elemento básico de
los gráficos bidimensionales es el vector. Se
utilizan también cadenas de 1, 2 ó 3 caracteres para
indicar colores y tipos de línea. La función plot(),
en sus diversas variantes, no hace otra cosa que
dibujar vectores. Un ejemplo muy sencillo de esta
función, en el que se le pasa un único vector como
argumento, es el siguiente:
» x=[1 3 2 4 5 3]
x =
31
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
1 3 2 4 5 3
» plot(x)
El resultado de este comando es que se abre una ventana mostrando el gráfico de la
Figura. Por defecto, los distintos puntos del gráfico se unen con una línea
continua. También por defecto, el color que se utiliza para la primera línea es el
azul. Cuando a la función plot() se le pasa un único vector –real– como argumento,
dicha función dibuja en ordenadas el valor de los n elementos del vector frente a
los índices 1, 2, ... n del mismo en abscisas. Más adelante se verá que si el
vector es complejo, el funcionamiento es bastante diferente.
En la pantalla de su ordenador se habrá visto que MATLAB utiliza por defecto color
blanco para el fondo de la pantalla y otros colores más oscuros para los ejes y
las gráficas.
Una segunda forma de utilizar la función plot() es con dos vectores como
argumentos. En este caso los elementos del segundo vector se representan en
ordenadas frente a los valores del primero, que se representan en abscisas. Véase
por ejemplo cómo se puede dibujar un cuadrilátero de esta forma (obsérvese que
para dibujar un polígono cerrado el último punto debe coincidir con el primero):
» x=[1 6 5 2 1]; y=[1 0 4 3 1];
» plot(x,y)
La función plot() permite también dibujar múltiples curvas introduciendo varias
parejas de vectores como argumentos. En este caso, cada uno de los segundos
vectores se dibujan en ordenadas como función de los valores del primer vector de
la pareja, que se representan en abscisas. Si el usuario no decide otra cosa, para
las sucesivas líneas se utilizan colores que son permutaciones cíclicas del azul,
verde, rojo, cyan, magenta, amarillo y negro. Obsérvese bien cómo se dibujan el
seno y el coseno en el siguiente ejemplo:
» x=0:pi/25:6*pi;
» y=sin(x); z=cos(x);
» plot(x,y,x,z)
Ahora se va a ver lo que pasa con los vectores complejos. Si se pasan a plot()
varios vectores complejos como argumentos, MATLAB simplemente representa las
partes reales y desprecia las partes imaginarias. Sin embargo, un único argumento
complejo hace que se represente la parte real en abscisas, frente a la parte
imaginaria en ordenadas. Véase el siguiente ejemplo. Para generar un vector
complejo se utilizará el resultado del cálculo de valores propios de una matriz
formada aleatoriamente:
» plot(eig(rand(20,20)),'+')
Donde se ha hecho uso de elementos que se verán en la siguiente sección, respecto
a dibujar con distintos tipos de “markers” (en este caso con signos +), en vez de
con línea continua, que es la opción por defecto. En el comando anterior, el
segundo argumento es un carácter que indica el tipo de marker elegido. El comando
anterior es equivalente a:
» z=eig(rand(20,20));
» plot(real(z),imag(z),'+')
32
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
Como ya
ignoran
hay que
como se
también
se ha dicho, si se incluye más de un vector complejo como argumento, se
las partes imaginarias. Si se quiere dibujar varios vectores complejos,
separar explícitamente las partes reales e imaginarias de cada vector,
acaba de hacer en el último ejemplo. El comando plot puede utilizarse
con matrices como argumentos.
Véanse algunos ejemplos sencillos:
dibuja una línea por cada columna de A en ordenadas, frente al
índice de los elementos en abscisas
dibuja las columnas (o filas) de A en ordenadas frente al vector x
en abscisas. Las dimensiones de A y x deben ser coherentes: si la
plot(x,A)
matriz A es cuadrada se dibujan las columnas, pero si no lo es y la
dimensión de las filas coincide con la de x, se dibujan las filas
análogo al anterior, pero dibujando las columnas (o filas) de A en
plot(A,x)
abscisas, frente al valor de x en ordenadas
dibuja las columnas de B en ordenadas frente a las columnas de A en
plot(A,B)
abscisas, dos a dos. Las dimensiones deben coincidir
análogo al anterior para cada par de matrices. Las dimensiones de
plot(A,B,C,D) cada par deben coincidir, aunque pueden ser diferentes de las
dimensiones de los demás pares
plot(A)
Se puede obtener una excelente y breve descripción de la función plot() con el
comando help plot o helpwin plot. La descripción que se acaba de presentar se
completará en la siguiente sección, en donde se verá cómo elegir los colores y los
tipos de línea.
b.ESTILOS DE LÍNEA Y MARCADORES EN LA FUNCIÓN PLOT
En la sección anterior se ha visto cómo la tarea fundamental de la función plot()
era dibujar los valores de un vector en ordenadas, frente a los valores de otro
vector en abscisas. En el caso general esto exige que se pasen como argumentos un
par de vectores. En realidad, el conjunto básico de argumentos de esta función es
una tripleta formada por dos vectores y una cadena de 1, 2 ó 3 caracteres que
indica el color y el tipo de línea o de marker. En la tabla siguiente se pueden
observar las distintas posibilidades.
Cuando hay que dibujar varias líneas, por defecto se van cogiendo sucesivamente
los colores de la tabla comenzando por el azul, hacia arriba, y cuando se terminan
se vuelve a empezar otra vez por el azul. Si el fondo es blanco, este color no se
utiliza para las líneas.
33
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
c.AÑADIR LÍNEAS A UN GRÁFICO YA EXISTENTE
Existe la posibilidad de añadir líneas a un gráfico ya existente, sin destruirlo o
sin abrir una nueva ventana. Se utilizan para ello los comandos hold on y hold
off. El primero de ellos hace que los gráficos sucesivos respeten los que ya se
han dibujado en la figura (es posible que haya que modificar la escala de los
ejes); el comando hold off deshace el efecto de hold on. El siguiente ejemplo
muestra cómo se añaden las gráficas de x2 y x3 a la gráfica de x previamente
creada (cada una con un tipo de línea diferente):
»
»
»
»
»
plot(x)
hold on
plot(x2,'--')
plot(x3,'-.')
hold off
d.COMANDO SUBPLOT
Una ventana gráfica se puede dividir en m particiones horizontales y n verticales,
con objeto de representar múltiples gráficos en ella. Cada una de estas
subventanas tiene sus propios ejes, aunque otras propiedades son comunes a toda la
figura. La forma general de este comando es:
subplot(m,n,i)
donde m y n son el número de subdivisiones en filas y columnas, e i es la
subdivisión
que
se
convierte
en
activa.
Las
subdivisiones
se
numeran
consecutivamente empezando por las de la primera fila, siguiendo por las de la
segunda, etc. Por ejemplo, la siguiente secuencia de comandos genera cuatro
gráficos en la misma ventana:
»
»
»
»
»
y=sin(x); z=cos(x); w=exp(-x*.1).*y; v=y.*z;
subplot(2,2,1), plot(x,y)
subplot(2,2,2), plot(x,z)
subplot(2,2,3), plot(x,w)
subplot(2,2,4), plot(x,v)
Se puede practicar con este ejemplo añadiendo títulos a cada subplot, así como
rótulos para los ejes. Se puede intentar también cambiar los tipos de línea. Para
volver a la opción por defecto basta teclear el comando:
» subplot(1,1,1)
e.CONTROL DE LOS EJES
También en este punto MATLAB tiene sus opciones por defecto, que en algunas
ocasiones puede interesar cambiar. El comando básico es el comando axis. Por
defecto, MATLAB ajusta la escala de cada uno de los ejes de modo que varíe entre
el mínimo y el máximo valor de los vectores a representar. Este es el llamado modo
"auto", o modo automático. Para definir de modo explícito los valores máximo y
mínimo según cada eje, se utiliza el comando:
axis([xmin, xmax, ymin, ymax])
mientras que :
axis('auto')
devuelve el escalado de los ejes al valor por defecto o automático. Otros posibles
usos de este comando son los siguientes:
34
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
Comando
Descripción
devuelve un vector v con los valores [xmin, xmax,
v=axis
ymin, ymax]
mantiene los ejes en sus actuales valores, de cara a
axis(axis)
posibles nuevas gráficas añadidas con hold on
utiliza ejes de pantalla, con el origen en la
axis('ij')
esquina superior izda. y el eje j en dirección
vertical descendente
utiliza ejes cartesianos normales, con el origen en
axis('xy')
la esquina inferior izda. y el eje y vertical
ascendente
axis('equal') el escalado es igual en ambos ejes
axis('square') la ventana será cuadrada
la ventana tendrá las proporciones de la imagen que
se desea representar en ella (por ejemplo la de una
axis('image')
imagen bitmap que se desee importar) y el escalado
de los ejes será coherente con dicha imagen
elimina las restricciones introducidas por 'equal' y
axis('normal')
'square'
axis('off')
elimina las etiquetas, los números y los ejes
axis('on')
restituye las etiquetas, los números y los ejes
i
j
y
x
f.FUNCIÓN LINE()
La función line() permite dibujar una o más líneas que unen los puntos cuyas
coordenadas se pasan como argumentos. Permite además especificar el color, grosor,
tipo de trazo, marcador, etc. Es una función de más bajo nivel que la función
plot(), pero ofrece una mayor flexibilidad. En su versión más básica, para dibujar
un segmento de color verde entre dos puntos, esta función se llamaría de la
siguiente manera:
line([xini, xend]', [yini, yend]', 'color', 'g')
Se puede también dibujar dos líneas a la vez utilizando la forma:
line([xini1 xini2; xend1 xend2], ([yini1 yini2; yend1 yend2]);
Finalmente, si cada columna de la matriz X contiene la coordenada x inicial y
final de un punto, y lo mismo las columnas de la matriz Y con las coordenadas y,
la siguiente sentencia dibuja tantas líneas como columnas tengan las matrices X e
Y:
line([X], [Y]);
Se pueden controlar las características
parámetro/valor, como por ejemplo:
de
la
línea
por
medio
de
pares
line(x,y,'Color','r','LineWidth',4,'MarkerSize',12,'LineStyle','—','Marker','*')
g.CONTROL DE VENTANAS GRÁFICAS: FUNCIÓN FIGURE
Si se llama a la función figure sin argumentos, se crea una nueva ventana gráfica
con el número consecutivo que le corresponda. El valor de retorno es dicho número.
Por otra parte, el comando figure(n) hace que la ventana n pase a ser la ventana o
figura activa. Si dicha ventana no existe, se crea una nueva ventana con el número
consecutivo que le corresponda (que se puede obtener como valor de retorno del
35
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
comando). La función close cierra la figura activa, mientras que close(n) cierra
la ventana o figura número n.
El comando clf elimina el contenido de la figura activa, es decir, la deja abierta
pero vacía. La función gcf devuelve el número de la figura activa en ese momento.
El comando figure(gcf) (get current figure) permite hacer visible la ventana de
gráficos desde la ventana de comandos.
»
»
»
»
»
»
»
»
»
»
»
»
x=[-4*pi:pi/20:4*pi];
plot(x,sin(x),'r',x,cos(x),'g')
title('Función seno(x) -en rojo- y función coseno(x) -en verde-')
xlabel('ángulo en radianes'), figure(gcf)
ylabel('valor de la función trigonométrica'), figure(gcf)
axis([-12,12,-1.5,1.5]), figure(gcf)
axis('equal'), figure(gcf)
axis('normal'), figure(gcf)
axis('square'), figure(gcf)
axis('off'), figure(gcf)
axis('on'), figure(gcf)
axis('on'), grid, figure(gcf)
22. Otras funciones gráficas 2-D
Existen otras funciones gráficas bidimensionales orientadas a generar otro tipo de
gráficos distintos de los que produce la función plot() y sus análogas. Algunas de
estas funciones son las siguientes (para más información sobre cada una de ellas
en particular, utilizar help nombre_función):
COMANDO
bar()
barh()
bar3()
bar3h()
pie()
pie3()
area()
stairs()
errorbar()
compass()
feather()
hist()
rose()
quiver()
RESULTADO
crea diagramas de barras
diagramas de barras horizontales
diagramas de barras con aspecto 3-D
diagramas de barras horizontales con aspecto 3-D
gráficos con forma de “tarta”
gráficos con forma de “tarta” y aspecto 3-D
similar plot(), pero rellenando en ordenadas de 0 a y
función análoga a bar() sin líneas internas
representa sobre una gráfica –mediante barras– valores de errores
dibuja los elementos de un vector complejo como un conjunto de vectores
partiendo de un origen común
dibuja los elementos de un vector complejo como un conjunto de vectores
partiendo de orígenes uniformemente espaciados sobre el eje de abscisas
dibuja histogramas de un vector
histograma de ángulos (en radianes)
dibujo de campos vectoriales como conjunto de vectores
A modo de ejemplo, genérese un vector de valores aleatorios entre 0 y 10, y
ejecútense los
siguientes comandos:
»
»
»
»
»
x=[rand(1,100)*10];
plot(x)
bar(x)
stairs(x)
hist(x)
36
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
» hist(x,20)
» alfa=(rand(1,20)-0.5)*2*pi;
» rose(alfa)
23. FUNCIÓN FPLOT
La función plot vista anteriormente dibuja vectores. Si se quiere dibujar una
función, antes de ser pasada a plot debe ser convertida en un vector de valores.
Esto tiene algunos inconvenientes, por ejemplo, el que "a priori" es difícil
predecir en que zonas la función varía más rápidamente y habría por ello que
reducir el espaciado entre los valores en el eje de abscisas. La función fplot
admite como argumento un nombre de función o un nombre de fichero *.m en el cual
esté definida una función de usuario. La función puede ser escalar (un único
resultado por cada valor de x) o vectorial. La forma general de esta función es la
siguiente:
fplot('funcion', limites, 'cadena', tol)
donde 'funcion' representa el nombre de la función o del fichero *.m entre
apóstrofos (pasado como cadena de caracteres), limites es un vector de 2 ó 4
elementos que puede tomar los valores [xmin,xmax] o [xmin,xmax,ymin,ymax],
'cadena' tiene el mismo significado que en plot y permite controlar el color, los
markers y el tipo de línea. tol es la tolerancia de error relativo. El valor por
defecto es 2e-03. El máximo número de valores en x es (1/tol)+1
Esta función puede utilizarse también en la forma:
[x,y]=fplot('funcion', limites, 'cadena', tol)
y en este caso se devuelven los vectores x e y, pero no se dibuja nada. El gráfico
puede obtenerse con un comando posterior por medio de la función plot. Véase un
ejemplo de utilización de esta función. Se comienza creando un fichero llamado
mifunc.m en el directorio G:\matlab que contenga las líneas siguientes:
function y = mifunc(x)
y(:,1)=200*sin(x)./x;
y(:,2)=x.^2;
y a continuación se ejecuta el comando:
» fplot('mifunc(x)', [-20 20], 'g')
Obsérvese que la función mifunc devuelve una matriz con dos columnas, que
constituyen las dos gráficas dibujadas. En este caso se ha utilizado para ellas el
color verde.
24. FUNCIÓN FILL PARA POLÍGONOS
Ésta es una función especial para dibujar polígonos planos, rellenándolos de un
determinado color. La forma general es la siguiente:
» fill(x,y,c)
que dibuja un polígono definido por los vectores x e y, rellenándolo con el color
especificado por c. Si es necesario, el polígono se cierra uniendo el último
vértice con el primero. Respecto al color:
37
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB

Si c es un carácter de color ('r','g','b','c','m','y','w','k'), o un vector
de valores [r g b], el polígono se rellena de modo uniforme con el color
especificado.

Si c es un vector de la misma dimensión que x e y, sus elementos
trasforman de acuerdo con un mapa de colores determinado, y el llenado
polígono –no uniforme en este caso– se obtiene interpolando entre
colores de los vértices. Sobre este tema de los colores, se volverá
adelante con un cierto detenimiento.
se
del
los
más
Este comando puede utilizarse también con matrices:
» fill(A,B,C)
Donde A y B son matrices del mismo tamaño. En este caso se dibuja un polígono por
cada par de columnas de dichas matrices. C puede ser un vector fila de colores
uniformes para cada polígono, o una matriz del mismo tamaño que las anteriores
para obtener colores de relleno por interpolación. Si una de las dos, o A o B, son
un vector en vez de una matriz, se supone que ese vector se repite tantas veces
como sea necesario para dibujar tantos polígonos como columnas tiene la matriz.
Considérese un ejemplo sencillo de esta función:
» x=[1 5 4 2]; y=[1 0 4 3];
» fill(x,y,'r')
» colormap(gray), fill(x,y,[1 0.5 0.8 0.7])
25. ENTRADA DE PUNTOS CON EL RATÓN
Se realiza mediante la función ginput, que permite introducir las coordenadas del
punto sobre el que está el cursor, al clicar (o al pulsar una tecla). Algunas
formas de utilizar esta función son las siguientes:
[x,y] = ginput lee un número indefinido de puntos –cada vez que se clica o se
pulsa una tecla cualquiera– hasta que se termina pulsando la tecla
intro
[x,y]
= lee las coordenadas de n puntos
ginput(n)
[x,y,bot]
= igual que el anterior, pero devuelve también un vector de enteros
ginput
bot con el código ASCII de la tecla pulsada o el número del botón
del ratón (1, 2, ...) con el que se ha clicado
Como ejemplo de utilización de este comando, ejecútense las instrucciones
siguientes en la ventana de comandos de MATLAB para introducir un cuadrilátero
arbitrario y dibujarlo de dos formas:
» clf, [x,y]=ginput(4);
» figure(gcf), plot(x,y,'w'), pause(5), fill(x,y,'r')
Donde se ha introducido el comando pause(5) que espera 5 segundos antes de pasar a
ejecutar el siguiente comando. Este comando admite como argumento un tiempo con
precisión de centésimas de segundo.
26. GRAFICOS 2D Y 3D
Ya hemos venido realizando gráficos en 2D como lo son las respuestas de los
ejercicios anteriores, ahora vamos a dibujar gráficos en 3D.
38
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
Supongamos
que
superficie:
Esto lo hacemos
instrucciones:
queremos
con
la
dibujar
la
secuencia
de
»x=-5:.4:5;
»y=x;
»[X,Y]=meshgrid(x,y);
»Z=X.^2.*exp(-Y.^2);
» surf(X,Y,Z)
Las primeras dos instrucciones dividen
los ejes de “x” y “y” en subintervalos
de largo 0.4; la tercera instrucción
genera una rejilla en el conjunto [5,5]x[-5,5] con cuadraditos de lados
0.4.
La cuarta instrucción evalúa la función en los puntos de la rejilla, y finalmente
trazamos la superficie con surf.
Para crear un fichero llamado sombrero
procedemos de la siguiente forma:
>> w=sin(r)./r;
>> mesh(w)
>> u=-8:0.5:8;
>> v=u;
>> [u,v]=meshgrid(u,v);
>> r=sqrt(u.^2+v.^2)+eps;
>> w=sin(r)./r;
>> mesh(w)
si ingresamos el comando surf(w), nos
muestra la misma grafica pero en vez de
líneas aparece ahora una superficie
faceteada
39
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
27. Graficas de curvas dadas en coordenadas polares y
parametricas.
En muchos casos se hace necesario realizar graficas en forma Parametrica para lo
cual lo único que debemos
hacer es parametrizar la curva correspondiente como ilustra el ejemplo siguiente.
Dada la curva definida en forma Parametrica por:
t=0:0.1:10;
x=2*cos(t)-cos(2*t);
y=2*sin(t)-sin(2*t);
plot(x,y,'r')
Obtenemos las siguiente salida:
Para realizar graficas en coordenadas polares Matlab cuenta con los siguientes
comandos:
polar(a,r) : Representa la curva en coordenadas polares
polar(a,r,S): Representa la curva en coordenadas polares con el estilo de líneas
especificado por S.
veamos algunos Ejemplos:
a=0:0.01:2*pi;
r=sin(2*a).*cos(2*a);
polar(a,r)
a=0:0.01:2*pi;
r=4*(1+cos(a));
polar(a,r)
28. Comandos básicos de programación
a. COMO HACER UN PROGRAMA EN MATLAB (GENERALIDADES)
Es posible realizar un programa en Matlab tal como se hace en otros lenguajes como
el basic, pascal o el lenguaje C. Es necesario utilizar un editor para escribir el
código. Para cargar un editor, se puede hacer desde la ventana options, escogiendo
editor preferente, y cargando el editor que se desee utilizar. Para escribir
código, requerimos crear un archivo *.M. Para esto necesitamos abrir new M.file en
la ventana file. Ahora escribimos el código y salvamos el archivo utilizando la
terminación archivo.M. Se puede correr el programa desde Matlab simplemente
escribiendo el nombre del archivo que fue creado. Es posible abrir programas con
la terminación *.M desde Matlab, en el menú file, open M.file.
40
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
b. PROGRAMACIÓN DE MATLAB
Como ya se ha dicho varias veces –incluso con algún ejemplo– MATLAB es una
aplicación que se puede programar muy fácilmente. De todas formas, como lenguaje
de programación pronto verá que no tiene tantas posibilidades como otros lenguajes
(ni tan complicadas...). Se comenzará viendo las bifurcaciones y bucles, y la
lectura y escritura interactiva de variables, que son los elementos básicos de
cualquier programa de una cierta complejidad.
c. BIFURCACIONES Y BUCLES
Se van a introducir aquí los primeros conceptos de programación. MATLAB posee
un lenguaje de programación que –como cualquier otro lenguaje– dispone de
sentencias para realizar bifurcaciones y bucles. Las bifurcaciones permiten
realizar una u otra operación según se cumpla o no una determinada condición.
La Figura 12 muestra tres posibles formas de bifurcación.
Los bucles permiten repetir las mismas o análogas operaciones sobre datos
distintos. Mientras que en C/C++/Java el "cuerpo" de estas sentencias se
determinaba mediante llaves {...}, en MATLAB se utiliza la palabra end con
análoga finalidad. Existen también algunas otras diferencias de sintaxis.
La Figura 13 muestra dos posibles formas de bucle, con el control situado al
principio o al final del mismo. Si el control está situado al comienzo del
bucle es posible que las sentencias no se ejecuten ninguna vez, por no haberse
cumplido la condición cuando se llega al bucle. Sin embargo, si la condición
está al final del bucle las sentencias se ejecutarán por lo menos una vez,
aunque la condición no se cumpla. Muchos lenguajes de programación disponen de
bucles con control al principio (for y while en C/C++/Java) y al final (do …
41
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
while en C/C++/Java). En MATLAB no hay bucles con control al final del bucle,
es decir, no existe la construcción análoga a do ... while.
Las bifurcaciones y bucles no sólo son útiles en la preparación de programas o
de ficheros *.m. También se aplican con frecuencia en el uso interactivo de
MATLAB, como se verá más adelante en algunos ejemplos.
Para la estructura de programación en MATLAB se requiere conocer por lo menos
los siguientes comandos:
d. Comando END
Determina hasta cual orden llega el efecto
ejemplos de su uso ver if, while y for)
e. Comando IF
de
if,
for,
y
while.
(Para
Verifica si se cumple cierta condición, y de acuerdo a si se cumple o no
realiza la acción que se desee.
La sintaxis de la orden es:
if (condición), (ordenes 1) [else, (ordenes 2)] end;
Donde las ordenes entre [
] son opcionales.
(ordenes 1) son las ordenes que se realizarán si (condición) se cumple.
(ordenes 2) son las ordenes que se realizarán si (condición) NO se cumple.
(condición) Puede ser:
a == b
(verifica si a es igual a b)
a < b
(verifica si a es menor que b)
a > b
(verifica si a es mayor que b)
a <= b
(verifica si a es menor o igual que b)
a >= b
(verifica si a es menor o igual que b)
a ~= b (verifica que a y b sean diferentes)
El siguiente ejemplo ilustra el uso de if:
%Ejemplo de uso de if.
n=0;
if n==0,
n
% al escribir una expresión sin punto y coma final, MATLAB escribe
% su resultado en pantalla.
else,
n = 1
end;
42
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
n = 2;
if n == 0,
n
else,
n =1
end;
La salida que se obtiene con el programa anterior es la siguiente:
n =
0
n =
1
Donde el 0 (cero) proviene de entrar al primer if, y el 1 (uno), de entrar al
else del segundo if.
f. Comando WHILE
Realiza una parte del programa mientras se cumpla alguna condición.
La sintaxis de la orden es:
while (condición), (ordenes) end;
(ordenes) son las ordenes que se realizarán mientras (condición) se cumpla.
(condición) Puede ser:
a == b
(verifica si a es igual a b)
a < b
(verifica que si a es menor que b)
a > b
(verifica que si a
es mayor que b)
a <= b (verifica si a es menor o igual que b)
a >= b
(verifica que si a es mayor o igual que b)
a ~= b (verifica que a y b sean diferentes)
El siguiente ejemplo ilustra el uso de while:
%Ejemplo de uso de while.
n=0;
while n<=5,
n
%Al escribir el nombre de la variable (sin punto y coma) MATLAB
% imprime su valor.
n = n + 1;
de n.
43
%El punto y coma evita que MATLAB imprima el nuevo valor
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
end;
La salida que se obtiene al correr el programa anterior es:
n =
0
n =
1
n =
2
n =
3
n =
4
n =
5
g. Comando FOR
Muy parecido al While, pero utiliza un contador, es útil si se quiere repetir
una parte del programa un número. determinado de veces.
La sintaxis de la orden es:
for (contador), (ordenes) end;
(ordenes) son las ordenes que se realizarán (contador) llega a su valor
final.
(contador) Es de la forma:
variable = a [ , b ] : c
Donde:
variable es el contador en sí.
a es el valor inicial del contador (variable).
b es el segundo valor del contador (opcional, si se omite, b=a+1), su función
es determinar el incremento del contador.
c es el valor final del contador (variable).
El siguiente ejemplo ilustra el uso de for:
% Ejemplo de uso de for.
for i=0,0.5:2.5,
i
%al escribir el nombre de una variable (sin punto y coma)
%MATLAB muestra su valor.
end;
La salida del programa anterior es la siguiente:
i =
44
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
0
i =
0.5
i =
1
i =
1.5
i =
2
i =
2.5
h. Comando PLOT
Sirve para obtener resultados gráficos en 2D.
La sintaxis de la orden es:
plot(x, y);
x es el vector que contiene los valores de x. y es el vector que contiene los
valores de y, tal que el valor de y en la posición uno del vector corresponde
al primer valor del vector x. La gráfica se realiza uniendo una serie de
rectas entre los puntos incluidos en los vectores X y Y. Si las curvas quedan
muy mal hechas (se notan las rectas) puede ser necesario disminuir el paso de
los vectores (y aumentar el número de puntos.
Para claridad, puede ser necesario leer la parte correspondiente a vectores a
la orden FOR.
El siguiente ejemplo ilustra el uso de plot:
% Ejemplo de uso de plot.
for i =1:101,
x(i) = (i-1) /100;
y(i)=x(i) ˆ3 - 1;
% Organiza en vectores la función y=x^3 - 1
end;
plot(x, y);
pause;
%pausa el computador hasta que se presione una teclaesta orden es
necesaria cuando se hace más de una gráfica, para poder ver cada una por
separado. Ya que MATLAB las dibuja en la misma ventana siempre. (a menos que
se use el comando FIGURE).
Al correr el programa se obtiene la gráfica de la curva
y=x3 -1 (para 0<=x<=1). La gráfica aparecerá en una
ventana aparte llamada Figure 1, y la recta se verá
asi:
Otro ejemplo, para la gráfica de
y = sin(t) en el
intervalo
t = 0 a
t = 10; donde debemos hacer lo
siguiente:
45
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
>> t = 0:.3:10;
>> y = sin(t);
>> plot( t , y)
Aquí el resultado gráfico:
El comando t = 0: .3 :10; define el vector entre los
componentes desde 0 a 10 incrementados de 0.3. La
expresión y = sin(t); va a definir los valores de los
componentes que son: sin(0), sin(0.3), sin(0.6), etc.
Finalmente, plot(t,y) usa el vector de t y los valores
de y para la construcción del gráfico.
i. Funciones de dos variables
Vamos a elaborar la gráfica de la función
z(x,y) = x exp( - x^2 - y^2):
>> [x,y] = meshdom(-2:.2:2, -2:.2:2);
>>
z = x .* exp(-x.^2 - y.^2);
>>
mesh(z)
El primer comando crea una matriz para hacer la
entrada de los puntos en el espacio cuadrado de -2
<= x <= 2, -2 <= y <= 2.
Los cuadrados pequeños
que constituyen la reja son de 0.2 unidades ancho
y 0.2 unidades de alto. La segunda orden crea una
matriz cuyas entradas son los valores de la
función
z(x,y) a los puntos de la reja. La
tercera orden usa esta información para construir
el gráfico.
j. Comando DISP
Sirve para escribir texto de salida o vectores. de resultados.
La sintaxis de la orden es:
disp(X);
X Puede ser:
Un vector.
Una matriz.
Una cadena de texto.
El siguiente ejemplo ilustra el uso de disp:
%Ejemplo de uso de disp.
a = [1, 2, 3, 4, 9 11]; % Un vector
disp(a);
a = [1, 2 , 7 ; 6, 3, 4]; % Una matriz
disp(a);
46
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
a = ˆTexto se puede escribir así ˆ; % Cadena de texto
disp(a);
disp( ˆ También se puede escribir así.’ );
La salida del programa anterior será:
1
2
3
1
2
7
6
3
4
4
9
11
Texto se puede escribir así
También se puede escribir así.
k. Comando INPUT
Se utiliza
ejecuta.
para
que
el
programa
pida
valores
de
variables
mientras
se
La sintaxis de la orden es:
variable = input ( texto );
variable es un nombre válido de variable, en la que se quiere almacenar el
valor que se pregunta.texto puede ser una variable o, Una cadena.
El siguiente ejemplo ilustra el uso de input:
%Ejemplo de uso de input.
a = 0;
% hace válido el nombre de variable a.
a = input( ˆ Teclee el valor de a: ˆ);
tex = ˆ Cual es el nuevo valor de a? ˆ;
a
% Al escribir el nombre de una variable (sin punto y coma al final)
% MATLAB muestra su valor.
a = input(tex);
a
La salida de este programa será:
Teclee el valor de a: (espera)
a =
47
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
xxx
% aquí se imprime el valor asignado para a.
Cual es el nuevo valor de a? (espera)
a =
yyy
Donde xxx y yyy son valores introducidos por el usuario en el momento de
correr el programa.
29. FICHEROS *.M
Los ficheros con extensión (.m) son ficheros de texto sin formato (ficheros
ASCII) que constituyen el centro de la programación en MATLAB. Ya se han
utilizado en varias ocasiones. Estos ficheros se crean y modifican con un
editor de textos cualquiera. En el caso de MATLAB 5.3 ejecutado en un PC bajo
Windows, lo más sencillo es utilizar su propio editor de textos.
Existen dos tipos de ficheros *.m, los ficheros de comandos (llamados scripts
en inglés) y las funciones. Los primeros contienen simplemente un conjunto de
comandos que se ejecutan sucesivamente cuando se teclea el nombre del fichero
en la línea de comandos de MATLAB. Un fichero de comandos puede llamar a
otros ficheros de comandos. Si un fichero de comandos se llama desde de la
línea de comandos de MATLAB, las variables que crea pertenecen al espacio de
trabajo base de MATLAB (recordar Apartado 1.4.4), y permanecen en él cuando
se termina la ejecución de dicho fichero.
Las funciones
MATLAB, con su
permiten
definir
funciones
enteramente
análogas
a
las
de
nombre, sus argumentos y sus valores de retorno. Los ficheros *.m que definen
funciones permiten extender las posibilidades de MATLAB; de hecho existen
bibliotecas de ficheros *.m que se venden (toolkits) o se distribuyen
gratuitamente (a través de Internet). Las funciones definidas en ficheros *.m
se caracterizan porque la primera línea (que no sea un comentario) comienza
por la palabra function, seguida por los valores de retorno (entre corchetes
[ ] y separados por comas, si hay más de uno), el signo igual (=) y el nombre
de la función, seguido de los argumentos (entre paréntesis y separados por
comas). Recuérdese que un fichero *.m puede llamar a otros ficheros *.m, e
incluso puede llamarse a sí mismo de forma recursiva. Los ficheros de
comandos se pueden llamar también desde funciones, en cuyo caso las variables
que se crean pertenecen a espacio de trabajo de la función. El espacio de
trabajo de una función es independiente del espacio de trabajo base y del
espacio de trabajo de las demás funciones. Esto implica por ejemplo que no
puede haber colisiones entre nombres de variables: aunque varias funciones
tengan una variable llamada A, en realidad se trata de variables
completamente distintas (a no ser que A haya sido declarada como variable
global).
A continuación se verá con un poco más de detalle ambos tipos de ficheros
*.m.
30. FICHEROS DE COMANDOS (SCRIPTS)
Como ya se ha dicho, los ficheros de comandos o scripts son ficheros con un
nombre tal como file1.m que contienen una sucesión de comandos análoga a la
48
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
que se teclearía en el uso interactivo del programa. Dichos comandos se
ejecutan sucesivamente cuando se teclea el nombre del fichero que los
contiene (sin la extensión), es decir cuando se teclea file1 con el ejemplo
considerado.
Cuando se ejecuta desde la línea de comandos, las variables creadas por file1
pertenecen al espacio de trabajo base de MATLAB. Por el contrario, si se
ejecuta desde una función, las variables que crea pertenecen al espacio de
trabajo de la función. En los ficheros de comandos conviene poner los puntos
y coma (;) al final de cada sentencia,
para evitar una salida de resultados demasiado cuantiosa. Un fichero *.m
puede llamar a otros ficheros *.m, e incluso se puede llamar a sí mismo de
modo recursivo.
31.
RECOMENDACIONES GENERALES DE PROGRAMACIÓN
Las funciones vectoriales de MATLAB son mucho más rápidas que sus
contrapartidas escalares. En la medida de lo posible es muy interesante
vectorizar los algoritmos de cálculo, es decir, realizarlos con vectores y
matrices, y no con variables escalares dentro de bucles. Aunque los vectores
y matrices pueden ir creciendo a medida que se necesita, es mucho más rápido
reservarles toda la memoria necesaria al comienzo del programa. Se puede
utilizar para ello la función zeros. Además de este modo la memoria reservada
es contigua.
Es importante utilizar el profile para conocer en qué sentencias de cada
función se gasta la mayor parte del tiempo de cálculo. De esta forma se
descubren “cuellos de botella” y se pueden desarrollar aplicaciones mucho más
eficientes.
Conviene desarrollar los programas incrementalmente, comprobando cada función
o componente que se añade. De esta forma siempre se construye sobre algo que
ya ha sido comprobado y que funciona: si aparece algún error, lo más probable
es que se deba a lo último que se ha añadido, y de esta manera la búsqueda
de errores está acotada y es mucho más sencilla.
Recuérdese que de ordinario el tiempo de corrección de errores en un programa
puede ser 4 ó 5 veces superior al tiempo de programación. El debugger es una
herramienta muy útil a la hora de acortar ese tiempo de puesta a punto. En
este mismo sentido, puede decirse que pensar bien las cosas al programar
(sobre una hoja de papel en blanco, mejor que sobre la pantalla del PC)
siempre es rentable, porque se disminuye más que proporcionalmente el tiempo
de depuración y eliminación de errores.
Otro objetivo de la programación debe ser mantener el código lo más sencillo
y ordenado posible. Al pensar en cómo hacer un programa o en cómo realizar
determinada tarea es conveniente pensar siempre primero en la solución más
sencilla, y luego plantearse otras cuestiones como la eficiencia.
Finalmente, el código debe ser escrito de una manera clara y ordenada,
introduciendo comentarios, utilizando líneas en blanco para separar las
distintas partes del programa, sangrando las líneas para ver claramente el
rango de las bifurcaciones y bucles, utilizando nombres de variables que
recuerden al significado de la magnitud física correspondientes, etc. En
cualquier caso, la mejor forma (y la única) de aprender a programar es
programando.
49
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
Capitulo II: ANÁLISIS Y CONTROL DE SISTEMAS USANDO MATLAB
1.Introducción
En lo que sigue, se va a realizar una introducción a los comandos de matlab
relacionados con la teoría de control de sistemas. Casi todas las funciones que se
describen pertenecen al Control System Toolbox. Las funciones principales se van a
explicar sobre ejemplos demostrativos, con el fin de que su uso y comprensión sean
lo mas sencillos posible. Se realizarían ejemplos tanto en el dominio temporal,
continuo y discreto, como en el frecuencial. También se mostrara la forma de dar
la descripción de un sistema lineal mediante función de transferencia, conjunto de
polos y ceros, o variables de estado. Asimismo se comentara la forma de manipular
una función de transferencia como un objeto.
2.Tratamiento mediante funciones de transferencia.
(Sistemas continuos)
Este apartado muestra el uso de algunas de las herramientas con las que cuenta
matlab para el diseño y análisis de sistemas de control. Para el ejemplo se va a
partir de una descripción de la planta en forma de función de transferencia:
En matlab las funciones de transferencia se introducen dando el par de polinomios
numerador denominador:
num = [.2 .3 1];
den1 = [1 .4 1];
den2 = [1 .5];
El polinomio del denominador es el producto de dos términos. Para obtener el
polinomio resultante se usa el producto de convolución (o de polinomios).
den = conv(den1,den2)
Para ver los polos (o los ceros) de la función de transferencia, podemos usar:
roots(den) (roots(num)). Una forma mas completa de convertir una función de
transferencia dada por dos polinomios numerador y denominador, en un conjunto de
factores de grado 1, correspondientes a los polos (z1, z2, z3) y ceros (c1, c2),
de la forma:
50
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
es mediante el comando tf2zp:
[ceros ,polos ,gan] = tf2zp (N,D);
que devuelve un vector conteniendo los ceros de la función de transferencia, un
vector conteniendo los polos, y un escalar correspondiente a la ganancia estática.
La función complementaria a ésta también existe:
[N,D] = zp2tf (ceros,polos,gan);
Como curiosidad, cabe mencionar que el nombre de estas funciones es bastante
descriptivo:
”tf-two-zp” procede de transfer-function to zero-pole form.
2.1.
Dominio Temporal
La respuesta ante un escalón a la entrada se puede analizar en sistemas que tengan
una descripción en forma de función de transferencia o una representación en el
espacio de estados,
generando un vector de tiempos y usando la función step:
t = [0:.3:15]’;
y = step(num,den,t);
plot (t,y);
title (’Respuesta a un escalón unitario’);
xlabel (’tiempo(seg)’);
grid;
La respuesta al escalón unitario puede verse en la Fig. 1.1. Seleccionando con el
ratón en la curva, pueden modificarse algunos atributos de la misma. También
pueden modificarse las propiedades de los ejes de forma análoga. Las figuras
guardarse en ficheros .Fig. propios de matlab, o exportarse en diferentes formatos
gráficos estándar.
No es necesario recuperar el resultado de la simulación ante
escalón que realiza step para después representarlo con
plot, sino que el propio comando step, si lo utilizamos sin
parámetros de salida, realiza la representación. Es mías, en
este segundo caso, la representación grafica es algo mías
interactiva, puesto que si ”pinchamos” con el botón
izquierdo en algún punto de la grafica, nos dice los valores
correspondientes al tiempo y al valor de la salida en ese
punto.
La respuesta impulsional se puede obtener del mismo modo,
pero usando en este caso la función impulse, que tiene una
51
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
sintaxis similar al comando step. Nótese que el vector de tiempos ya ha sido
definido con anterioridad.
impulse (num,den,t);
La respuesta al impulso puede verse en la Fig. 1.2.
La respuesta del sistema a cualquier tipo de entrada
también puede obtenerse. Para ello es necesario tener la
señal de entrada en un vector u, que lógicamente deberá
tener la misma dimensión que el vector de tiempos. En
sistemas multivariables, en vez de un vector de entradas
tendremos una matriz. A estos efectos se usa la función
lsim. Un ejemplo característico es la respuesta a una
entrada en rampa:
ramp = t;
y = lsim (num,den,ramp,t);
plot (t,y,t,ramp);
title (’Respuesta a una rampa’);
xlabel (’tiempo(seg)’);
La respuesta a la rampa puede verse en la Fig. 1.3.
Otro ejemplo característico es la respuesta a un
ruido uniforme aleatorio. Recordamos que rand(m,n)
genera
una
matriz
m×n
de
números
aleatorios
uniformemente distribuidos entre 0 y 1. Es importante
darse cuenta del filtrado que se produce en la señal
cuando pasa por el sistema (hace de filtro paso
bajas).
noise = rand (size(t));
y = lsim (num,den,noise,t);
plot (t,y,t,noise);
title (’Respuesta a un ruido aleatorio’);
xlabel (’tiempo(seg)’);
La respuesta al ruido puede verse en la Fig. 1.4.
2.2.
Dominio Frecuencial
Respuesta en frecuencia
La respuesta en frecuencia de los sistemas se puede obtener usando las funciones
bode,
52
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
nyquist y nichols. Si no se le ponen argumentos a la izquierda, estas funciones
generan las
gráficas por si solas. En caso contrario, vuelcan los datos en los vectores de
salida oportunos.
A continuación se presentan ejemplos de las tres posibles sintaxis de la función
bode:
1.- bode(num,den)
2.- [mag,phase,w] = bode (num,den)
3.- [mag,phase] = bode (num,den,w)
La primera de ellas produce un grafico con la magnitud en decibelios (dB) y la
fase en grados.
En las otras dos la magnitud se devuelve en el vector mag y esta expresada en
unidades absolutas, no en dB. Por su parte, la fase, devuelta en el vector phase,
sigue siendo en grados.
En esta forma, la representación es mas interactiva, en el sentido de que
”pinchando” con el ratón en un punto de la curva, podemos ver los valores
correspondientes. La segunda forma automáticamente genera los puntos de frecuencia
en el vector w. En la tercera forma es el usuario el que escoge los rangos de
frecuencia, y resulta muy adecuado cuando se quieren representar varias graficas
conjuntamente, que habrán de compartir una misma escala frecuencial.
El resultado de los dos últimos comandos se puede representar usando funciones
conocidas:
subplot(211), loglog(w,mag), title(’Magnitud’), xlabel(’rad/s’);
subplot(212), semilogx(w,phase), title(’Fase’), xlabel(’rad/s’);
El resultado para la función de transferencia del ejemplo anterior puede verse en
la Fig. 1.5. Cabe comentar que el comando subplot(n,m,i) permite dividir una
ventana grafica en una matriz de n × m sub-graficas, seleccionando como activa la
numero i (numeradas consecutivamente de izquierda a derecha y de arriba abajo).
El
comando
sintaxis:
nyquist
tiene
la
misma
nyquist (num,den,w);
[re,im] = nyquist (num,den,w);
Computa las partes real e imaginaria de
G(jw) y realiza la representación si no se
le ponen parámetros de salida. Para
obtener la representación grafica por
nosotros mismos, sólo hay que dibujar la
parte real frente a la imaginaria. El
resultado obtenido mediante el ejemplo
anterior puede verse en la Fig. 1.6.
El comando nichols computa el diagrama de
Nichols de un sistema a partir de la
función de transferencia en bucle abierto.
Para verlo basta dibujar la magnitud del
bucle abierto en dB (en el eje de
ordenadas) frente a fase del bucle abierto en grados (en eje de abscisas), o
53
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
llamar a la función sin argumento de salida. Si se quiere en forma de ábaco, se
puede usar el comando ngrid.
nichols (num,den,w), ngrid;
[mag,phase] = nichols (num,den,w);
Márgenes de estabilidad
Como es bien sabido en la teoría clásica del control, los márgenes de estabilidad
son el margen de fase y el margen de ganancia. Estos márgenes se calculan usando
el comando margin.
margin (num,den);
[mg,mf,wmg,wmf] = margin (num,den);
Como tercer parámetro de entrada se le
puede pasar el rango de frecuencias
deseado. En el primer caso indicado, en
el que no se le especifican parámetros
de salida, se realiza la representación
del diagrama de Bode, junto con una
indicación, mediante líneas verticales
de los puntos donde se mide cada uno de
los márgenes y los valores de los
mismos. En la segunda variante, como
salidas se obtienen los valores de los
márgenes de ganancia (no en dB), el
margen de fase (en grados) y sus
correspondientes frecuencias. Si existen
varias frecuencias de corte marca los
mías desfavorables (ver Fig. 1.8).
54
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
Efectos de los retardos
Los retardos existen en numerosas aplicaciones de control automático. En sistemas
lineales continuos invariantes en el tiempo, el retardo viene representado por
e−sT . La forma mías sencilla de manipular los retardos en matlab es en el dominio
de la frecuencia. Nótese que e−jwT = 1|−wT . Por tanto los retardos dejan la
magnitud invariable y afectan al desfase, tendiendo a inestabilizar al sistema
controlado. Para propósitos de representación mediante el comando bode, todo lo
que habría que hacer es restar la fase del retardo a la de la función de
transferencia. Por ejemplo:
num = [0.2 0.3 1];
den = [1 0.9 1.2 0.5];
T = 1; % Tiempo de retardo puro
w = logspace (-2,1,100)’;
[mag,fase] = bode (num,den,w);
faseDelay = fase - (T*w*180/pi); % Sustrae la fase tras convertirla a grados
subplot(211); semilogx (w, 20*log10(mag)); grid;
subplot(212); semilogx (w, [fase, faseDelay]); grid;
2.3.
Comandos relacionados con operaciones de bloques
Existen una serie de
diagramas de bloques:
comandos
relacionados
con
las
operaciones
típicas
en
– [N12,D12] = series (N1,D1,N2,D2): Devuelve la resultante de colocar en serie dos
Funciones de transferencia (Fig. 1.9). El mismo resultado podr´ıa obtenerse
llamando dos veces al comando conv, que recuérdese permitía multiplicar dos
polinomios.
–
[N12,D12] = parallel (N1,D1,N2,D2): Devuelve la resultante de colocar en
paralelo dos funciones de transferencia (Fig. 1.10).
–
55
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
–
–
–
– [Nbc,Dbc] = feedback (N1,D1,N2,D2,-1): A partir de un sistema en bucle
abierto, dado por el numerador y denominador N1,D1, proporciona el
correspondiente en bucle cerrado, considerando que en la cadena de
realimentación hay otra función de transferencia, dada por N2, D2 (Fig.
1.11). El ultimo parámetro indica el signo de la realimentación (−1 para
realimentación negativa y 1 para positiva).
– [Nbc,Dbc] = cloop (N1,D1,-1): En el caso en que se pretenda obtener la
función de transferencia en bucle cerrado con realimentación unitaria, puede
emplearse este comando mías compacto, en el que se evita tener que
especificar una segunda función de transferencia.
Conviene tener claro que
para todos estos comandos
relacionados
con
operaciones
por
bloques,
se
podría
perfectamente
estar
trabajando
con
funciones de transferencia
discretas,
sin
ninguna
diferencia.
Para operaciones de bloques más
complejas, resulta más adecuado
usar la herramienta simulink que
también se explicarla en estas
notas.
Lugar de las raíces
El análisis mediante el lugar de las raíces se puede obtener definiendo un vector
de ganancias deseadas (que es el parámetro usado habitualmente para ver la
evolución de los polos en bucle cerrado). Lá sintaxes ES:
r = rlocus (N,D,K);
rlocus (N,D);
En la primera forma, calcula el lugar de las raíces de 1+KN(s) /D(s) = 0, para un
vector de ganancias
especificado, K. rlocus devuelve una matriz r con length(K) filas y length(den)
columnas, conteniendo la localización de las raíces complejas. Cada fila de la
matriz corresponde a una ganancia del vector K. El lugar de las raíces puede ser
dibujado con plot(r,’x’).
En la segunda forma, que es la usada habitualmente, la
función directamente dibuja el lugar de las raíces.
Además, como vemos, no es imprescindible indicar un
vector de ganancias. Para la función de transferencia
que veníamos utilizando en los ejemplos, se obtendría
el lugar de las raíces mostrado en la Fig. 1.12 Un
comando muy útil como complemento a rlocus es rlocfind,
cuya sintaxis general es:
[K,polos] = rlocfind (num,den) Antes de introducir
dicho comando es necesario haber dibujado el lugar de
las raíces. Al introducir rlocfind, se pide que se
seleccione con el ratón un punto determinado del lugar,
56
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
proporcionando como resultado la ganancia K en dicho punto y la localización de
los polos correspondientes a esa ganancia. Para mejorar la precisión, puede
realizarse un zoom en torno a una zona de internes en la
grafica, antes de ejecutar rlocfin. Otra utilidad para ver la sobre oscilación que
correspondería a un par de polos complejos conjugados situados en el lugar, seria
dibujar los lugares geométricos de factor de amortiguamiento (δ) y frecuencia
natural (ωn) constantes, mediante el comando sgrid.
Ejemplo: Los siguientes comandos dibujan el lugar de las raíces de una función de
transferencia, realizando una conveniente ampliación y resaltando las líneas de
factor de amortiguamiento 0.5, 0.6 , 0.7 y de frecuencia natural 0.5 rad/s (Fig.
1.13).
N = 1;
D = [1 3 2 0];
rlocus(N,D);
sgrid ([0.5:0.1:0.7],0.5);
axis([-2.5,1,-3,3]);
Las nuevas versiones de matlab van más allá y
ofrecen una herramienta interactiva para ir
viendo en vivo las variaciones que sufre el
lugar de las raíces, conforme se añaden,
eliminan y mueven los polos y ceros de bucle
abierto. A esta herramienta se accede mediante
el comando rltool. Merece la pena que el alumno
dedique unos minutos a esta herramienta de gran
valor didáctico.
3.Estudio temporal y frecuencial de sistemas de primer y
segundo orden
3.1.
Sistemas de primer orden
La representación en forma de función de transferencia viene dada por:
que en notación matlab se introduce:
K =
tau
num
den
1;
= 1;
= K;
= [tau 1];
La respuesta a un escalón unitario de entrada
se obtiene con la función step. El resultado
puede verse en la Fig. 1.14
t = [0:0.1:10]’;
ye = step(num,den,t);
plot(t,ye);
title (’Respuesta a un escalón unitario’);
xlabel (’tiempo(seg)’);
grid;
57
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
Las dos características fundamentales de un sistema de primer orden son su
ganancia estática K y su constante de tiempo τ. La constante de tiempo es el
tiempo que tarda en alcanzar el 63% de la salida. La ganancia
estática es el
cociente entre la amplitud de salida y la de entrada en el régimen permanente.
Estos valores se pueden comprobar directamente en la grafica o analizando el
vector de datos resultante:
La respuesta a una rampa unitaria de entrada para nuestro sistema de primer orden
se puede simular mediante:
El resultado se muestra en la Fig.
1.15, en la que aparecen, tanto la
rampa de entrada como la salida. El
error de seguimiento en posición en
régimen permanente puede obtenerse,
al
igual
que
se
ha
hecho
anteriormente, midiendo directamente
en la grafica o bien a partir del
vector de datos resultante.
La respuesta impulsión al se puede
obtener del mismo modo, pero usando en
este caso la función impulse (Fig.
1.16), que tiene una sintaxis similar al
comando step.
58
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
Para finalizar con la sección de sistemas de primer orden, se va a comprobar que
los resultados coinciden con los esperados en la teoría. Como es bien sabido, los
sistemas lineales de primer orden de ganancia unidad invariantes en el tiempo
tienen las siguientes características (nos remitimos a la bibliografía):
Respuesta a escalón unitario: ye2(t) = 1 − e(−t/τ), (t ≥ 0)
Respuesta a rampa unitaria: yr2(t) = t − τ + τe(−t/τ), (t ≥ 0)
Respuesta a impulso: yi2(t) = (1/τ)e(−t/τ), (t ≥ 0)
Si se dibujan estas funciones con el vector de tiempos definido anteriormente, y
se superponen con las graficas vistas anteriormente, puede apreciarse que
coinciden perfectamente (Fig. 1.17).
ye2 = 1 - exp(-t/tau);
yr2 = t - tau + tau * exp(-t/tau);
yi2 = (1/tau) * exp(-t/tau);
plot (t,ye,t,ye2,’o’);
title(’Respuesta teórica a escalón unitario’);
grid;
pause;
plot (t,yr,t,ramp,t,yr2,’o’);
title(’Respuesta teórica a rampa unitaria’);
grid;
pause;
plot (t,yi,t,yi2,’o’);
title (’Respuesta teórica a impulso’);
grid;
3.2. Sistemas de segundo orden
La representación normal de un sistema de segundo orden en forma de función de
transferencia viene dada por:
donde:
K: ganancia estática del sistema. Se va a suponer en el análisis siguiente, sin
perdida de generalidad, que K = 1.
δ: Coeficiente de amortiguamiento.
wn: Frecuencia natural no amortiguada del sistema.
Del polinomio característico se tiene que las dos raíces son s1,2 = −δwn±wn√δ2 −
1, pudiendo distinguirse los siguientes casos:
59
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
Caso 1: Si δ > 1 → 2 raíces reales distintas en SPI (sobré amortiguado).
Caso 2: Si δ = 1 → 2 raíces reales iguales en SPI (limite sobre-sub), sistema
críticamente amortiguado.
Caso 3: Si 0 < δ < 1 → raíces complejas conjugadas en SPI (subamortiguado)
Caso 4: Si δ = 0 → Respuesta oscilatoria. Sistema críticamente estable. Raíces en
eje imaginario.
Caso 5: Si δ < 0 → Sistema inestable, raíces en SPD.
Se va a analizar el comportamiento para el conjunto de valores de δ en la
respuesta a un escalón unitario. Se supone wn = 1. Dado que el caso 3 se verá con
mas detalle, dado su mayor interés, se presentara en ultimo lugar.
Primer caso: 2 raíces reales distintas (Fig. 1.18).
t = [0:0.2:20]’;
wn = 1;
d = 2;
num = [wn^2];
den = [1,2*d*wn,wn^2];
ye = step (num,den,t);
plot (t,ye);
title (’Respuesta a un escalón unitario’);
xlabel (’tiempo(seg)’);
grid;
Segundo caso: 2 raíces reales iguales (críticamente amortiguado)
(Fig. 1.19). El sistema, en este caso es lo mas rápido posible, antes de hacerse
subamortiguado.
d = 1;
den = [1,2*d*wn,wn^2];
ye = step (num,den,t);
plot (t,ye);
title (’Respuesta a un escalón unitario’);
xlabel (’tiempo(seg)’);
grid;
60
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
Cuarto caso: Sistema en punto critico de oscilación (Fig. 1.20).
d = 0;
den = [1,2*d*wn,wn^2];
ye = step (num,den,t);
plot (t,ye);
title (’Respuesta a un escalon unitario’);
xlabel (’tiempo(seg)’);
grid;
Quinto caso: Sistema inestable (Fig. 1.21).
d = -0.1;
den = [1,2*d*wn,wn^2];
ye = step (num,den,t);
plot(t,ye);
title (’Respuesta a un escalon unitario’);
xlabel (’tiempo(seg)’);
grid;
61
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
Tercer caso: Dos raises complejas conjugadas (Fig. 1.22).
d = 0.5;
den = [1,2*d*wn,wn^2];
ye = step (num,den,t);
plot (t,ye);
title (’Respuesta a un escalón unitario’);
xlabel (’tiempo(seg)’);
grid;
Se puede también analizar para este tercer caso de dos raíces complejas el efecto
de modificar el factor de amortiguamiento. Se muestra para valores δ = {0.1, 0.2,
...0.9} (Fig. 1.23).
t = [0:0.2:20]’;
wn = 1;
vectDelta = [0.1:0.1:0.9];
num = wn^2;
Y = [];
for ind = 1:length(vectDelta)
d = vectDelta(ind);
den = [1,2*d*wn,wn^2];
y = step (num,den,t);
Y = [Y, y];
62
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
end
plot (t,Y);
title (’Respuesta a un escalón unitario’);
xlabel (’tiempo(seg)’);
grid;
Se mantiene el valor de δ = 0.2 para el siguiente análisis:
d = 0.2;
den = [1,2*d*wn,wn^2];
ye = step (num,den,t);
La salida del sistema viene dada por la ecuación:
ev1 = 1 + ((exp(-d*wn*t)/(sqrt(1-d^2))));
ev2 = 1 - ((exp(-d*wn*t)/(sqrt(1-d^2))));
plot (t,ye,t,ev1,t,ev2);
title (’Respuesta de sist. segundo orden’)
xlabel (’tiempo (s)’);
ylabel (’salida’);
grid;
Los parámetros característicos del transitorio vienen dados por:
63
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
Estos valores se pueden calcular analíticamente y compararlos con los obtenidos
directamente de la grafica o analizando el vector de resultados.
% Valor de la salida en reg. perm:
yeRP = 1;
% Calculo SO teorica:
SOana = exp (-(d*pi)/(sqrt(1-d^2)));
% A partir de la respuesta obtenida:
SO = max(ye) - yeRP;
% Tiempo de pico teorico:
Tpana = pi/(Wn*sqrt(1-d^2));
% A partir de la respuesta. Aunque existen muchas formas de calcularlo,
% una trivial es la siguiente (la precisión viene determinada por la
% primera cifra decimal, debido al modo de definir el vector de tiempos):
for i = 1:length(ye)
if ye(i) == max(ye)
Tp = t(i);
break;
end
end
% Tiempo de subida teorico:
fi = atan (sqrt(1-d^2)/d);
Tsana = (pi-fi) / (wn*sqrt(1-d^2));
% A partir de la respuesta. Por definición, el tiempo de subida es aquel
% para el cual la salida iguala por primera vez al valor en reg. perm.
for i = 1:length(t)
if (ye(i) <= yeRP & ye(i+1) >= yeRP)
Ts = t(i);
break;
end
end
disp ’Sobreoscilaciones’; [SOana SO]
disp ’Tiempos de pico’; [Tpana Tp]
disp ’Tiempos de subida’; [Tsana Ts]
64
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
3.3. Análisis del efecto de un cero en la respuesta
temporal de un sistema de segundo orden
Los ceros afectan al valor de la ganancia y a la forma de respuesta transitoria,
pero no a la estabilidad. Supongamos la función de transferencia siguiente:
Según la posición de los polos y los ceros se tendrían comportamientos diferentes.
Si el valor absoluto del cero es mucho mayor que el valor absoluto de la parte
real de los polos, apenas varía la forma de la respuesta típica (polos
dominantes). Ver Fig. 1.25.
t = [0:0.2:20]’;
K = 1;
wn = 1;
d = 0.5;
c = 10;
% Numeradores sin cero y con cero:
num = K * wn^2;
num2 = K * (wn^2/c) * [1 c];
den = [1 2*d*wn wn^2];
% Comparamos la salida con la correspondiente al mismo sistema sin cero:
y = step (num,den,t);
y2 = step (num2,den,t);
plot (t,y2,t,y,’o’);
title (’Influencia de un cero lejos del eje imaginario’);
polos = roots(den);
disp ’Magnitud de la parte real polos:’;
abs(real(polos(1)))
Si el cero está entre dos raíces reales no varia la forma de la respuesta, pero
varia su rapidez (Fig. 1.26), pues se introduce acción derivativa.
65
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
t = [0:0.2:20]’;
K=1; wn=1; d=2; c=0.5;
num = K*wn^2;
num2 = K*(wn^2/c)*[1 c];
den = [1 2*d*wn wn^2];
y = step (num,den,t);
y2 = step (num2,den,t);
plot (t,y2,t,y,’o’);
title(’Influencia del cero entre polos reales’);
disp ’Magnitud de los polos:’;
abs(roots(den))
Si el cero está mas cerca del eje imaginario que los polos reales, aumenta la
rapidez de la respuesta (Fig. 1.27), pudiendo la salida rebasar ampliamente su
valor de régimen permanente. Como el efecto derivativo es muy grande, aunque el
sistema sin el cero no sobrepasara el valor de régimen permanente, el efecto del
cero hace que si sobrepase dicho valor.
t = [0:0.2:20]’;
K=1; wn=1; d=2; c=0.05;
num = K*wn^2;
num2 = K*(wn^2/c)*[1 c];
den = [1 2*d*wn wn^2];
y = step (num,den,t);
y2 = step (num2,den,t);
plot (t,y2,t,y,’o’);
title(’Influencia del cero cercano al eje imag.’);
disp ’Magnitud de los polos:’;
abs(roots(den))
66
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
Si el cero pasa al semiplano derecho (sistema de fase no mínima) modifica
sensiblemente la oscilación (típico por ejemplo en arranque de turbinas). Ver Fig.
1.28. En este caso, la acción derivativa inicial va en sentido contrario a la
salida del sistema, por lo que si dicha acción derivativa es grande (cero cercano
al eje imaginario), la salida ira inicialmente en sentido contrario a la de
régimen permanente.
t = [0:0.2:20]’;
K=1; wn=1; d=2; c=-0.5;
num = K*wn^2;
num2 = K*(wn^2/c)*[1 c];
den = [1 2*d*wn wn^2];
y = step (num,den,t);
y2 = step (num2,den,t);
plot (t,y2,t,y,’o’);
title(’Influencia de un cero positivo’);
3.4.
Influencia de polos adicionales.
Polos dominantes
Al régimen transitorio afectan fundamentalmente los polos y ceros cercanos al eje
imaginario. El efecto de un cero adicional se ha visto anteriormente. Analizamos
ahora el de un polo adicional. Supongamos la función de transferencia siguiente:
67
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
Se va a tomar para el estudio el caso de comportamiento subamortiguado analizado
en las secciones anteriores. En dicho caso, la función de transferencia
correspondiente tenia los polos con su parte real en −0.5. Si la distancia entre
esos polos y el resto es del orden de 5wn (con δ cercano a 1) todos los polos y
ceros a partir de esa distancia no afectan al transitorio. De hecho, en el
análisis de sistemas, normalmente cuando un sistema tiene un número grande de
polos, se trata de simplificar para obtener un sistema aproximado de segundo orden
con sus polos localizados en los polos dominantes citados. La influencia de un
polo lejano y uno cercano puede verse en las Fig. 1.29 y 1.30. En ambas figuras se
muestra la salida del sistema con y sin el polo p adicional comparadas ante una
entrada en escalón.
t = [0:0.2:20]’;
K=1; wn=1; d=0.5; p=10;
num = K*wn^2;
num2 = wn^2*K*p;
den = [1 2*d*wn wn^2];
den2 = conv (den,[1 p]);
y = step (num,den,t);
y2 = step (num2,den2,t);
plot (t,y2,t,y,’o’);
title (’Influencia de un polo lejano’);
disp ’Situacion de los polos:’;
roots(den2)
Como se observa en la Fig. 1.29 la influencia es muy pequeña o casi inexistente en
este caso.
Si se analiza el caso de un polo cercano al eje imaginario:
t = [0:0.2:20]’;
K=1; wn=1; d=0.5; p=0.2;
num = K*wn^2;
num2 = wn^2*K*p;
den = [1 2*d*wn wn^2];
den2 = conv (den,[1 p]);
y = step (num,den,t);
y2 = step (num2,den2,t);
plot (t,y2,t,y,’o’);
title (’Influencia de un polo lejano’);
disp ’Situacion de los polos:’;
roots(den2)
68
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
4. Tratamiento
mediante
Sistemas discretos
funciones
de
transferencia.
Se incluyen en esta sección algunas aclaraciones sobre comandos para tiempo
discreto, cuya sintaxis suele ser similar, en su caso, a su equivalente continuo,
añadiendo una d delante. Se van a exponer sólo unas pocas, dejando al lector el
análisis por su cuenta del resto.
• [Nz,Dz] = c2dm (N,D,Ts,’metodo’): Discretización de un modelo en tiempo
continuo, cuya función de transferencia viene dada por los polinomios numerador y
denominador. Como tercer parámetro se especifica el periodo de muestreo. El ultimo
parámetro proporciona una cadena de caracteres que indica el método con el que se
va a hacer la discretización, las posibilidades son:
–
–
–
–
–
–
’zoh’: Discretización utilizando mantenedor de orden cero (ZOH).
opción
por defecto.
’foh’: Discretizaci´on utilizando mantenedor de orden uno (FOH).
’tustin’: Discretización mediante aproximación trapezoidal.
’prewarp’: Discretización trapezoidal con prewarping.
’matched’: Discretización mediante emparejamiento de polos y ceros
Es
la
Se echa de menos en esta función la posibilidad de usar otros métodos de
discretización como son el rectangular hacia delante o hacia atrás. También da
numerosos problemas cuando se intenta discretizar una función no propia (como
pueda ser la función de transferencia de un controlador PID). No es el único
comando de matlab que tiene esta limitación.
función contraria a la anterior.
Transforma un sistema discreto en uno continuo, mediante alguno de los métodos
citados.
secuencia
escalón.
Esta
función
dibuja
directamente
la
respuesta.
Esta
representación no tendría en el eje horizontal valores temporales absolutos, sino
que aparecerían múltiplos del periodo de muestreo. Por otro lado, si indicamos un
parámetro de salida en la llamada al comando, y = dstep (Nz,Dz);, no se realiza la
69
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
representación, deberemos hacerlo nosotros mismos. En este caso, seria conveniente
pintar la curva con puntos, en lugar de con un trazo continuo (como por defecto
hace el comando plot). Veámoslo con el siguiente ejemplo, que dará como resultado
la figura que aparece a la izquierda en Fig. 1.31:
N = [0.2 0.3 1];
D = [1 0.9 1.2 0.5];
[Nz,Dz] = c2dm (N,D,1,’zoh’);
y = dstep (Nz,Dz);
plot (y,’.’);
title (’Respuesta escal{\’o}n de un sistema discreto’);
xlabel (’Periodo de muestreo’);
ylabel (’Salida’);
grid;
• stairs(y): Para obtener una respuesta como la de que aparece a la derecha en Fig.
1.31, con la forma escalonada típica de sistemas digitales, simulando que la
salida se mantiene constante entre dos periodos de muestreo, bastaría con
reemplazar la instrucción plot(y,’.’) del ejemplo anterior por stairs(y).
tiempo discreto. Siendo w un vector con las frecuencias donde queremos que se
evalúen magnitud y fase de la función de transferencia.
embargo, se usa una rejilla distinta para que la representación tenga en cuenta el
círculo de radio unidad. Por ejemplo, para el sistema discretizado anterior, si
hacemos:
rlocus (Nz,Dz);
zgrid;
70
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
Podremos obtener analizar el lugar de las raíces en relación con los lugares
geométricos de δ constante y wn Ts constante, en el plano z (Fig. 1.32).
5.Tratamiento
estados
mediante
Se va a utilizar para
apareció anteriormente:
el
descripción
análisis
la
misma
en
función
el
espacio
de transferencia
de
que
ya
El sistema se puede representar en el espacio de estados
Existen comandos que permiten obtener una descripción de un sistema en espacio de
estados (ss) a partir de una función de transferencia, venga esta dada mediante
polinomios numerador-denominador
(tf) o mediante polos-ceros (zp), y viceversa:
[A,B,C,D]
[A,B,C,D]
[num,den]
[z,p,k] =
= tf2ss(num,den) Paso de función de transferencia a espacio de estados
= zp2ss(z,p,k) Paso de descripción polo-cero a espacio de estados
= ss2tf(A,B,C,D) Paso de espacio de estados a función de transferencia
ss2zp(A,B,C,D) Paso de espacio de estados a descripción polo-cero
Supongamos que disponemos de nuestra función de transferencia dada mediante:
num = [.2 .3 1];
den = conv([1 .4 1],[1 .5]);
con el comando tf2ss, podemos obtener
descripción en espacio de estados:
[A,B,C,D] = tf2ss (num,den).
71
las
matrices
correspondientes
a
su
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
La mayoría de las funciones que se han comentado en secciones anteriores para la
manipulación y simulación de sistemas lineales dados por un par numeradordenominador, tienen su correspondencia para espacio de estados. Valgan los
ejemplos siguientes:
step (A,B,C,D,1,t);
impulse (A,B,C,D,1,t);
[Abc,Bbc,Cbc,Dbc] = cloop (A,B,C,D,-1);
[A12,B12,C12,D12] = series (A1,B1,C1,D1,A2,B2,C2,D2);
[Ad,Bd] = c2dm (A,B,Ts,’metodo’)};
Como es bien sabido, una propiedad fundamental de los sistemas es el concepto de
estabilidad. Si se considera la ecuación no forzada x = Ax, x(0) = x0, se dice que
el sistema es asintóticamente estable si el estado alcanza el valor cero
asintóticamente con el tiempo, es decir, x(t) → 0 con t → •. Se puede demostrar
que esto ocurre cuando los autovalores de la matriz A tienen partes reales
negativas. Por tanto, se puede analizar la estabilidad encontrando los autovalores
de la matriz A, usando el comando:
evalues = eig (A)
6.Manipulación mediante objetos
En las nuevas versiones del paquete de control (en consonancia con la nueva
filosofía de matlab), se ofrece la posibilidad de manipular los sistemas mediante
unas estructuras de datos específicas para modelos de sistemas lineales. Estos
”objetos” harán mas fácil la manipulación de los sistemas, pudiendo ser tratados
de forma mas abstracta, independientemente de que vinieran descritos mediante
funciones de transferencia, conjuntos de polos y ceros o matrices correspondientes
a una descripción en espacio de estados.
Para empezar, veamos justamente las tres formas de crear un “objeto de tipo
sistema”, en función de como proporcionemos la descripción de dicho sistema:
– sys = tf(num,den)
– sys = zpk(ceros,polos,k)
– sys = ss(A,B,C,D)
En cualquiera de los casos, se puede añadir un parámetro adicional que seria
indicativo de un periodo de muestreo, y por tanto, el sistema seria discreto.
Para cada una de las tres posibilidades el objeto que se crea tiene una estructura
diferente, puesto que tiene que almacenar datos de distinto tipo.
Supongamos que creamos dos sistemas mediante sendas funciones de transferencia:
sys1 = tf (1,[1 3 1]);
sys2 = tf ([1,2],1);
sys1
Transfer function:
1
------------s^2 + 3 s + 1
72
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
Como vemos, al pedirle el valor de sys1 nos lo da de una forma monolítica, que
hará muy cómoda su manipulación. Por ejemplo, podríamos sumar o poner en serie
ambos sistemas sin mas que:
sys1+sys2
Transfer function:
s^3 + 5 s^2 + 7 s + 3
--------------------s^2 + 3 s + 1
sys12 = sys1*sys2
Transfer function:
s + 2
------------s^2 + 3 s + 1
Por otra parte, las propiedades que están asociadas a estos objetos pueden verse
mediante:
get(sys1)
num: {[0 0 1]}
den: {[1 3 1]}
Variable: ’s’
Ts: 0
InputDelay: 0
OutputDelay: 0
ioDelayMatrix: 0
InputName: {’’}
OutputName: {’’}
InputGroup: {0x2 cell}
OutputGroup: {0x2 cell}
Notes: {}
UserData: []
Nos informa del numerador y denominador de la función de transferencia en s. Al
ser continua, su periodo de muestreo es Ts = 0. Se pueden asociar retardos a las
entradas o salidas, asociar nombres a entradas o salidas, etc. Si en un momento
dado, quisiéramos cambiar alguna propiedad podríamos hacerlo mediante el operador
.:
sys1.Ts = 1;
sys1.num{1} = [0 0 2];
sys1
Transfer function:
2
------------z^2 + 3 z + 1
El nuevo sistema es discreto, con periodo de muestreo Ts = 1 y con un polinomio
ganancia 2 en el numerador (no confundir esta manipulación con una discretización,
en este caso el sistema continuo original y el discreto no tienen porqué guardar
ninguna relación).
73
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
Estos objetos también están pensados para poder manipular cómodamente sistemas de
múltiples entradas y múltiples salidas. De hecho, podríamos haber creado un
sistema de la siguiente forma:
num1 = 0.5; num2 = [1 1];
den1 = [1 2 1]; den2 = [1 0];
sys = tf ({num1,num2},{den1,den2})
Transfer function from input 1 to output:
0.5
------------s^2 + 2 s + 1
Transfer function from input 2 to output:
s + 1
----s
% O lo que hubiera sido igual:
sys1 = tf (num1,den1);
sys2 = tf (num2,den2);
sys = [sys1, sys2];
7.Resumen de los
System Toolbox
comandos
mas
importantes
del
Control
Normalmente, en la nomenclatura usada en este paquete de control, los comandos
referentes a tiempo discreto que posean un equivalente para tiempo continuo, se
denominan igual que estos, pero precedidos de una d. Por ejemplo: step y dstep.
74
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
75
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
Capitulo III: Simulink
Introducción al Simulink
Simulink es una herramienta para la simulación de sistemas dinámicos. Esto es
decir que resuelve ecuaciones diferenciales ordinarias usando métodos numéricos
(Euler, Runge Kuta, etc.).
Los sistemas dinámicos (representados por ecuaciones diferenciales) se deben
introducir a este programa por medio de su descripción en diagramas de bloques. La
descripción por diagrama en bloques usa líneas para representar variables y
bloques para representar funciones. Las líneas son usadas para interconectar los
bloques entre sí.
Librería de bloques.
Para la elaboración del diagrama de bloques, se dispone de una
bloques. Ésta librería se invocará ejecutando el siguiente comando:
librería
de
» simulink
En la siguiente figura se puede ver la ventana que se abre en consecuencia.
Crear un nuevo modelo
Una vez abierta la librería de bloques, se debe crear un nuevo modelo “en blanco”.
Para ello se puede usar la barra de herramientas o el menú, como se muestra en la
siguiente figura.
76
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
El modelo “en blanco” se verá como se muestra a continuación.
Sobre este modelo “en blanco” se deberán colocar los bloques que se
interconectarán por medio de líneas. Los bloques son funciones tanto algebraicas
como dinámicas. Las líneas son variables (locales) que serán usadas para
interrelacionar las funciones. Las líneas pueden ser reales, complejas escalares
y/o vectoriales.
Bloques →Funciones.
Líneas → Variables.
Agregar un bloque al Área de trabajo
Estando abiertas y visibles la librería de bloques y el modelo, se pueden agregar
bloques al modelo, seleccionándola de la librería y arrastrándola al modelo.
Más adelante se hará una breve descripción de los bloques más comunes para el uso
en esta materia.
77
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
Unir bloques con una línea.
Se debe notar que los bloques tienen entradas de señal o salidas de señal o ambas,
y se refieren respectivamente al argumento y resultado de la función. En
consecuencia para armar un sistema se deberán conectar salidas con entradas usando
líneas. Para unir bloques, se deberá presionar el botón izquierdo del ratón sobre
la salida de un bloque, y manteniendo el botón presionado, arrastrarlo hasta la
entrada de otro bloque, como se muestra en las siguientes figuras.
Obsérvese que el puntero se transforma en una cruz cuando
puede iniciar una línea (una entrada, una salida u otra
línea) y en una doble cruz cuando puede finalizar una
línea sin que ésta quede abierta.
Se puede trazar una línea desde una salida a una entrada,
de una entrada a una salida, de una línea (sacando una
derivación) a una entrada, o de una entrada a una línea.
Al igual que las variables en un sistema de ecuaciones,
las líneas pueden ir a varios destinos, pero tendrán un
solo origen.
Sacar una derivación
Para sacar una derivación de una línea existente se debe
colocar el puntero sobre el mismo (el puntero se
transformará en una cruz) y presionando el botón derecho
del ratón, y manteniéndolo presionado, arrastrarlo hasta
el destino final o intermedio. No es necesario finalizar
la línea inmediatamente. Se puede trazar un segmento,
soltar el botón del ratón, y continuar más adelante (una
vez iniciada la derivación, el siguiente segmento se deberá continuar usando el
botón izquierdo).
Otra alternativa para iniciar una derivación es usando el botón izquierdo del
ratón mientras se mantiene presionada la tecla “Control” del teclado.
Bloques más comunes (de interés para la
materia Control) de la librería de
Simulink.
Se describirá brevemente la lista de los bloques más
comunes y de interés para la materia Control. Una vez
que el bloque ha sido agregado al modelo, se puede
acceder a sus parámetros haciendo “doble clic” sobre el
mismo. El dialogo que se abre para ingresar los
parámetros incluye, además de los campos para cargar
éstos, una breve descripción y asistencia para el uso,
un botón “Ok” para aceptar y cerrar, “Cancel” para
rechazar los cambios y cerrar, “Help“ para acceder a la
ayuda (Muy útil! por favor usarlo para aprender más
sobre el bloque!) y “Apply” para aceptar los cambio sin
cerrar el dialogo.
78
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
79
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
Ejemplo elemental
Supóngase que desee ver una curva senoidal y su integral en el tiempo. Esto
responde a la siguiente ecuación diferencial:
que puede ser escrita en forma integral:
Para ello arme el siguiente diagrama en un modelo “en blanco”.
Se debe considerar que la variable tiempo (t) que aparece en la última ecuación es
una variable implícita del Simulink, por lo que no está relacionado con ninguna
línea, pero es considerado en el bloque "Integrator". Una vez armado el sistema,
se deberán ajustar los parámetros de simulación como se muestra en la siguiente
sección.
Parámetros de simulación
Una vez creado un modelo se deben ajustar los parámetros de simulación, que se
pueden acceder desde el menú "Simulation"->"Simulation parameters...", como se
muestra a continuación:
80
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
Por medio de este diálogo se pueden ajustar, entre otros, los siguientes
parámetros:
Iniciar y detener una simulación.
Para iniciar la simulación se debe seleccionar el menú "Simulation"-> "Start" como
se muestra a continuación:
Alternativamente se puede iniciar la simulación con el botón
herramientas.
de la barra de
En la barra de estados del modelo se muestra el estado de la simulación y en
consecuencia si finalizó la misma. Una vez finalizada la simulación se puede abrir
el bloque "Scope" del modelo y ver el resultado de la simulación.
81
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
Capitulo IV: Complementarios…
PID. Descripción y reglas heurísticas de Sintonización
1. Introducción
El objetivo de esta práctica es que el alumno se familiarice y profundice en el
conocimiento de la estructura de control PID, profusamente usada en el mundo
industrial.
Para ello se empleara el software de simulación de sistemas dinámicos SIMULINK®
asociado al paquete de computación técnica MATLAB ®.
La descripción de la práctica y los puntos a tratar en la misma se recogen en los
siguientes apartados.
2. El sistema a controlar
Para comenzar abordaremos el problema del control de un sistema simple de primer
orden con retardo, definido por la función de transferencia.
donde k representa la ganancia estática del sistema, t es su constante de tiempo y
L es el retardo del mismo.
Este tipo de sistemas, a pesar de su sencillez, modelan bastante bien una amplia
clase de sistemas dinámicos que involucran generalmente fenómenos de transporte de
materia como sucede en muchos procesos químicos, térmicos y muchos otros muy
comunes en la industria de procesos.
Comenzaremos viendo la respuesta de este sistema a lazo abierto ante una entrada
en escalón, y para ello construiremos el siguiente sistema en SIMULINK
para un sistema con los siguiente parámetros: 2 = k , s 5 . 0 = t y L=0.8 s.
En la simulación observaremos la respuesta esperada, es decir la respuesta de un
sistema de primer orden con un retardo de 0.8 segundos respecto a la entrada en
escalón marcada.
3. Controlador PID
El controlador PID es una estructura de control en la que la señal de control del
proceso se
expresa en función del error, e(t)=yref (t) - y(t), según la expresión estandar:
donde p K , i K y d K corresponden respectivamente a las constantes Proporcional,
Integral y Derivativa del controlador.
La expresión anterior puede igualmente expresarse como la siguiente función de
transferencia del controlador PID
82
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
Esta función
distintos:
de
transferencia
puede
implementarse
en
SIMULINK
de
dos
modos
1) Empleando el bloque PID que proporciona el software para este controlador que
puede encontrarse en Simulink Extras -> Additional Linear Pulsando dos veces sobre
este bloque obtenemos la ventana de diálogo donde podemos introducir los
parámetros del controlador arriba indicados
2) También es posible construir la estructura
elementales de SIMULINK del siguiente modo
del
PID
partiendo
de
bloques
Esta segunda estructura será la que emplearemos en lo sucesivo en la práctica.
4. Control a lazo cerrado.
Para comprobar la influencia del controlador PID en el
construiremos la siguiente estructura de control realimentada
83
sistema
propuesto
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
Esta estructura representa un control PID clásico que incluye el controlador en la
cadena directa del sistema.
5. Ajuste del PID. Reglas del Ziegler-Nichols.
Para un ajuste inicial del controlador anterior, emplearemos las conocidas reglas
de Ziegler- Nichols.
a) Primer método de Ziegler-Nichols
Las características del sistema estudiado permiten emplear el método de respuesta
a escalón de Ziegler-Nichols que caracteriza un sistema mediante dos parámetros, L
y T, obtenidos a partir de la respuesta a lazo abierto del mismo como representa
la figura 1.
Según este procedimiento de sintonización los parámetros del controlador pueden
obtenerse de acuerdo con las expresiones de la siguiente tabla.
De este modo a partir de la respuesta a lazo abierto del sistema, calcularemos los
controladores P, PI y PID apropiados para nuestro sistema. Para cada uno de los
tres controladores anteriores se pide:
1) Calcular las respuesta en el dominio temporal y caracterizar la respuesta según
la ganancia estática a lazo cerrado (K0), sobreoscilación (SO), tiempo de subida,
(ts), tiempo de establecimiento (te) y ratio de decaimiento (rd).
84
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
2) Modificar los parámetros de cada controlador para un ajuste fino de la
respuesta anotando la influencia del aumento o disminución de cada parámetro en la
respuesta temporal.
b) Segundo método de Ziegler-Nichols
El segundo método de Ziegler-Nichols, o método de respuesta en frecuencia es un
método alternativo de sintonización de PIDs que puede describirse como sigue:
En primer lugar es necesario ajustar las ganancias integral y derivativa a cero,
esto es
0 = i K y 0 = d K .
A continuación, partiendo de un valor bajo de la ganancia proporcional, p K ,
vamos aumentando ésta gradualmente hasta conseguir un comportamiento oscilatorio
mantenido en la respuesta del sistema tal como muestra la gráfica. A esta ganancia
la llamaremos U K .
El otro parámetro que nos hace falta es el periodo de oscilación del sistema para
esta ganancia, que llamaremos U T , y que se calcula como muestra la gráfica.
Con los valores de U K y U T entramos en la tabla 2 de Ziegler-Nichols y
calculamos los parámetros correspondientes.
Para cada uno de los tres controladores, P, Pi y PID, se pide:
1) Calcular las respuesta en el dominio temporal y caracterizar la respuesta según
la ganancia estática a lazo cerrado (K0), sobreoscilación (SO), tiempo de subida,
(ts), tiempo de establecimiento (te) y ratio de decaimiento (rd).
85
Universidad del Zulia
ANALISIS Y CONTROL DE SISTEMAS USANDO MATLAB
Comentarios finales:
Ante la gran cantidad de material necesario para cubrir en el área en cuestión y
la gran cantidad de información disponible en este manual se pretendió tomar los
aspectos básicos necesarios para introducir a los participantes del curso a lo que
es este extenso mudo, pero es de hacer notar que como dijo ISAAC NEWTON: “Lo que
conocemos es una gota, y lo que ignoramos es el océano”, y por lo tanto,
no
importa cuan largo sea este material y el curso donde se dicta, el aprendizaje, y
las aplicaciones de este sofguard son se podría decir infinitas….
En virtud de lo anterior no queda mas que invitarles a adentrarse cada dia mas en
este mundo, adentrarse según sus necesidades, sus problemas diarios y tener en
cuenta que el aprendizaje debe ser continuo y constante y sobre todo tener en
cuenta que “La practica hace al maestro”…
Cualquier sugerencia y /o corrección a este material será bien recibido ya que la
intención es de mejorar continuamente para que todos aquellos que en un futuro
transiten por estos caminos encuentren mejores opciones y oportunidades que
aquellos que pasamos primero…
MF.
86
Descargar