¿Cómo explicar que las matemáticas, un producto de la mente

Anuncio
Control Automático – Ing. Eléctrica
F.R. Tucumán – Universidad Tecnológica Nacional
Página 1 de 38
Ing. Juan Jesús Luna
¿Cómo explicar que las matemáticas, un producto de la
mente humana, independiente de la experiencia, se adapte
tan admirablemente bien a los objetos de la realidad?
Albert Einstein
Control Automático – Ing. Eléctrica
F.R. Tucumán – Universidad Tecnológica Nacional
Página 2 de 38
Ing. Juan Jesús Luna
1 – Introducción a MatLab: El nombre es una abreviatura de las palabras MATrix
LABoratory. MatLab es un sistema interactivo para cálculos científicos y de ingeniería
basado en las matrices. Con el se pueden resolver complejos problemas numéricos sin
necesidad de escribir un programa especifico para ello, aunque también es posible
programar. Además, el programa MatLab dispone, dependiendo de la versión, de
diferentes módulos (Toolboxes) que permiten resolver problemas específicos.
Debido a que MatLab es un programa de Calculo Numérico, la forma de producir
gráficos es completamente distinta de la de programas de Calculo Simbólico como
Derive, Mathematica o Maple. En MatLab se tienen que calcular mediante comandos
adecuados los puntos que después se representaran en la grafica.
1.1 - La Interfase de MatLab: La ventana principal es el Comand Window, es la ventana
sobre la que se trabajara y en la que se introducirán todos los comandos; también están
disponibles el Workspace (información sobre los elementos que se han creado), el
Comand History (recoge todos los comandos introducidos) y el Current Directory
(ficheros *.m de la carpeta). El prompt característico de MatLab es ». Esto quiere decir
que el programa está preparado para recibir instrucciones.
Control Automático – Ing. Eléctrica
F.R. Tucumán – Universidad Tecnológica Nacional
Página 3 de 38
Ing. Juan Jesús Luna
A través de la Barra de Menús se accede a las operaciones que no están disponibles en
la Barra de Herramientas. El menú principal es File, en el se encuentra la gran mayoría
de las operaciones no presentes en la barra de herramientas. En la siguiente figura se
muestra el menú File.
Todas las operaciones que realiza MatLab se basan en una estructura de datos matricial.
Dentro del entorno de trabajo de MatLab se pueden definir nuevos comandos o
funciones, programadas por el propio usuario, a través de los archivos *.m. Este tipo de
archivos se encuentran en las llamadas toolbox de MatLab, que son una colección de
funciones ya programadas y disponibles para el usuario. En este sentido, MatLab
funciona como un lenguaje interpretado, es decir, reconoce y ejecuta los comandos que
se le pasan a través del editor de comandos (Command Windows). Todas estas
funciones o comandos se agrupan en la toolboxes y abarcan diferentes campos, como
son el análisis y adquisición de datos, procesamiento de imágenes y de señales, análisis
y diseño de sistemas de control, comunicaciones, simulaciones en tiempo real y también
herramientas de finanzas, estadísticas, economía o lógica difusa.
1.2 – El Interprete de Comandos: Los comandos de MatLab se ejecutan desde el editor
de comandos. A cada comando se le pasan los datos de calculo entre paréntesis y
separados por comas en el caso de que requiera mas de un dato. El resultado se guarda
en la variable de salida especificada por el usuario o, por defecto, en ans. Este resultado
queda almacenado en el workspace pudiéndose consultar mediante los comandos who y
whos. En caso de que el comando ejecutado devuelva más de un resultado, estos se
almacenaran como elementos de un vector, por lo que deberán ir entre corchetes.
Formas de ejecutar los comandos en MatLab:
>> Comando de MATLAB
Directamente se ejecuta el comando.
>> Comando de MATLAB (dato1, dato2, etc.)
Al comando se le incorpora un grupo de datos (dato1, dato2, etc.) con los que realizara
un determinado cálculo; el resultado podrá ser grafico, con lo cual MatLab generara la
Control Automático – Ing. Eléctrica
F.R. Tucumán – Universidad Tecnológica Nacional
Página 4 de 38
Ing. Juan Jesús Luna
figura correspondiente, o bien numérico, en cuyo caso el resultado se guardara en la
variable por defecto ans.
>> variable1 = Comando de MATLAB (dato1, dato2, etc.)
Se ejecuta el comando con los datos incorporados y devuelve el resultado en la variable
especificada a la izquierda del signo igual (variable1).
>> [variable1 variable2…etc.] = Comando de MATLAB (dato1, dato2, etc.)
Es de similar ejecución que el anterior, devuelve dos o mas resultados que se guardaran
en las variables indicadas por el usuario (variable1 variable2…etc.).
2 – Operaciones Básicas: En el editor de comandos, las operaciones algebraicas se van
evaluando de izquierda a derecha, con órdenes de prioridad que dependen de la
operación a realizar. La potencia (^) es la operación de mayor prioridad, seguida de la
división (/) y el producto (*), y por ultimo la resta (-) y la suma (+). Es recomendable
usar paréntesis para evitar resultados que no coincidan con los esperados (también por
claridad).
Los decimales se definen con el punto (.) y no con la coma (,); esta ultima se emplea
solo como separador de datos dentro de un comando. El punto y coma (;) al final de una
sentencia permite ejecutar el comando sin mostrar el resultado por pantalla.
2.1 - Operaciones Aritméticas:
Suma:
>>2+2
ans =
% pulsar tecla Enter
4
% ans es la variable resultado por defecto
Resta:
>>12-4
ans =
8
% pulsar tecla Enter
% ans es la variable resultado por defecto
Después de escribir cada comando hay que pulsar Enter para que lo ejecute. Si después
de esta primera sesión con MatLab se quiere salir del programa, se puede hacer de dos
formas, escribiendo exit a continuación del prompt, o bien con File Exit MatLab.
El valor que se quiere calcular también se puede asignar a una variable. Por ejemplo:
>>x=3^2
x=
9
Hay que tener en cuenta que MatLab distingue entre mayúsculas y minúsculas, por lo
tanto, se distingue entre la variable X y la variable x.
Control Automático – Ing. Eléctrica
F.R. Tucumán – Universidad Tecnológica Nacional
Página 5 de 38
Ing. Juan Jesús Luna
La notación para las operaciones matemáticas elementales es la habitual en todos los
programas de cálculo simbólico:
Suma
Resta
+
-
División
Exponenciación
/
^
Multiplicación
*
Los resultados numéricos mostrados en el editor de comandos pueden representarse en
varios formatos; entre los más comunes están los siguientes:
short
long
short e
long e
hex
racional
numero con 4 cifras decimales.
numero con 14 o 15 cifras decimales.
numero en notación científica con 4 cifras decimales.
numero en notación científica con 14 o 15 cifras decimales.
numero en hexadecimal.
numero expresado como fracción.
El formato se puede seleccionar en el menú File Preferences Commnad Window.
2.2 – Operadores Relacionales:
Los operadores relacionales se usan en operaciones de comparación; como resultado de
la comparación devuelven un valor lógico 1 (verdadero) o 0 (falso). Los operadores
relacionales pueden ser de comparación (< menor, <= menor o igual, > mayor, >=
mayor o igual); o de identidad (= = igual, ~ = distinto). Su aplicación se extiende a datos
numéricos, vectores y matrices, en estos dos últimos casos el operador relacional se
evalúa elemento a elemento. En el caso de evaluar números complejos, los operadores
de comparación solo tienen en cuenta la parte real, mientras que en los operadores de
identidad se considera tanto la parte real como imaginaria.
2.3 – Definición de Variables: Durante la ejecución de comandos u otras operaciones
realizadas en una sesión de MatLab, resulta imprescindible el uso de variables para el
almacenamiento de cálculos y resultados. La variable por defecto es ans y se crea
automáticamente para almacenar el resultado de la última ejecución. La creación de
nuevas variables debe seguir una serie de reglas:
•
•
•
•
•
Se definen con letras que pueden ir seguidas de números y guión bajo (_).
La longitud máxima es de 63 caracteres.
La letra ñ y las vocales acentuadas no son caracteres validos.
El primer carácter debe ser siempre una letra, no un número.
Se distinguen las mayúsculas de las minúsculas.
La eliminación de variables almacenadas en el workspace se realiza con el comando
clear seguido del nombre de la variable.
Si se ejecuta el comando clear sin especificar ningún nombre de variable, se eliminaran
todas las variables almacenadas en el workspace.
Las variables definidas en una sesión de MatLab se pueden archivar para su uso en
posteriores sesiones. Para ello, seleccionar en el menú File Save Workspace as
generando un archivo con la extensión .mat (por ejemplo misvar.mat).
Para abrir el archivo con las variables almacenadas en una sesión anterior, seleccionar
en el menú File Import Data, activándose la interfase de importar datos. También es
Control Automático – Ing. Eléctrica
F.R. Tucumán – Universidad Tecnológica Nacional
Página 6 de 38
Ing. Juan Jesús Luna
posible recuperarlos directamente desde el editor de comandos mediante el comando
load.
2.4 – Tipos de Datos:
En MatLab existen hasta 15 posibles tipos de datos que se pueden almacenar en
variables y que dependerán de la operación y/o comando ejecutado. Los datos se
guardan como vector o matriz (array) siendo los tipos más comunes: numérico
(numeric), lógico (logic), carácter (character), celda (cell) y estructura (structure).
Los vectores y matrices se definen entre corchetes, con sus elementos separados por
espacios; en el caso de las matrices, cada fila se delimita con el punto y coma.
Ejemplo:
>> vector=[3 2 1 0]
vector =
3 2 1 0
>> matriz=[1 2 3;4 5 6;7 8 9]
matriz =
1 2 3
4 5 6
7 8 9
En el caso de números complejos se emplea indistintamente la i o j para representar el
termino Raíz Cuadrada de -1. Un resultado de valor infinito devuelve el termino inf. Un
resultado no numérico devuelve el termino NaN (Not a Number).
2.5 – Funciones Matemáticas:
En MatLab están definidas algunas de las funciones más comunes utilizadas en
matemáticas. Su sintaxis coincide también con la que se utiliza en la mayoría de los
programas de matemáticas, como, por ejemplo, el programa DERIVE, aunque hay
algunas diferencias. Algunas de estas funciones son:
sin
sinh
asin
cos
cosh
acos
tan
Seno
Seno hiperbólico
Arco seno
Coseno
Coseno hiperbólico
Arco coseno
Tangente
tanh
atan
exp
log
log10
sqrt
abs
Tangente hiperbólico
Arco tangente
Exponencial
Logaritmo neperiano
Logaritmo decimal
Raíz cuadrada
Valor absoluto
Para obtener listas completas de todas las funciones que puede utilizar MatLab, así
como para saber el uso de cada una de ellas o de cualquier comando, siempre se puede
acudir al help. Esto se puede hacer de varias formas, poniendo >>helpwin, siendo el
propio programa quien nos ofrece la ayuda (como en cualquier otro programa), o
poniendo >>helpdesk, con lo que ofrece ayuda interactiva, conectándose a Internet si
este recurso esta disponible en el ordenador.
Control Automático – Ing. Eléctrica
F.R. Tucumán – Universidad Tecnológica Nacional
Página 7 de 38
Ing. Juan Jesús Luna
Si se conoce el nombre del comando, y se quiere saber para que sirve, se puede poner:
>>help comando
Y ofrecerá ayuda sobre el comando en cuestión, si este existe. Por ejemplo:
>>help rotate3d
ROTATE3D Interactively rotate the view of a 3-D plot.
ROTATE3D ON turns on mouse-based 3-D rotation.
ROTATE3D OFF turns if off.
ROTATE3D by itself toggles the state.
See also ZOOM.
Ofrece información sobre el comando rotate3d, comando que sirve para rotar figuras
tridimensionales utilizando el ratón. Otra forma de buscar ayuda es utilizar el comando
lookfor, por ejemplo, poniendo >>lookfor cos, aparecerá una lista con todos los
comandos que tienen que ver con la función coseno.
Algunas consideraciones: Con las flechas del cursor se pueden recuperar las órdenes
anteriores, sin tener que volver a teclearlas. Esto resulta útil en el caso de una
equivocación o cuando se quiere repetir un comando con alguna pequeña modificación.
A veces, puede resultar necesario, hasta imprescindible, que el resultado de un cálculo
no aparezca en pantalla. Por ejemplo, si se genera una matriz de orden muy alto con el
objeto de hacer después una grafica. El hecho de que aparezca la matriz en pantalla
puede resultar un poco engorroso. Para conseguir esto se pone un punto y coma al final
de la instrucción. Por ejemplo,
>>x=sin(3);
No aparece ningún resultado, pero ha realizado el cálculo, porque si se escribe el valor
de x, aparecerá el valor 0.1411. (El argumento de las funciones trigonométricas siempre
se mide en radianes).
Los comandos se pueden ir escribiendo y ejecutando uno a uno, es decir, renglón a
renglón, y también se pueden escribir uno a continuación de otro en una misma línea, en
cuyo caso deben ir separados por comas. Si el comando o la cantidad de comandos es
demasiado larga para que aparezca en un único renglón, se puede romper la cadena y
seguir en el siguiente renglón, escribiendo tres puntos suspensivos. Por ejemplo:
>>x=sin(10),y=cos(10),...
z=tan(10)
x=
-0.5440
y=
-0.8391
z=
0.6484
Control Automático – Ing. Eléctrica
F.R. Tucumán – Universidad Tecnológica Nacional
Página 8 de 38
Ing. Juan Jesús Luna
Hay algunas variables especiales que se utilizan por defecto:
ans: Es la variable que se utiliza en los resultados. En la operación siguiente se puede
recuperar este resultado volviendo a escribir ans. Esta variable se modificara en cuanto
haya un nuevo resultado.
pi: El numero pi. (No hay una variable para el numero e, pero se podría definir
>>e=exp(1)).
eps: Es el numero mas pequeño que utiliza el ordenador tal que, cuando se le suma 1,
crea un numero en coma flotante mayor que 1.
realmin, realmax: Son, respectivamente, el menor y el mayor de los números reales
utilizables.
Poniendo el símbolo % se consigue que no se ejecute lo que venga a continuación, en el
mismo renglón, sino que se interprete como un comentario, se suele utilizar para
escribir comentarios aclaratorios en líneas de comandos de manera que no afecten a su
ejecución. Por ejemplo, si se pone,
>>sqrt(2) % Raíz cuadrada de 2
Calculara la raíz de 2 y se saltara el comentario.
2.6 – Vectores y Matrices:
Los vectores y las matrices son los elementos básicos con los que trabaja MatLab. Un
vector es un conjunto de datos agrupados entre corchetes, formado por una fila y varias
columnas (vector fila de 1xn) o varias filas y una columna (vector columna mx1). Una
matriz es un conjunto de vectores formado por mas de una fila y columna (mxn); los
elementos que forman una matriz se agrupan entre corchetes, siendo el punto y coma el
carácter que marca la separación de filas.
2.6.1 – Construcción de vectores y matrices:
2.6.1.1 – Vectores: Un vector se puede definir introduciendo sus coordenadas, separadas
por espacios o por comas, entre corchetes:
>> x=[1 2 3]
x=
1 2 3
Si se quiere definir un vector columna, se separan las filas por puntos y comas, o bien se
calcula el transpuesto de un vector fila con >>x'.
Otra forma de crear vectores es la siguiente: Se especifica el Valor Inicial, el
Incremento y el Valor Final:
>> x=1:0.5:3
x=
1.0000 1.5000 2.0000 2.5000 3.0000
Control Automático – Ing. Eléctrica
F.R. Tucumán – Universidad Tecnológica Nacional
Página 9 de 38
Ing. Juan Jesús Luna
Genera un vector que va desde 1 hasta 3 con un paso de 0.5 unidades. Exactamente el
mismo resultado se conseguiría con el comando linspace: Se especifica el Valor Inicial,
el Valor Final y la Cantidad de elementos del vector.
>>x=linspace(1,3,5)
que produce 5 números igualmente espaciados entre 1 y 3.
Una variante interesante es el comando logspace(d1,d2,n), que genera un vector con n
valores espaciados logaritmicamente entre 10^d1 y 10^d2
Vector de Unos: Se usa el comando ones.
>> vector_de_unos=ones(1,6)
vector_de_unos =
1 1 1 1 1 1
Vector de Ceros: Se usa el comando zeros.
>> vector_de_ceros=zeros(1,6)
vector_de_ceros =
0 0 0 0 0 0
2.6.1.2 – Matrices: Una matriz se puede definir introduciendo sus filas (consideradas
como vectores), separadas por puntos y comas, entre corchetes:
>>A=[3 2 1; 6 5 4; 9 8 7]
A=
3 2 1
6 5 4
9 8 7
Matrices Predefinidas: En MatLab hay varios comandos que sirven para definir con
gran facilidad matrices de tipos particulares. Algunas de estas funciones son las
siguientes:
eye(n), matriz unidad de tamaño (n x n)
zeros(m,n), matriz de ceros de tamaño (m x n)
zeros(n), lo mismo, pero de orden (n x n)
ones(n), matriz de unos (n x n)
ones(m,n), lo mismo, pero de orden (m x n)
rand(n), matriz de números aleatorios entre 0 y 1, distribuidos uniformemente (n x n)
rand(m,n), lo mismo, de tamaño m x n
magic(n), crea una matriz en forma de cuadrado mágico de tamaño n x n
2.6.2 – Operaciones básicas con vectores: Las operaciones entre vectores se realizan
elemento a elemento y deben ser, por lo tanto, de la misma dimensión, es decir, deben
tener el mismo número de elementos. Se estudiaran las operaciones con ejemplos:
Control Automático – Ing. Eléctrica
F.R. Tucumán – Universidad Tecnológica Nacional
Página 10 de 38
Ing. Juan Jesús Luna
>> Vector1=[4 3 2 1];
>> Vector2=[4 5 6 7];
>> K=2;
Suma:
>> K + Vector1
ans =
6 5 4 3
% suma de un escalar con un vector
>> Vector1 + Vector2
ans =
8 8 8 8
% suma de vectores
Resta:
>> K - Vector1
ans =
-2 -1 0 1
% resta de un escalar con un vector
>> Vector1 – Vector2
ans =
0 -2 -4 -6
% resta de vectores
Producto:
>> K * Vector1
ans =
8 6 4 2
% Producto de un Escalar por un Vector
>> Vector1.*Vector2
ans =
16 15 12 7
%Producto de Vectores
El producto de dos vectores o dos matrices elemento a elemento será muy importante
cuando se quiera representar graficas de funciones.
División:
>> Vector1/K
ans =
2.0000
1.5000 1.0000 0.5000
>> Vector1./Vector2
ans =
1.0000
% División de un Vector entre un Escalar
% División de Vectores
0.6000 0.3333 0.1429
Control Automático – Ing. Eléctrica
F.R. Tucumán – Universidad Tecnológica Nacional
Página 11 de 38
Ing. Juan Jesús Luna
Potencia:
>> Vector1.^K
ans =
16 9 4 1
% Vector elevado a una Potencia Escalar
>> Vector1.^Vector2
ans =
256 243 64 1
% Vector elevado a una Potencia Vectorial
Nota: En las operaciones producto, división y potencia, el punto (.) indica a MatLab que
ha de operar elemento a elemento, si no producirá un error.
2.6.3 – Operaciones básicas con matrices: Las operaciones con matrices deben seguir
las reglas del algebra matricial en cuanto a dimensión de aquellas con las que se va a
operar. Se estudiaran las operaciones con ejemplos:
>>A=[1 1 2; 3 4 6; 2 1 0];B=[-1 2 0; 2 0 0; -2 3 4];
Suma:
>>A+B
Ans =
0 3
5 4
0 4
2
6
4
Resta:
>>A-B
ans =
2 -1
1 4
4 -2
2
6
-4
Producto:
>>A*B
ans =
-3 8 8
-7 24 24
0 4 0
Potencia:
>>A^3
ans =
45 44 58
162 157 204
43
39 46
Control Automático – Ing. Eléctrica
F.R. Tucumán – Universidad Tecnológica Nacional
Página 12 de 38
Ing. Juan Jesús Luna
2.7 – Polinomios:
Los Polinomios en MatLab son, básicamente, vectores cuyos elementos son los
términos de los que consta el Polinomio.
2.7.1 – Definición de Polinomios: En MatLab los Polinomios se definen como vectores
fila introduciendo, siempre entre corchetes, los coeficientes de sus elementos en orden
de potencia descendente; lógicamente se debe añadir un cero en la posición de aquellos
elementos que no existan dentro del Polinomio. Se estudiaran las operaciones con
ejemplos:
>> Poli1=[1 6 5 -3];
>> Poli2=[2 0 1 -1 1];
% Definición de Polinomio x^3+6x^2+5x-3
% Definición de Polinomio 2x^4+x^2-x+1
Obtención de las Raíces de un Polinomio: (Usando el comando roots)
>> Raices1=roots(Poli1)
Raices1 =
-4.8385
-1.5592
0.3977
Nota: Las Raíces que devuelve MatLab vienen dadas en un vector columna.
Definición de un Polinomio a través de sus Raíces: (Usando el comando poly)
>> Raices3=[-1;0.5+i;0.5-i];
% Vector columna con las Raíces del Polinomio
>> Poli3=poly(Raices3)
% Calculo del Polinomio a partir de sus Raíces
Poli3 =
1.0000
0 0.2500 1.2500
El Polinomio Resultante es x^3+0.25x+1.25
2.7.2 – Operaciones entre Polinomios: Las operaciones entre Polinomios requiere que
estos tengan la misma dimensión, completándose con ceros los términos del polinomio
de potencias que no existen para mantener la misma dimensión. Se estudiaran las
operaciones con ejemplos:
>> Poli1=[0 1 6 5 -3];
>> Poli2=[2 0 1 -1 1];
% Definición de Polinomio x^3+6x^2+5x-3
% Definición de Polinomio 2x^4+x^2-x+1
Suma:
>> PoliSuma=Poli1+Poli2 % El resultado es 2x^4+x^3+7x^2+4x-2
PoliSuma =
2
1
7
4
-2
Control Automático – Ing. Eléctrica
F.R. Tucumán – Universidad Tecnológica Nacional
Página 13 de 38
Ing. Juan Jesús Luna
Convolución:
>> PoliMult=conv(Poli1,Poli2)
PoliMult =
0
2 12 11
-1
0
% Usa el comando conv
-2
8
-3
División:
>> [Cociente,Resto]=deconv(PoliMult,Poli2)
Cociente =
0
1
6
5
-3
0
0
0
% Usa el comando deconv
Resto =
0
0
0
0
0
0
Derivación:
>> PoliDeriv=polyder(Poli1)
PoliDeriv =
3
12
% Usa el comando polyder
5
Resolución de Polinomios:
>> polyval(Poli1,1)
ans =
% Evalúa Poli1 para x=1
9
>> polyval(Poli1,[1 2 3])
ans =
9 39 93
% Evalúa Poli1 para x=1, 2 y 3
3 – Características Adicionales:
3.1 Creación de Gráficos: Para graficar funciones de la forma y = f(x) con MatLab se
usa el comando plot, que representa parejas de valores sobre unos ejes coordenados.
Estos valores se definen mediante vectores que deben tener la misma dimensión; en
caso contrario se producirá un error.
Por ejemplo, se quiere dibujar la grafica de la función y = sen(x):
Primero se crea una tabla de valores para x
>>x=0:pi/100:2*pi;
Con este comando se formo una tabla (el vector x) con 200 valores entre 0 y 2 pi. Otra
forma de conseguir el mismo resultado seria utilizar el comando
>>x=linspace(0,2*pi,200);
Ahora se calculan los valores de y
Control Automático – Ing. Eléctrica
F.R. Tucumán – Universidad Tecnológica Nacional
Página 14 de 38
Ing. Juan Jesús Luna
>> y = sin(x);
y por ultimo se la dibuja
>>plot(x,y)
Realmente lo que se hace es dibujar 200 puntos de la función en el intervalo [0; 2pi], y
posteriormente el programa los ha unido mediante segmentos. Si el número de puntos es
lo suficientemente grande, como en este caso, no se aprecian los vértices.
Se vera un ejemplo algo mas complicado. Se quiere dibujar ahora la grafica de la
siguiente función:
Se definen los valores para los que se quiere hacer la grafica
>>x=-3:.01:3;
Es decir, que se dibujara la grafica en el intervalo [-3; 3] con un paso de longitud 0.01.
Se define la función
>>y=x.*exp(-x.^2);
Y por ultimo, se escribe el comando para que ejecute el dibujo.
>>plot(x,y)
El aspecto de la grafica se puede modificar utilizando algunos comandos:
- Cuadricula. Si se quiere que aparezca una cuadricula sobre el dibujo, se usara el
comando >>grid on. Para desactivar la cuadricula habrá que escribir >>grid off.
- Color y trazo. El comando plot ofrece múltiples posibilidades de color y forma de
trazo de la grafica. Por ejemplo, el comando >>plot(x,y,'r*'), dibujara la grafica en
color rojo y con asteriscos. Para consultar todas las posibilidades, hacer >>help plot.
- Ejes. Los ejes que aparecen por defecto en una grafica también se pueden modificar.
Con el comando >>axis([-2 2 -1 1]), se conseguirá que la grafica aparezca en la región
-2 < x < 2, -1 < y < 1.
Con >>axis square, se conseguirá que la figura aparezca en un cuadrado, sin cambiar el
rango de los ejes. Con el comando >>axis equal, se conseguirá que los rangos de los
ejes sean iguales.
- Zoom. Utilizando el comando >>zoom on. Se puede agrandar la figura o alguna zona
seleccionada de la figura. Hay que abrir la figura y usar los botones izquierdo y derecho
del ratón. Para desactivarlo, habrá que escribir >>zoom off.
- Varias graficas en la misma figura. Se pueden dibujar tantas graficas como se
quieran en una misma figura. Si ya se tiene dibujada una, y se genera una nueva grafica,
en principio la figura anterior es sustituida por la nueva. Sin embargo, utilizando el
comando >>hold on, se mantendrá la anterior, con todas sus propiedades, y se podrá
dibujar encima una nueva. Para desactivar el comando anterior: >>hold off.
Otra forma de hacerlo es dibujar desde el principio dos graficas juntas, por ejemplo, se
dibujaran las graficas de las funciones y = sen(x) e y = sen(x + pi/3) en la misma figura:
Control Automático – Ing. Eléctrica
F.R. Tucumán – Universidad Tecnológica Nacional
Página 15 de 38
Ing. Juan Jesús Luna
Se generan las tablas,
>>x=linspace(0,2*pi,300);
>>y=sin(x);
>>z=sin(x+pi/3);
Y ahora se las dibuja
>>plot(x,y,'r-',x,z,'g--'),grid on
(La primera en color rojo, con trazo continuo, y la segunda en verde, con trazo
discontinuo).
- Etiquetado de graficas. Existen diversas posibilidades para el etiquetado de las
graficas. Se vera con un ejemplo:
>>x=linspace(-3,3,500); y=exp(-x.^2); z=2*exp(-x.^2);
>>plot(x,y,'-',x,z,'--') % dibujamos dos funciones
>>title('Campanas de Gauss')
>>xlabel('Eje de Abscisas') % Etiqueta el eje horizontal
>>ylabel('Eje de Ordenadas') % Etiqueta el eje vertical
>>legend('exp(-x^2)', '2*exp(-x^2)') % Pone una leyenda
Además de los comandos descritos antes para etiquetar graficas, existe la posibilidad de
poner un texto en algún otro lugar de la figura. Con el comando >>gtext('texto'), se
abrirá la figura y se podrá indicar con el ratón el lugar donde ha de ir el texto, que se
seleccionara con un clic.
- Obtención de puntos desde el grafico. Una vez que se ha realizado una grafica, se
puede necesitar conocer las coordenadas de algunos puntos de la misma. Por ejemplo, el
lugar aproximado en el que están los máximos y mínimos, o si se quiere añadir alguna
recta o una poligonal al dibujo. Para conseguir esto, se puede utilizar el comando
ginput. Escribiendo
>>[x,y]=ginput(N)
Donde N es el número de puntos cuyas coordenadas se quiere obtener. Después de
ejecutado el comando habrá que pulsar con el botón izquierdo del ratón sobre el dibujo
tantas veces como puntos se hayan especificado. Las coordenadas de esos puntos
quedaran almacenadas en las variables [x; y].
GRAFICAS 3D: Funciones de la forma z = f(x; y)
Para dibujar gráficos de funciones de dos variables z = f(x; y), al igual que para
funciones de una variable, en primer lugar hay que generar tablas de valores para las
variables x e y, en realidad, ahora lo que se tiene que hacer es generar un mallado sobre
un rectángulo del plano XY. Para eso se utiliza el comando meshgrid.
Por ejemplo, si se quiere dibujar la grafica de la función
Control Automático – Ing. Eléctrica
F.R. Tucumán – Universidad Tecnológica Nacional
Página 16 de 38
Ing. Juan Jesús Luna
en la región del plano -2 < x < 2; -2 < y < 2, habrá que efectuar los pasos siguientes: Se
genera el mallado
>>[x,y]=meshgrid(-2:.5:2);
Se sustituye en la función para calcular los valores de z
>>z=exp(-x.^2-y.^2);
Y ahora se puede dibujar el grafico con alguno de los siguientes comandos
>>plot3(x,y,z)
>>mesh(x,y,z)
>>surf(x,y,z)
>>surf(x,y,z),shading flat
%efecto de sombreado distinto
Manipulación de gráficos 3D
MALLADO. El comando meshgrid se puede utilizar también para generar mallados de
regiones rectangulares. Por ejemplo, si se quiere hacer un mallado para la región [0; 1] x
[0; 3], se tendrá que escribir
>>[x,y]=meshgrid(0:.1:1,0:.1:3);
La secuencia 0:.1:1 describe la variación de la variable x, y 0:.1:3 la de la variable y. Si
solo se utiliza un intervalo, este se aplica a las dos variables. También se puede utilizar
dentro de meshgrid el comando linspace.
SOMBRAS Y COLORES. Para conseguir efectos de sombreados y colores diferentes
se pueden consultar todas las posibilidades de los comandos colormap y shading. Algo
que resulta también interesante, es añadir una escala de colores al dibujo que permite
conocer las alturas (coordenada z) de los diferentes puntos de la grafica, esto se
consigue con el comando colorbar (después de dibujada la grafica).
Ejemplo: Utilizar la siguiente secuencia de comandos:
>>[x,y]=meshgrid(linspace(-1,1,50));
>>z=cos((x.*y)./(x.^2+y.^2+1));
>>surf(x,y,z),colorbar
Como se puede observar, los puntos más altos corresponden a los colores mas calientes
y los puntos más bajos de la grafica están coloreados con colores fríos.
EJES. Las longitudes de los ejes coordenados también se pueden modificar con el
comando axes.
>>axes([xmin xmax ymin ymax zmin zmax])
Los comandos grid on y axis square también funcionan en este tipo de gráficos.
Control Automático – Ing. Eléctrica
F.R. Tucumán – Universidad Tecnológica Nacional
Página 17 de 38
Ing. Juan Jesús Luna
ROTACION DE GRAFICAS. Otro comando interesante en las graficas 3D es
rotate3d, que permite, utilizando el ratón sobre la figura, rotarla de manera interactiva
en tres dimensiones.
CURVAS DE NIVEL. Dada una función z = f(x; y), las curvas sobre el plano XY,
determinadas por f(x; y) = k, donde k es una constante se llaman curvas de nivel. Hay
varias formas de obtenerlas usando MatLab.
Se representara la grafica de la función
dibujando algunas curvas de nivel. Se crea el mallado:
>>[x,y]=meshgrid(-2:.1:2);
Se sustituye en la función, para calcular los valores de z,
>>z=x.^2+y.^2;
Ahora, se puede dibujar la grafica utilizando alguno de los comandos descritos
anteriormente.
Las curvas de nivel se pueden hacer utilizando alguno de los comandos siguientes
>>contour(x,y,z,10)
>>contour3(x,y,z,10)
>>pcolor(x,y,z),colorbar
% dibuja 10 curvas de nivel
% lo mismo, pero en el espacio
Esta última orden dibuja un mapa de colores por niveles, la orden colorbar hace
aparecer una escala de valores según el color, es decir, indica el valor de la variable z,
como se describió antes.
Si se usa el comando contour, después se pueden etiquetar las curvas con los valores
correspondientes de la z. Para hacer esto: Primero se dibujan las curvas de nivel con
>>contour(x,y,z,10)
Después se guarda la información en una variable, por ejemplo,
>>cs=contour(x,y,z,30);
A continuación, se tienen dos opciones:
>>clabel(cs)
% etiqueta algunas aleatoriamente
O bien
>>clabel(cs,'manual')
% permite elegirlas con el ratón
Por otra parte, el comando >>meshc(x,y,z), dibuja la grafica, y por debajo, las curvas de
nivel (algunas veces será necesario modificar los ejes para que la grafica de la función
no tape a las curvas de nivel).
Control Automático – Ing. Eléctrica
F.R. Tucumán – Universidad Tecnológica Nacional
Página 18 de 38
Ing. Juan Jesús Luna
3.2 Ficheros de Comandos: Son archivos de texto con la extensión “.m” que ejecutan
línea a línea las ordenes y comandos que aparecen en el. Se pueden construir y
modificar con cualquier editor de texto. Para crearlo seleccionar FileNewM-File; se
abrirá el editor de archivos .m donde se pueden escribir los comandos MatLab, tal y
como se ejecutarían desde el editor de comandos. Ejemplo:
Ganancia_en_Sistemas_de_2_Orden
close all
w=logspace(-1,2,1000); % Vector de frecuencias
% Análisis de la influencia de la ganancia en la respuesta en
frecuencia de un sistema de 2º orden
psi = 0.1; wn=2;
for k=[0.5 1 2];
num=[k*wn^2]; den=[1 2*psi*wn wn^2];
figure(1), hold on
bode(num,den,w), grid minor
title('Influencia de la ganancia en la respuesta en frecuencia de
un sistema de 2º orden');
legend('K=0.5','K=1','K=2');
hold off
figure(2), hold on
step(num,den);grid minor
title('Influencia de la ganancia en la respuesta en el tiempo de
un sistema de 2º orden');
legend('K=0.5','K=1','K=2');
hold off
disp('Pulsa una tecla para continuar'), pause
end;
Para ejecutarlo, basta con escribir el nombre del archivo desde el editor de comandos.
Las variables definidas en el archivo Ganancia_en_Sistemas_de_2_Orden.m pasan a
formar parte de la colección de variables existentes en la sesión de MatLab, quedando
almacenadas en el workspace junto al resto de variables.
4 – Matemática simbólica:
MatLab permite la realización de cálculos de manera simbólica si previamente se
definen como símbolos las variables y funciones con las que se va a operar. Todos los
comandos se encuentran en la toolbox de matemática simbólica, incorporando un nuevo
tipo de dato en MatLab: el objeto simbólico (sym object). Las variables se han de
definir como símbolos mediante el comando syms. Las funciones se definen
directamente con el comando sym. Las expresiones o funciones creadas a partir de
variables simbólicas adquieren automáticamente el tipo de objeto simbólico.
Con variables y funciones simbólicas se puede realizar todo tipo de calculo: diferencial,
integral y matricial; también es posible la resolución de ecuaciones simbólicas y
diferenciales, y la obtención de distintas transformadas como la de Fourier, Laplace o Z.
Ejemplo:
>>syms s z
>>G1s=1/(s+1);
>>G2s=2*s/(s^2+s+1);
% s y z son variables simbólicas
% G1s es una función simbólica de la variable s
% G2s es una función simbólica de la variable s
Control Automático – Ing. Eléctrica
F.R. Tucumán – Universidad Tecnológica Nacional
>>G12s=G1s+G2s
Página 19 de 38
Ing. Juan Jesús Luna
% suma simbólica
G12s =
1/(s+1)+2*s/(s^2+s+1)
>>pretty(G12s)
1
s
----- + 2 ---------s+1
2
s +s+1
El comando pretty es útil cuando MatLab devuelve un resultado de difícil interpretación
en una sola línea.
>>G12s=simplify(G12s)
G12s =
(3*s^2+3*s+1)/(s+1)/(s^2+s+1)
El comando simplify sirve para expresar como cociente de polinomios de la variable
simbólica s.
>>pretty(G12s)
2
3s +3s+1
-------------------2
(s + 1) (s + s + 1)
Se pueden obtener dos variables simbólicas que contengan las ecuaciones del
numerador y denominador de la función mediante el comando numden.
>>[n d]=numden(G12s)
%n y d son variables simbólicas
n=
3*s^2+3*s+1
d=
(s+1)*(s^2+s+1)
También es posible resolver funciones simbólicas con el comando solve.
>>ceros=solve(n)
ceros =
-1/2+1/6*i*3^(1/2)
-1/2-1/6*i*3^(1/2)
%calcula las raíces del numerador n
Control Automático – Ing. Eléctrica
F.R. Tucumán – Universidad Tecnológica Nacional
>>polos=solve(d)
polos =
-1
-1/2+1/2*i*3^(1/2)
-1/2-1/2*i*3^(1/2)
Página 20 de 38
Ing. Juan Jesús Luna
%calcula las raíces del denominador d
La representación grafica de funciones simbólicas en MatLab se puede realizar
mediante el comando ezplot. Puede especificarse el rango de variación que toma la
variable. Ejemplo:
>>syms t;
>>y2s=5*t^2
>>ezplot(y2s, [0,6])
% definición de t como símbolo
% definición de la función simbólica y2s
% representación grafica de y2s en el rango 0-6
4 - Modelado de Señales: Para realizar simulaciones en MatLab que permitan analizar el
comportamiento de los sistemas, es necesario definir las señales que intervienen
(Entrada de Referencia y Perturbaciones principalmente), así como las funciones de
transferencia de los sistemas (actuadores, reguladores, sensores y modelo del proceso).
4.1 – Señales Elementales: En primer lugar se crea un vector de tiempo acotado en un
intervalo determinado; después se define la forma de la señal (También mediante un
vector que contiene los valores de la amplitud).
4.1.1 – Escalón Unitario:
>> t=0:0.1:1;
% Valor Inicial: Intervalo: Valor Final
O
>>t=linspace(0,1,11);
% Valor Inicial, Valor Final, Numero de Elementos
>>escalon=ones(1,11);
% Se indica Nº de Filas, Nº de Columnas
O
>>escalon=linspace(1,1,11);% Valor Inicial, Valor Final, Numero de Elementos
>>plot(t,escalon)
4.1.1 – Rampa:
>>rampa=t;
>>plot(t,rampa)
4.1.3 – Parábola:
>>parabola=t.^2;
>>plot(t,parabola)
Las señales también se pueden definir mediante funciones simbólicas, para ello basta
con definir la variable tiempo como un símbolo en vez de cómo un vector; de esta
forma, todas las señales construidas con el tiempo simbólico pasaran a ser funciones
simbólicas:
>>escalon_s=sym('1');
>>syms t_s;
Control Automático – Ing. Eléctrica
F.R. Tucumán – Universidad Tecnológica Nacional
Página 21 de 38
Ing. Juan Jesús Luna
>>rampa_s=t_s;
>>parabola_s=0.5*(t_s)^2;
>>ezplot(escalon_s)
>>grid on
>>hold on
>>ezplot(rampa_s)
>>ezplot(parabola_s,[0,6])
4.2 - Transformada de Laplace usando MatLab: El comando laplace permite calcular la
transformada de Laplace de expresiones definidas de forma simbólica, devolviendo otra
expresión simbólica en la variable s. Por ejemplo:
>>syms a t
>>L = laplace(exp(-a*t))
Estos comandos devuelven en la variable L la expresión simbólica de la transformada
de Laplace de la función:
que resulta ser la expresión ya conocida 1/(s+a).
NOTA: observe que el comando laplace calcula la transformada unilateral.
Otro ejemplo:
>>syms f t
>> f=t;
>> laplace(f)
ans =1/s^2
donde f y t son las variables simbólicas, f la función, t la variable tiempo.
Otro ejemplo:
>> syms t s
>> F=laplace(f,t,s)
Para hacer más legible la expresión puede usarse el comando pretty. El siguiente es un
ejemplo de función f(t):
>> syms t s
>> f=-1.25+3.5*t*exp(-2*t)+1.25*exp(-2*t);
>> F=laplace(f,t,s)
F=
(s-5)/s/(s+2)^2
Control Automático – Ing. Eléctrica
F.R. Tucumán – Universidad Tecnológica Nacional
Página 22 de 38
Ing. Juan Jesús Luna
>> pretty(F)
s–5
;
s (s + 2)^2
la cual corresponde a la F(s):
Alternativamente, se puede escribir la función f(t) directamente como parte del
comando laplace:
>>F2=laplace(-1.25+3.5*t*exp(-2*t)+1.25*exp(-2*t))
Utilizando el comando eval es posible particularizar una expresión
simbólica. Por ejemplo:
>>syms t
>>L = laplace(exp(t))
>>s = 5 + j
>>eval(L)
matemática
%Se define el punto en el que se quiere particularizar
%Se calcula el valor en dicho punto
Estos comandos devuelven el valor de la transformada de Laplace de la función
particularizada en el punto s = 5 + j. Observe que el comando eval utiliza el valor que la
variable s tenga en el momento de su llamada.
4.3 - Transformada Inversa de Laplace: El comando que se usa es ahora ilaplace.
También se necesita definir los símbolos t y s.
Para calcular la inversa de la función F(s) anterior:
>> syms t s
>> F=(s-5)/(s*(s+2)^2);
>> ilaplace(F)
ans =
-5/4+1/4*exp(-2*t)*(5+14*t)
Se puede usar el comando simplify para simplificar la respuesta:
>> simplify(ans)
ans =
-5/4+7/2*t*exp(-2*t)+5/4*exp(-2*t)
Control Automático – Ing. Eléctrica
F.R. Tucumán – Universidad Tecnológica Nacional
Página 23 de 38
Ing. Juan Jesús Luna
>> pretty(ans)
-5/4 + 7/2 t exp(-2 t) + 5/4 exp(-2 t)
La cual corresponde a la f(t):
Alternativamente se puede escribir:
>> ilaplace((s-5)/(s*(s+2)^2))
Otro ejemplo:
>> F=10*(s+2)/(s*(s^2+4*s+5));
>> ilaplace(F)
ans =
4+2*(-2*cos(t)+sin(t))*exp(-2*t)
4.4 - Transformada Inversa de Laplace usando Expansión en Fracciones Parciales: Se
busca encontrar la Expansión en Fracciones Parciales de:
El siguiente programa de MatLab da los coeficientes en la expansión. Escribir los
coeficientes del numerador y del denominador en vectores separados y MatLab le da los
coeficientes que corresponden a los polos en la expansión:
>> n=[0 0 4 4 4];
>> d=[1 3 2 0 0];
>> [r,p,k]=residue(n,d)
r=
-3
4
-1
2
Control Automático – Ing. Eléctrica
F.R. Tucumán – Universidad Tecnológica Nacional
Página 24 de 38
Ing. Juan Jesús Luna
p=
-2
-1
0
0
Entonces, la expansión en fracciones parciales es:
5 – Modelado de Sistemas Lineales:
Los sistemas continuos o LTI (Linear Time Invariant) se expresan a través de su
Función de Transferencia. Este tipo de función se define en el plano complejo y
depende de la variable s. La Función de Transferencia puede expresarse como cociente
de polinomios (formato tf) o en función de las raíces del numerador y denominador, que
reciben el nombre de ceros y polos respectivamente (formato zpk). De este modo, las
expresiones de las funciones de transferencia de un sistema son:
La creación de sistemas a través de su Función de Transferencia es el paso previo para
cualquier simulación o análisis posterior que se quiera realizar en MatLab.
5.1 Definición de funciones de transferencia: Existen dos procedimientos para definir
las funciones de transferencia de los sistemas, a través de los comandos definidos para
tal fin, tf y zpk, o mediante la construcción directa de su expresión. Los sistemas LTI así
definidos tienen internamente una serie de propiedades que podrán ser consultadas y/o
modificadas: numerador, denominador, ceros, polos, etc.
5.1.1 Construcción mediante comandos:
Comando tf: Sirve cuando la F. de T. esta expresada como cociente de polinomios; se le
pasan dos vectores con los coeficientes en s del numerador y del denominador (deben ir
ordenados desde el elemento de mayor potencia al de menor, añadiendo un cero en el
caso de no existir). Ejemplo:
Control Automático – Ing. Eléctrica
F.R. Tucumán – Universidad Tecnológica Nacional
Página 25 de 38
Ing. Juan Jesús Luna
>>num = [1 0];
% Numerador: s
>>den = [1 2 10]; % Denominador: s^2 + 2 s + 10
>>H = tf(num,den)
Comando zpk: Sirve cuando la F. de T. esta expresada en función de los polos y ceros
del sistema; se le pasan tres vectores que contengan las posiciones de los ceros (z), las
de los polos (p) y el factor de ganancia (k), en ese orden. Ejemplo: Suponga la siguiente
F. de T.:
>>z = 0;
>>p = [2 1+i 1-i];
>>k = -2;
>>H = zpk(z,p,k)
% ceros
% polos
% ganancia
En un sistema que no contenga ceros, el vector correspondiente (z) debe estar vacío,
indicándose con [ ]. Ejemplo:
>> p = [-1 -6 -8];
>>G=zpk([ ],p,20)
% vector de polos
% construccion de G(s) sin ceros y K=20
5.1.2 Construcción directa: Si se define previamente la variable s como un objeto tf, se
pueden construir las F. de T. sin hacer uso de los comandos vistos anteriormente.
Ejemplo:
>>s = tf ('s');
% Crear variable de Laplace
>>H = s / (s^2 + 2*s + 10)
Otro ejemplo:
>>s = zpk('s');
>>H = -2*s / (s - 2) / (s^2 - 2*s + 2)
5.1.3 Sistemas de Segundo Orden: La F. de T. de un sistema de segundo orden se puede
construir directamente con el comando ord2 a partir de los parámetros Psi (Coeficiente
de Amortiguamiento) y Wn (Frecuencia Natural). El comando devuelve los polinomios
del numerador y del denominador de la función. Ejemplo:
>>[n d]=ord2(1,0.7)
>>G=tf(n,d)
5.1.4 Sistemas con Retardo Puro:
Las funciones de transferencia de sistemas que incluyen algun retardo del tipo
se
construyen con los mismos comandos, añadiendo el tiempo del retardo en la propiedad
'Input Delay'. Ejemplo:
>>G=tf(1,[0.5 1], 'inputdelay', 0.5)
Control Automático – Ing. Eléctrica
F.R. Tucumán – Universidad Tecnológica Nacional
Página 26 de 38
Ing. Juan Jesús Luna
Que se corresponde con la F. de T.:
En determinadas ejecuciones de MatLab, el retardo en la F. de T. de un sistema generara
errores debido al carácter no lineal del termino
. Un ejemplo de ello sucedería al
intentar calcular la F. de T. equivalente en Lazo Cerrado de un sistema con retardo. Para
evitarlo, se puede realizar una aproximación mediante el desarrollo de Padé y
convertirlo en una función racional de la forma:
El comando de MatLab que realiza esta aproximación pade, al que se le pasan los
argumentos la F. de T. con retardo y el numero de términos de los que constara la serie
con la que se desea realizar la aproximación.
>>G_aprox1=pade(G,1)
>>G_aprox2=pade(G,2)
%aproximación con orden uno de truncamiento
%aproximación con orden dos de truncamiento
5.2 - Conversión de Modelos: Matlab permite que los distintos modelos puedan ser
convertidos entre sí, de modo que, por ejemplo, se pueda obtener la forma factorizada
de la función de transferencia cero-polo-ganancia, partiendo de la forma de cociente de
polinomios.
Función: residue: La función residue convierte la función de transferencia polinómica:
en la función transferencia de fracciones parciales:
Instrucción:
>>[r,p,k] = residue (B,A)
Esta instrucción determina los vectores r, p, y k de los valores de residuo (r1, r2,..., rn),
los polos (p1, p2,..., pn) y los términos directos de la expansión de fracciones parciales.
Las entradas son los coeficientes de los polinomios B (b0, b1,..., bn-1), numerador de la
expresión polinómica y A (a0, a1,..., am-1), denominador de la expresión polinómica.
Ejemplo: Calcular la función de transferencia de fracciones parciales de la siguiente
función de transferencia polinómica:
Control Automático – Ing. Eléctrica
F.R. Tucumán – Universidad Tecnológica Nacional
Página 27 de 38
Ing. Juan Jesús Luna
>>% Calcular expansión de fracciones parciales.
>>B=[1,2,3];
>>A=[1,3,3,1];
>>[r,p,k]= residue (B,A);
>>r
r=
1.0000
-0.0000
2.0000
>>p
p=
-1.0000
-1.0000
-1.0000
Por lo tanto la solución de este Ejemplo es:
Función tf2z: La función tf2zp convierte la función de transferencia polinómica:
en la función transferencia cero-polo-ganancia:
Instrucción:
>>[z,p,k] = tf2zp (num,den)
Esta instrucción determina los ceros (z1, z2, … , zm), los polos (p1, p2,..., pn) y la
ganancia correspondiente (k) de la función de transferencia del tipo cero-polo-ganancia.
Las entradas son los coeficientes en orden descendente de potencias de s del numerador
y denominador de la función de transferencia polinómica a convertir.
Ejemplo: Calcular la función de transferencia cero-polo-ganancia de la siguiente
función de transferencia polinómica:
Control Automático – Ing. Eléctrica
F.R. Tucumán – Universidad Tecnológica Nacional
Página 28 de 38
Ing. Juan Jesús Luna
>>% Conversión de función de transferencia en cero-polo-ganancia
>>num=[1,2,3];
>>den=[1,3,3,1];
>>[z,p,k]=tf2zp(num,den)
z=
-1.0000 + 1.4142i
-1.0000 - 1.4142i
p=
-1.0000
-1.0000 + 0.0000i
-1.0000 - 0.0000i
k=
1
Por lo tanto la solución de este Ejemplo es:
Función zp2tf: La función zp2tf convierte la función de transferencia cero-pologanancia:
en la función transferencia polinómica:
Instrucción:
>>[num,den] = zp2tf (z,p,k)
Esta instrucción determina los vectores num y den de los coeficientes en orden
descendente de potencias de s del numerador y denominador de la función de
transferencia polinómica a obtener.
Las entradas son los vectores z, de los ceros (z1, z2, … , zm), p, de los polos (p1, p2,...,
pn) y la ganancia correspondiente (k) de la función de transferencia del tipo cero-pologanancia.
Ejemplo: Calcular la función de transferencia polinómica de la siguiente función de
transferencia cero-polo-ganancia:
>>% Conversión de función de transferencia en forma polinómica
>>z=[-1.0000 + 1.4142i;-1.0000 - 1.4142i];
>>p=[-1;-1;-1];
>>k=1;
>>[num,den]=zp2tf(z,p,k)
Control Automático – Ing. Eléctrica
F.R. Tucumán – Universidad Tecnológica Nacional
Página 29 de 38
Ing. Juan Jesús Luna
num =
0 1.0000 2.0000 3.0000
den =
1331
Por lo tanto la solución de este Ejemplo es:
5.3 - Reducción de diagrama de bloques con MatLab: MatLab dispone de un amplio
abanico de programas especializados de apoyo. Adicionalmente, existen comandos en
MATLAB que facilitan la labor, tediosa en ocasiones, de reducir una representación en
diagramas de bloques.
Estos incluyen funciones para realizar:
- Conexiones en serie y en paralelo (series y parallel)
- Conexiones de realimentación (feedback y lft)
- Concatenaciones de entrada y salida ([ , ] , [ ; ] , y append)
- Construcción general de diagrama de bloques (connect).
Estas funciones pueden manejar cualquier combinación de las representaciones del
modelo. Con fines ilustrativos, crear los siguientes dos modelos SISO de función de
transferencia:
>>H1 = tf(2,[1 3 0])
>>H2 = zpk([ ],-5,5)
Conexión en serie
Usar el operador * o la función series para conectar modelos LTI en serie, por ejemplo:
>>H = H2 * H1
o equivalentemente:
>>H = series(H1,H2)
Control Automático – Ing. Eléctrica
F.R. Tucumán – Universidad Tecnológica Nacional
Página 30 de 38
Ing. Juan Jesús Luna
Conexión en paralelo
Use el operador + o la función parallel para conectar los modelos LTI en paralelo, por
ejemplo:
>>H = H1 + H2
o equivalentemente
>>H = parallel(H1,H2)
Conexiones de Realimentación: La configuración de realimentación estándar se muestra
a continuación:
Para construir un modelo de la transferencia a lazo cerrado de la u a la y, tipee:
>>H = feedback(H1,H2)
Tenga en cuenta que feedback supone la realimentación negativa de forma
predeterminada. Para aplicar la realimentación positiva, utilice la siguiente sintaxis:
>>H = feedback(H1,H2,+1);
Se puede utilizar Matlab para la reducción de diagrama de bloques. Se dispone de tres
métodos:
1.) Solución a través de los comandos series, parallel y feedback.
2.) Solución mediante operaciones algebraicas.
3.) Solución mediante los comandos append y connect.
Para mejor entendimiento de cada una de las funciones utilizadas en la práctica se
recomienda utilizar la ayuda de MatLab.
Control Automático – Ing. Eléctrica
F.R. Tucumán – Universidad Tecnológica Nacional
Página 31 de 38
Ing. Juan Jesús Luna
Ejemplo: Teniendo el diagrama de bloques de la figura se quiere reducir.
1. Solución a través de los comandos Series, Parallel y Feedback
>>% Solución a través de los comandos Series, Parallel y Feedback
>>numg1=[-1]; deng1=[1]; G1=tf(numg1,deng1); % Crea F. de T. G1(s)
>>numg2=[0 2]; deng2=[1 2]; G2=tf(numg2,deng2); % Crea F. de T. G2(s)
>>numg3=-0.125*[1 0.435]; deng3=conv([1 1.23],[1 0.226 0.0169]);
>>G3=tf(numg3,deng3);
% Crea F. de T. G3(s)
>>numh1=[-1 0]; denh1=[0 1]; H1=tf(numh1,denh1);% Crea F. De T. H1(s).
>>G4=series(G2,G3);
% Calcula producto
>>G5=feedback(G4,H1); % Calcula retroalimentación
>>Ge=series(G1,G5);
% Calcula producto
>>T=feedback(Ge,1)
% Calcula retroalimentación
Transfer function:
0.25 s + 0.1088
----------------------------------------------------------s^4 + 3.456 s^3 + 3.457 s^2 + 0.9693 s + 0.1503
2.) Solución a través de operaciones algebraicas
>>% Solución a través de operaciones algebraicas
>>clear
% Limpia variables.
>>numg1=[-1]; deng1=[1]; G1=tf(numg1,deng1); % Crea F. de T. G1(s)
>>numg2=[0 2]; deng2=[1 2]; G2=tf(numg2,deng2); % Crea F. de T. G2(s)
>>numg3=-0.125*[1 0.435]; deng3=conv([1 1.23],[1 0.226 0.0169]);
>>G3=tf(numg3,deng3);
% Crea F. de T. G3(s)
>>numh1=[-1 0]; denh1=[0 1]; H1=tf(numh1,denh1);% Crea F. De T. H1(s).
>>G4=G3*G2;
% Calcula producto.
>>G5=G4/(1+G4*H1);
% Calcula realimentación.
>>G5=minreal(G5);
% Cancela términos comunes.
>>Ge=G5*G1;
% Multiplica las F.T. de los lazos internos.
>>%T(s) a través de operaciones algebraicas
>>T=Ge/(1+Ge);
% F.T. de lazo cerrado.
>>T=minreal(T)
% Cancela términos comunes.
Se comprueba que se llega al mismo resultado que usando el Método 1.
Control Automático – Ing. Eléctrica
F.R. Tucumán – Universidad Tecnológica Nacional
Página 32 de 38
Ing. Juan Jesús Luna
3.) Solución con los comandos Append y Connect: Para diagramas de bloques más
complicados, la función connect ofrece una forma sistemática y sencilla para conectar
los bloques entre sí. Para usar connect , siga estos pasos:
- Definir todos los bloques del diagrama, incluidos los sumadores.
- Nombrar todos los canales de entradas y de salidas del bloque.
- Seleccione el diagrama de bloques de E/S de la lista de bloque de E/S.
>>% Solución a través de connect. Definir todos los bloques y sumadores
>>clear
% Limpia variables.
>>numg1=[-1]; deng1=[1]; G1=tf(numg1,deng1); % Crea F. de T. G1(s)
>>numg2=[0 2]; deng2=[1 2]; G2=tf(numg2,deng2); % Crea F. de T. G2(s)
>>numg3=-0.125*[1 0.435]; deng3=conv([1 1.23],[1 0.226 0.0169]);
>>G3=tf(numg3,deng3);
% Crea F. de T. G3(s)
>>numh1=[-1 0]; denh1=[0 1]; H1=tf(numh1,denh1);% Crea F. De T. H1(s).
>>G1.InputName = 'iG1'; G1.OutputName = 'oG1';
>>G2.InputName = 'iG2'; G2.OutputName = 'oG2';
>>G3.InputName = 'oG2'; G3.OutputName = 'y';
>>H1.InputName = 'y'; H1.OutputName = 'oH1';
>>% Definir los Sumadores
>>Sum1 = sumblk('iG1','r','y','+-');
>>Sum2 = sumblk('iG2','oG1','oH1','+-');
>>% Calcular Funcion de Transferencia r y
>>T = connect(G1,G2,G3,H1,Sum1,Sum2,'r','y')
Transfer function from input "r" to output "y":
0.25 s + 0.1087
----------------------------------------------------------s^4 + 3.456 s^3 + 3.457 s^2 + 0.9693 s + 0.1503
Se comprueba que se llega al mismo resultado que usando los Métodos 1 y 2.
Otro ejemplo: Se analiza un ejemplo más complicado: Sea el siguiente Diagrama de
Bloques:
Para el diagrama de bloques anterior, los pasos serian (Se supone que ya están definidos
F, C, G y S):
Control Automático – Ing. Eléctrica
F.R. Tucumán – Universidad Tecnológica Nacional
Página 33 de 38
Ing. Juan Jesús Luna
>>% Definir las Entradas y las Salidas de los Bloques
>>F.InputName = 'r'; F.OutputName = 'uf ';
>>C.InputName = 'e'; C.OutputName = 'uc';
>>G.InputName = 'u'; G.OutputName = 'ym';
>>S.InputName = 'ym'; S.OutputName = 'y';
>>% Definir los Sumadores
>>Sum1 = sumblk('e','r','y','+-');
>>Sum2 = sumblk('u','uc','uf');
>>% Calcular Funcion de Transferencia r -> ym
>>T = connect(F,C,G,S,Sum1,Sum2,'r','ym');
>>step(T), grid
Ejercicio: Encontrar la Función de Transferencia Y(s)/R(s) del siguiente Diagrama de
Bloques.
6 – Análisis Dinámico: Control System Toolbox proporciona un amplio conjunto de
funciones para el análisis de los modelos LTI. Una vez que se han definido todos y cada
uno de los bloques que forman el sistema, a través de su F. de T. (como objetos tf o
zpk), es posible calcular algunas de sus características (polos, ceros, ganancia estática,
etc.), así como obtener la evolución de la salida ante distintos tipos de entrada (respuesta
al impulso, al escalón unitario, etc.), estudiar el comportamiento en Lazo Cerrado
(Lugar de las Raíces) y determinar su comportamiento frecuencial (Diagramas de Bode,
de Nyquist y de Nichols). A lo largo del apartado se usaran sistemas cuya F. de T. son:
6.1 – Extracción de características:
6.1.1 – Obtención de los Polos: Se usa el comando pole.
>>G1=tf(2,[1 2])
>>G2=tf(9,[1 1.5 9])
>>polosG2=pole(G2)
% definición de G1(s)
% definición de G2(s)
% obtención de los polos de G2(s)
6.1.2 – Obtención de los Ceros: Se usa el comando zero.
>>cerosG2=zero(G2)
% obtención de los ceros de G2(s)
6.1.3 - Obtención de la Ganancia Estática: Se usa el comando dcgain.
>>K=dcgain(G2)
% Ganancia de G2 cuando s = 0
Control Automático – Ing. Eléctrica
F.R. Tucumán – Universidad Tecnológica Nacional
Página 34 de 38
Ing. Juan Jesús Luna
6.1.4 – Obtencion de Psi y Wn: Se usa el comando damp. (Wn en Radianes/Segundo).
>>[frec amtg]=damp(G2)
Con damp también se puede conocer la ubicación de los polos poniendo una tercera
variable:
>>[frec amtg polos]=damp(G2)
6.1.5 – Estabilidad Absoluta: Se puede preguntar si este sistema es estable (1) o no (0):
>>isstable(G2)
6.2 – Respuestas de Sistemas Continuos: Para analizar el comportamiento transitorio y
permanente de la respuesta de los sistemas, MatLab permite realizar directamente
simulaciones ante dos tipos de entrada: El Impulso (impulse) y el Escalón Unitario
(step). Las graficas generadas muestran la respuesta del sistema y son interactivas con el
ratón, pudiéndose leer el valor de la señal en cualquier punto de la misma. También es
posible determinar automáticamente los valores de las características estáticas y
dinámicas mas usuales (Tiempo de Pico, Sobre Oscilación, Valor Final, etc.)
6.2.1 – Respuesta al Impulso:
>>impulse(G2)
>>title('Respuesta Impulsional')
>>ylabel('Amplitud')
>>xlabel('Tiempo')
6.2.2 – Respuesta al Escalón Unitario:
>>step(G2)
6.2.3 – Respuestas de varios sistemas: Se pueden obtener simulaciones de varios
sistemas sobre una misma grafica, incorporando al comando las F. de T. separadas por
comas. También se puede especificar un tiempo para la simulación, indicándolo con un
valor numérico dentro del comando a la derecha de las F. de T.
>>impulse(G1,G2,4) % Impulso sobre G1(s) y G2(s), 4 Segundos de simulación
6.2.4 – Mediciones sobre la respuesta: Es posible medir con el ratón el valor de la
respuesta en cualquier punto de la misma, desplegándose una ventana de texto que
identifica la respuesta y los valores de tiempo y amplitud en el punto seleccionado en la
grafica. No obstante, se pueden obtener los valores exactos de algunas características de
la respuesta de manera automática. Para ello, basta con seleccionar con el botón derecho
del ratón sobre la grafica generada alguna de las características (Characteristics)
mostradas a continuación:
Peak Response: Respuesta Pico
Amplitud del Pico Máximo
Sobre Oscilación, Mp (en %)
Tiempo de Pico, tp
Control Automático – Ing. Eléctrica
F.R. Tucumán – Universidad Tecnológica Nacional
Página 35 de 38
Ing. Juan Jesús Luna
Settling Time: Tiempo de Establecimiento
Tiempo de Establecimiento, ts
Rise Time: Tiempo de Subida o de Crecimiento
Tiempo de Subida, tr
Steady State: Estado Estable o Respuesta Permanente
Nota: Los tiempos de establecimiento ts y de subida tr son configurables seleccionando,
con el botón derecho, la opción PropertiesOptions.
6.2.5 – Respuesta ante cualquier tipo de entrada: Se obtiene mediante el comando lsim.
Los parámetros que se le pasan son la F. de T. del sistema, seguido de los vectores de
amplitud y tiempo que forman la señal de entrada. Ejemplo:
>>t=0:0.1:10;
>>x1=t.^2;
>>lsim(G1,x1,t)
% Vector de Tiempo
% Señal Parabólica
% Obtención de la respuesta
Otro ejemplo:
>>x2=t;
>>lsim(G2,x2,t)
% Señal Rampa
% Obtención de la respuesta
6.3 – Representación de Polos y Ceros: Las posiciones que ocupan los polos y ceros de
un sistema en el plano complejo determinan modos transitorios que puede resultar
interesante conocer para el análisis y / o diseño de los sistemas. Por otro lado, brindan
información valiosa para determinar la estabilidad del sistema. El comando pzmap sirve
para obtener la grafica de polos y ceros en el plano complejo. Ejemplo: Suponga la
siguiente F. de T.:
>>c=roots([1 1 0.5]);
% Obtención de raíces de s^2+s+0.5
>>p=roots([1 4 13]);
% Obtención de raíces de s^2+4s+13
>>G3=zpk([1 c(1) c(2)],[0 -1 -5 p(1) p(2) ], 1)
% Obtención de G3
>>pzmap(G3)
% Grafica de polos y ceros de G3(s)
>>axis([-6 2 -4 4])
% Escalado de ejes
>>sgrid
% Activación de rejilla en el plano s
El comando sgrid superpone en una rejilla con líneas igual valor para Psi (Coeficiente
de Amortiguamiento) y para Wn (Frecuencia Natural); permitiendo así determinar estos
parámetros para cada polo del sistema.
6.4 – El Lugar de las Raíces: Así como es importante conocer las posiciones de los
polos y ceros en lazo abierto, también los es saber cual va a ser la evolución de los polos
cunado el sistema va a trabajar en lazo cerrado y predecir el efecto que puede producir
la variación de algún parámetro del sistema (generalmente el factor de ganancia K). De
esta forma, se puede saber como va a ser el funcionamiento global del sistema y estudiar
cualquier posibilidad de inestabilidad sobre el mismo. Este análisis se lleva a cabo
Control Automático – Ing. Eléctrica
F.R. Tucumán – Universidad Tecnológica Nacional
Página 36 de 38
Ing. Juan Jesús Luna
mediante el Lugar de la Raíces y en MatLab se puede obtener fácilmente mediante el
comando rlocus.
Este comando se ejecuta pasándole como parámetro el objeto tf que contiene la F. de T.
del lazo abierto; su resultado es una grafica con las trayectorias que seguirán los polos
del sistema en lazo cerrado. Sobre esta grafica, y con el ratón, se puede medir cualquier
punto del lugar, obteniendo información de la posición del polo en ese punto, el factor
de ganancia que se puede añadir al sistema para alcanzar esa posición, y de los
parámetros dinámicos como la Frecuencia natural Wn, el Coeficiente de
Amortiguamiento Psi y la Sobre Oscilación Mp (en %). Ejemplo: Suponer la siguiente
F. de T.:
>>G4=tf(18,[1 3.5 12 18])
>>rlocus(G4)
% Construcción de G4(s)
% Obtención del Lugar de las Raíces
Para determinar el Lugar de las Raíces solo en un determinado rango de valores de K,
basta con incluir en el comando un vector con los valores inicial y final de la ganancia.
>>rlocus(G4, [0,5])
% L. de R. para valores de K entre 0 y 5
7 – Análisis Frecuencial: Cuando se trabaja con señales de entrada de tipo senoidal, se
recurre al análisis frecuencial para estudiar el comportamiento de los sistemas en
régimen permanente. Este análisis permite ver como se propaga la señal a través del
sistema, siendo especialmente útil en el diseño de filtros. La salida de un sistema
excitado con una onda senoidal proporcionara a la salida una señal también senoidal en
la que su amplitud y fase en general varían respecto de la señal de entrada.
A través del cambio s = jw, se convierte una F. de T. G(s) de dominio continuo, en una
función G(jw) en el dominio de la frecuencia. Aplicando esta transformación a lo largo
de un intervalo de frecuencias, se obtendrá la evolución del modulo y la fase de la salida
del sistema. Este tipo de información se suele representar gráficamente mediante
distintos diagramas frecuenciales que se estudiaran seguidamente.
7.1 – Representación grafica de la respuesta en frecuencia: La forma de analizar el
comportamiento en frecuencia de un sistema consiste en descomponer la señal de salida
del mismo en sus dos componentes: modulo y fase. Si el rango de variación de la
frecuencia empleada se expresa en escala natural, se obtendrán dos graficas que se
conocen como Diagramas de Módulos y Fases. El comando freqresp permite visualizar
estos tipos de diagramas; hay que definir la F. de T. del sistema y el vector
correspondiente al rango de frecuencias de interés. Ejemplo:
>>G1=tf(1,[1 1.4 1])
>>w=linspace(0.1,20,100);
>>y1=freqresp(G1,w);
>>mod_y1=abs(y1);
>>fas_y1=angle(y1);
>>mod_y1=mod_y1(:,:);
>>fas_y1=fas_y1(:,:);
>>plot(w,mod_y1)
>>xlabel('rad/seg')
% Definición de G1(s)
% Vector de frecuencia de 0.1 a 20 rad/seg
% Respuesta en frecuencia
% Modulo de la respuesta
% Fase de la respuesta (en radianes)
% Conversión de Vector 3D a 1D
% Conversión de Vector 3D a 1D
% Representación del Modulo
Control Automático – Ing. Eléctrica
F.R. Tucumán – Universidad Tecnológica Nacional
>>ylabel('Modulo')
>>figure
>>plot(w,fas_y1)
>>xlabel('rad/seg')
>>ylabel('Fase(rad)')
Página 37 de 38
Ing. Juan Jesús Luna
% Representación de Fase (en radianes)
7.2 – Diagramas de Bode: Cuando en los diagramas de módulos y fases la frecuencia se
expresa en escala logarítmica se obtiene el Diagrama de Bode, cuya representación
grafica es la más empleada en todo análisis frecuencial. Estos permiten determinar
algunos parámetros importantes de los sistemas, como son las Frecuencias de Corte y el
Ancho de Banda, así como analizar la Estabilidad Relativa de los mismos. El comando
bode permite obtener los diagramas de módulos y fases a partir de la F. de T. G(s),
definida como un objeto tf o zpk. Los diagramas se representan en escala logarítmica,
expresando el modulo en decibelios (db) y la fase en grados en un intervalo de
frecuencias ajustadas automáticamente. Ejemplo:
>>G2=tf(9,[1 1.5 9])
>>bode(G2)
>>grid on
% definición de G2(s)
% Obtención del Diagrama de Bode
% Activa rejilla sobre la grafica
Si se desea representar el Diagrama de Bode en un rango determinado de frecuencias,
estas se pasaran al comando entre llaves, indicando los valores mínimo y máximo de
frecuencia. Ejemplo:
>> bode(G2,{1,10})
>>grid on
% Rango de Frecuencias entre 1 y 10 rad/seg
% Activa rejilla sobre la grafica
Del Diagrama de Bode se puede obtener información útil para analizar la Estabilidad
Relativa de los sistemas realimentados. Mediante el comando margin es posible
determinar los parámetros de Margen de Ganancia (en db), Margen de Fase (en grados)
y las respectivas Frecuencias de Cruce de Ganancia y de Fase del sistema realimentado.
>>margin(G2)
% Bode + indicación de Margen de Ganancia y de Fase
7.3 – Diagrama Polar o de Nyquist: Es un vector representado en el plano complejo, que
resulta de variar la frecuencia en G(jw). El comando nyquist permite obtener dicho
diagrama, se le debe pasar como argumento el objeto tf o zpk del sistema. En la abscisa
se muestra la parte real y en la ordenada la parte imaginaria de la respuesta G(jw). Sobre
la grafica se indica marcado con color rojo el punto crítico de estabilidad. Ejemplo:
>>nyquist(G2)
>>grid on
La activación de la rejilla sobre el diagrama de Nyquist muestra los círculos de modulo
constante (en db) en lazo cerrado.
7.4 – Diagramas Modulo-Fase o de Nichols: El comando nichols permite obtener dicho
diagrama, en la abscisa se muestra la Fase (en grados) y en la ordenada el Modulo (en
db). Mediante la activación de la rejilla, aparecen las curvas de Modulo y Fase constante
Control Automático – Ing. Eléctrica
F.R. Tucumán – Universidad Tecnológica Nacional
Página 38 de 38
Ing. Juan Jesús Luna
en lazo cerrado (Ábaco de Nichols). Sobre la grafica se indica el punto critico de
estabilidad (0db, 180º) marcado en color rojo. Ejemplo:
>>nichols(G2)
>>grid on
Descargar