38
INTRODUCCIÓN MATLAB (Matrix Laboratory) es un programa matemático creado en la empresa Math Works de los estados unidos que manipula matrices y vectores ágilmente. MATLAB está compuesto por: un ambiente de desarrollo; una librería de funciones matemáticas; un lenguaje específico de alto nivel; gráficos para la representación de información en dos y tres dimensiones; procesamiento de imagen y animación; un API para interfaces externas para comunicar al programa con otros programas. Adicionalmente cuenta con documentación en línea constituida por tutoriales, ejemplos y referencias. Además de contar con la manipulación matemática es posible adicionar una serie de módulos para diferentes áreas del conocimiento como son: Sistemas de control (Control system toolbox) Análisis, diseño y simulación de sistemas de control automático. Identificación de sistemas en el dominio de la frecuencia (Frequency-domain system identification toolbox) Modelación de sistemas lineales basada sobre las medidas de respuesta en frecuencia del sistema. Lógica difusa (Fuzzy logic toolbox) Análisis, diseño y simulación de sistemas con inferencia difusa. Análisis espectral de alto orden (High order spectral analysis toolbox) Análisis de señales originadas por procesos no lineales o que contienen ruido no Gaussiano. Procesamiento de imágenes (Image processing toolbox) Diseño de filtros digitales, análisis estadístico, operaciones sobre el color y la morfología, transformaciones 2-D. Modelos de control predictivo (Model predictive control toolbox) Aplicaciones de control que contienen muchas entradas y muchas salidas variables, algunas con restricciones. Aplicaciones a problemas de ingeniería química. Análisis y síntesis MU (Mu analysis and synthesis toolbox) Herramientas especializadas para el análisis y síntesis de control optimo H(infinito) y u-analisis. Análisis y diseño de sistemas de control robusto multivariable para sistemas lineales. Fundación NAG (NAG foundation toolbox) Incluye 200 funciones de cálculo numérico para la solución de problemas de condiciones de frontera, optimización, ajuste de curvas y superficies, y otras aplicaciones. Redes neuronales (Neural networks toolbox) Funciones para analizar y diseñar redes neuronales. Las redes neuronales son arquitecturas de cómputo, inspiradas en el sistema nervioso biológico, las cuales son útiles en aplicaciones donde un análisis formal es extremadamente complicado o imposible, tal como reconocimiento de imágenes e identificación y control de sistemas no lineales. Diseño de control no lineal (Nonlinear control design toolbox) Diseño de sistemas de control lineal y no lineal, usando técnicas de optimización en el dominio del tiempo. incluye una interface gráfica para observar el comportamiento de las restricciones y sintonizar los parámetros del controlador. Optimización (Optimization toolbox) Comandos para la optimización de funciones lineales o no lineales e incluye las restricciones. Un problema de optimización puede ser visualizado como el intento de encontrar el punto más alto o mas bajo en un paisaje encerrado por una cerca. Un algoritmo de optimización puede ser desarrollado para explorar a través del paisaje y buscar desde la topología los puntos extremos.

CURSO_BÁSICO_DE_MATLAB

Embed Size (px)

Citation preview

Page 1: CURSO_BÁSICO_DE_MATLAB

INTRODUCCIÓN

MATLAB (Matrix Laboratory) es un programa matemático creado en la empresa Math Works de los estados unidos que manipula matrices y vectores ágilmente. MATLAB está compuesto por: un ambiente de desarrollo; una librería de funciones matemáticas; un lenguaje específico de alto nivel; gráficos para la representación de información en dos y tres dimensiones; procesamiento de imagen y animación; un API para interfaces externas para comunicar al programa con otros programas. Adicionalmente cuenta con documentación en línea constituida por tutoriales, ejemplos y referencias.

Además de contar con la manipulación matemática es posible adicionar una serie de módulos para diferentes áreas del conocimiento como son:

• Sistemas de control (Control system toolbox) Análisis, diseño y simulación de sistemas de control automático.

• Identificación de sistemas en el dominio de la frecuencia (Frequency-domain system identification toolbox) Modelación de sistemas lineales basada sobre las medidas de respuesta en frecuencia del sistema.

• Lógica difusa (Fuzzy logic toolbox) Análisis, diseño y simulación de sistemas con inferencia difusa.

• Análisis espectral de alto orden (High order spectral analysis toolbox) Análisis de señales originadas por procesos no lineales o que contienen ruido no Gaussiano.

• Procesamiento de imágenes (Image processing toolbox) Diseño de filtros digitales, análisis estadístico, operaciones sobre el color y la morfología, transformaciones 2-D.

• Modelos de control predictivo (Model predictive control toolbox) Aplicaciones de control que contienen muchas entradas y muchas salidas variables, algunas con restricciones. Aplicaciones a problemas de ingeniería química.

• Análisis y síntesis MU (Mu analysis and synthesis toolbox) Herramientas especializadas para el análisis y síntesis de control optimo H(infinito) y u-analisis. Análisis y diseño de sistemas de control robusto multivariable para sistemas lineales.

• Fundación NAG (NAG foundation toolbox) Incluye 200 funciones de cálculo numérico para la solución de problemas de condiciones de frontera, optimización, ajuste de curvas y superficies, y otras aplicaciones.

• Redes neuronales (Neural networks toolbox) Funciones para analizar y diseñar redes neuronales. Las redes neuronales son arquitecturas de cómputo, inspiradas en el sistema nervioso biológico, las cuales son útiles en aplicaciones donde un análisis formal es extremadamente complicado o imposible, tal como reconocimiento de imágenes e identificación y control de sistemas no lineales.

• Diseño de control no lineal (Nonlinear control design toolbox) Diseño de sistemas de control lineal y no lineal, usando técnicas de optimización en el dominio del tiempo. incluye una interface gráfica para observar el comportamiento de las restricciones y sintonizar los parámetros del controlador.

• Optimización (Optimization toolbox) Comandos para la optimización de funciones lineales o no lineales e incluye las restricciones. Un problema de optimización puede ser visualizado como el intento de encontrar el punto más alto o mas bajo en un paisaje encerrado por una cerca. Un algoritmo de optimización puede ser desarrollado para explorar a través del paisaje y buscar desde la topología los puntos extremos.

Page 2: CURSO_BÁSICO_DE_MATLAB

• Teoría de realimentación cuantitativa (Quantitative feedback theory toolbox) Diseño de sistemas de control en el dominio de la frecuencia utilizando QTF para sistemas con incertidumbre.

• Control robusto (Robust control toolbox) Análisis y diseño de sistemas de control que son robustos con respecto a las incertidumbres que se puedan presentar en el mundo real.

• Procesamiento de señales (Signal processing toolbox) Colección de funciones M de MATLAB para el procesamiento de señales. Este modulo incluye representación de señales y sistemas, cálculo de respuestas temporales y en frecuencia, diseño de filtros, transformada de Fourier, identificación de sistemas.

• Simulink (Simulink toolbox) Ambiente gráfico para el análisis, diseño y simulación de sistemas de control lineales y no lineales. Este permite trabajar con sistemas continuos, sistemas discretos, sistemas con múltiple tiempo de muestreo y sistemas híbridos.

• Simulación en tiempo real (Simulink real time workshop) Simulación en tiempo real e implementación de estrategias de control sobre hardware en tiempo real. Generación de códigos desde los bloques de Simulink para aplicación en sistemas de tiempo real.

• (Spline toolbox) Interpolación segmentaria que utiliza aproximaciones polinómicas. El método se origino utilizando una lamina de plástico delgada llamada curvígrafo, que en ingles es spline, y con el cual se trazan curvas entre puntos.

• Estadística (Statistic toolbox) Contiene un grupo de comandos para el análisis de datos estadísticos; simulación de Monte carlo y herramientas para el análisis de probabilidades.

• Matemática simbólica (Symbolic math toolbox) Contiene un conjunto de funciones para realizar cálculos simbólicos basados en Maple. La versión extendida soporta programas en Maple y adiciona otros comandos.

• Identificación de sistemas (System identification toolbox) Conjunto de herramientas para la estimación e identificación de sistemas. La identificación es una forma de obtener el modelo matemático de un sistema físico (como un motor eléctrico) basado en el registro de las señales de entrada y de salida del sistema.

• Otros... Cada uno de estos módulos se conoce internacionalmente como TOOLBOX y son programas que se pueden adicionar al paquete básico de MATLAB que será visto en este curso.

Esta introducción está pensada solo para proveer al estudiante de conocimientos básicos; para mayor información, consulte los manuales disponibles de MATLAB, particularmente en el Control system toolbox donde hay muchos comandos que pueden ser útiles a lo largo del desarrollo de la asignatura.

Nota: Este material es del tipo tutorial. Por lo tanto le recomendamos que cuando lo lea, tenga al frente un computador en el cual MATLAB esté funcionando correctamente. Los comandos que debe teclear se identificaran con >> y se distinguen porque tienen un fondo, este símbolo NO lo tiene que escribir. De otro lado, los programas que se anexan tienen un encabezado que los identifica como tales.

Page 3: CURSO_BÁSICO_DE_MATLAB

TALLER 1. INTRODUCCIÓN AL MANEJO DE MATLAB

Inicio de Matlab Se inicia al hacer doble “click” con el ratón en el icono de Matlab abriendo una ventana como la siguiente:

Expresiones aritméticas Se pueden introducir expresiones matemáticas de la forma habitual. Las operaciones se realizan en el siguiente orden: ^ potencia * multiplicación / y \ división + suma - resta

Comando Resultado Comentarios

>>a=4/3 a = 1.333 a/b = a b-1

>>b=3\4 b = 1.333 a\b = a-1 b

>>a=3^2 a = 9

>>b=2*sqrt(a) b = 6

Variables Se pueden definir variables para utilizarlas luego en otras expresiones. Matlab no es un programa de manipulación simbólica, las variables siempre contienen un valor numérico. Todas las variables son del mismo tipo, matrices cuyos componentes pueden ser reales o complejos. Una variable que contiene un real es una matriz de dimensión 1 × 1. Para introducir números complejos se pueden usar las constantes predefinidas i o j como 1− .

>>c=2*j c = 0 + 2 i

>>d=2+3i d = 2 + 3i

Page 4: CURSO_BÁSICO_DE_MATLAB

Al conjunto de variables creado durante una sesión se le denomina “workspace”. Para saber cuales son las variables del workspace se puede usar la orden whos.

Creación de matrices y vectores Una matriz se puede crear introduciendo sus elementos entre corchetes, poniendo cada fila en una línea distinta y separando los elementos de una misma fila por espacios en blanco. También se puede utilizar el punto y coma o “enter” para separar filas y la coma para separar elementos de una fila.

>>A=[a b c 1]

A =

9 6

0 + 2 i 1

>>B=[1 2;3 4;5 6] B =

1 2

3 4

5 6

A una matriz de una sola fila o de una sola columna también se le llama vector. Una forma rápida de crear vectores fila de elementos equiespaciados es utilizando el operador ‘dos puntos’.

>>v1=1:5 v1 = 1 2 3 4 5

>>v2=1:0.5:3 v2 = 1 1.5 2 2.5 3

>>c=[1:2:10] c = 1 3 5 7 9

La forma general es: nombre = [inicio : incremento : final]

Para obtener la traspuesta de una matriz se pone detrás una comilla simple.

>>[1 2]’ ans = 1 2

>>B’ B = 1 3 5 2 4 6

Matlab maneja con la misma sencillez matrices complejas o reales y sus operaciones básicas.

>>k=[3,3;6,9]+i*[4,6;7,10] k = 3 + 4 i 3 + 6 i 6 + 7 i 9 + 10 i

Matriz compleja (2*2)

>>reales=real(k) contiene la parte real de cada elemento de k

>>imaginarios=imag(k) contiene la parte imaginaria de los elementos de k

>>magnitud=abs(k) contiene la magnitud de cada elemento de k

>>angulos=angle(k) contiene los ángulos de los elementos de k (en radianes)

>>kinv=inv(k) Asigna a kinv la matriz inversa de k.

Page 5: CURSO_BÁSICO_DE_MATLAB

Definidas las matrices:

>>x=[1;2;3]

>>y=[4;5;6]

Se realizan las operaciones básicas con x e y.

>>l=x+y Suma de matrices

>>m=x-y Resta de matrices

>>o=x.*y Hace la multiplicación elemento por elemento (Este es el efecto del punto)

>>p=x'*y Multiplica la transpuesta de x por y Resultado(1*1)

>>r=x*y' Matriz x por y transpuesta Resultado (3*3)

>>t=x*2 Cada elemento de x por 2

>>u=x.*2 Igual al anterior

>>v=x.\y Cada elemento de y dividido por cada elemento de x(división de matrices)

>>j=2.^x 2 elevado a la cada elemento de x

Matlab maneja algunas matrices especiales como:

>>d=zeros(5) Matriz de ceros (5*5)

>>g=zeros(2,3) Matriz de ceros (2*3)

>>H=ones(2,3) Matriz de unos (2*3)

>>j=eye(3) Matriz identidad (3*3)

>>l=magic(5) Matriz mágica (5*5)

>>m=rand(3) Matriz de números aleatorios (3*3)

Selección de elementos de una matriz Se puede obtener un elemento de una matriz indicando entre paréntesis la fila y la columna (por este orden y separados por coma) del elemento deseado. Si el índice que indica la fila o columna es un vector, se obtendrá una matriz con todos los elementos seleccionados.

Si se quiere seleccionar filas o columnas completas, se puede utilizar el operador ‘dos puntos’ como índice.

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

>>a(1,2) Elemento de a ubicado en la fila 1 y la columna 2

>>a([1 3],2) Elementos de la columna 2 de a ubicados en las filas 1 y 3

>>B=a(:,1) Asigna a B la primera columna de a.

>>b=a(1,:) Asigna a b la primera fila de a.

>>k=[a(1,1:2),a(3,3)]; Matriz (2*3) construida con la primera y la tercera filas de a.

>>H=[a(1,:);a(3,:)] Matriz (2*3) construida con la primera y la tercera filas de a.

Page 6: CURSO_BÁSICO_DE_MATLAB

Funciones Gran parte de la potencia de Matlab reside en su extensa librería de funciones. Para explorarla se puede utilizar la orden help. Por si sola da una lista de los directorios de funciones instalados en el sistema.

>>help det información sobre la función det

Para buscar funciones que realizan una determinada tarea se puede usar la orden lookfor, que busca en la librería una palabra clave.

Es un error común teclear los nombres de las funciones en mayúsculas. Hay que tener en cuenta que Matlab distingue entre mayúsculas y minúsculas y que todas las funciones siempre llevan el nombre en minúsculas.

Polinomios En Matlab los polinomios se ingresan como vectores: p(x)=x^2+3x+2 se ingresa como >>p=[1 3 2]

Observe que se ingresan los coeficientes del polinomio comenzando por el de mayor orden hasta el de menor orden.

>>q=[4 0 5 1] q(x)=4x^3+5x+1

Para sumar polinomios los vectores deben tener el mismo tamaño.

Ejemplo Sumar los polinomios: p(x)=3x^2+2x+1 q(x)=6x+3

>>p=[3 2 1]; >>q=[1 3]; >>suma=p+q

ERROR Los vectores que almacenan los polinomios deben tener las mismas longitudes.

>>p=[3 2 1]; >>q=[0 1 3]; >>result=p+q >>resta=p-q

En la resta se conservan las mismas reglas que en la suma pero con el signo menos.

La multiplicación polinómica es ejecutada por la función CONV la cual hace la convolución de los dos arreglos. La convolucion es una operación matemática que opera sobre sucesiones; en el caso de dos sucesiones hechas a base de coeficientes, la sucesión resultante representa los coeficientes del polinomio que se obtiene cuando se multiplican los polinomios originales; por eso el nombre de CONV. La multiplicación de más de dos polinomios requiere el uso repetido del comando conv.

La división de polinomios se efectúa con la función deconv. Cuando el resultado de la división es incompleto se debe a la aparición de un residuo.

>>mutiplic=conv(p,q)

>>[div,resd]=deconv(p,q) el resultado obtenido en la variable div es el cociente de la división, y el resultado obtenido en resd será el residuo.

Matlab ofrece un comando para derivar polinomios. Si se desea la derivada de p respecto a x:

>>derivada=polyder(p)

Matlab también permite evaluar polinomios para un valor o unos valores determinados de sus argumentos: evaluar el polinomio p para x=0,1,2,3,4

>>x=[0:1:4];

Page 7: CURSO_BÁSICO_DE_MATLAB

>>valores=polyval(p,x)

Para encontrar las raíces de un polinomio se utiliza el comando ROOTS

>>raizq=roots(q)

>>qr=poly(raizq) Matlab permite reconstruir un polinomio cuando se conocen sus raíces.

Guardar el espacio de trabajo Las matrices o vectores que usted ingrese en el espacio de trabajo, pueden ser guardadas. Para esto utilice el comando SAVE NOMBRE, donde nombre indica el nombre deseado para el espacio de trabajo. También puede salvar el espacio de trabajo con el comando SAVE WORKSPACE AS... que se encuentra en la barra de menú.

Ejemplo:

Primero que nada, borrar los datos que se tengan: >>clear

Ahora ingresar dos matrices: >>a=[1 2;3 4]; >>b=[5,1;6,2];

Para guardar estas matrices se hace: >>save ensayo

y las matrices a y b quedaran guardadas en el archivo ensayo.mat

Recuperar un espacio de trabajo guardado Las matrices y vectores que han sido guardados en un espacio de trabajo pueden ser recuperadas mediante el comando LOAD NOMBRE, donde NOMBRE indica el nombre con el cual se guardó el espacio de trabajo que se desea recuperar.

Ejemplo:

Cargar el espacio de trabajo que se guardó >>load ensayo

Para estar seguros de que se ha recuperado el espacio de trabajo correcto se escribe el comando: >>whos

Guardar la sesión Guardar la sesión significa que todo lo que usted ha escrito queda almacenado en un archivo que podrá recuperar cuando lo desee. Con esta opción usted guardara hasta los errores que cometa y todos los mensajes que aparecen en la pantalla. Para realizar esto se utiliza el comando DIARY.

Ejemplo:

Guardar en un archivo todo lo que se escribirá a continuación.

>>diary viejito

En el archivo viejito quedara guardado lo que se escriba desde aquí hasta que aparezca diary off

>> matriza=[1,2,3;4,5] >>a=[1 2 3] >>a*b >> b=[4;5;6]; >>c=a*b >> diary off

Hasta aquí quedara guardado lo que se ha escrito, con todo y errores. Además quedan los mensajes de error que entrega el programa.

Page 8: CURSO_BÁSICO_DE_MATLAB

Usted puede seguir guardando texto en viejito. Solo escribiendo de nuevo diary on y luego cuando no quiera guardar mas texto escriba diary off.

Recuperar la sesión Ahora bien, lo que usted ha guardado con el comando diary, lo puede recuperar solo abriendo el archivo viejito desde un editor de texto.

Lo que obtendrá será lo siguiente:

a=[1,2,3;4,5]

??? All rows in the bracketed expression must have the same number of columns.

a=[1 2 3] a = 1 2 3 a*b ??? Undefined function or variable b. b=[4;5;6]; c=a*b; diary off

Page 9: CURSO_BÁSICO_DE_MATLAB

TALLER 2. GRÁFICAS EN MATLAB

Objetivos Identificar las funciones básicas de Matlab para hacer gráficas en 2 y 3 dimensiones.

Aplicar Matlab en la elaboración de gráficos.

Algunas funciones básicas para graficar empleando Matlab

Matlab es un programa que cuenta con poderosas subrutinas para realizar gráficas en dos o tres dimensiones.

>>plot(x,y,’opciones de formato’) plot: Genera una gráfica de y en función de x, con el formato especificado

>>figure(n) figure: Genera una ventana de figura “n” >>xlabel(’eje x’) xlabel: Título eje x

>>ylabel(’eje y’) ylabel: Título eje y

>>title(’titulo’) title: Título de la gráfica

>>grid on grid: Marca las líneas de división

>>axis ([xmin xmax ymin ymax]) axis: Establece las escalas de los ejes de la gráfica

>>subplot(n,r,p) subplot: Permite hacer varias gráficas en una figura. Divide la figura en una matriz de “n” reglones por “r” columnas, y coloca la gráfica en la posición “p”.

>>hold on …. >>hold off

hold: Detiene una gráfica, permitiendo agregar más curvas, liberándola cuando aparece nuevamente el comando hold.

>>plotyy(x1,y1,x2,y2) plotyy: Genera una gráfica con dos ejes (x1 vs. y1, x2 vs. y2)

>>mesh(z) mesh: Grafica una malla en 3 dimensiones

>>loglog(x,y) loglog: Genera una gráfica de x vs. y, con escala logarítmica en ambos ejes

>>semilogx(x,y) semilogx: Genera una gráfica de x vs. y, con escala logarítmica en el eje x

>>semilogy(x,y)

semilogy: Genera una gráfica de x vs. y, con escala

logarítmica en el eje y

>>loglog(x,y)

loglog: Genera una gráfica de x vs. y, con escala

logarítmica en ambos ejes

>>[xx,yy] = meshgrid(rango x, rango y)

Meshgrid: Transforma los vectores x,y en una malla para graficar en 3 dimensiones

Gráficas simples Graficar la función y=seno(x), para 0<=x<=2*pi.

>>x=[0.0:.1:2*pi]; Definir el eje de las abscisas >>y=sin(x); Evaluar para cada valor de x

Page 10: CURSO_BÁSICO_DE_MATLAB

>>plot(x,y) Construir la gráfica >>title('Seno') >>xlabel('Abcisa') >>ylabel('Ordenada')

¿Recuerda el paraboloide hiperbólico ó la famosa silla de montar del cálculo?

La función del paraboloide hiperbólico es: (y^2/a^2)-(x^2/b^2)=cz

Es decir: z=((y^2/a^2)-(x^2/b^2 ))/c

>>a=2; >>b=3; >>c=4; >>x=[-7.5:.5:7.5]; >>y=x; >>[X,Y]=meshgrid(x,y); >>Z=((Y.^2./a^2)-(X.^2./b^2 ))./(c); >>mesh(X,Y,Z)

¿Ahora bien, tuvo problemas para realizar la gráfica?

Actividades: 1. Graficar las siguientes funciones en (i) una sola gráfica y en (ii) una figura con tres

gráficas, para un rango de tiempo de 0 a 10. a) y1 = 2 cos(t) b) y2 = sen(t) c) y3 = cos(t) + sen(t)

2. Representar en una sola gráfica las siguientes funciones para un rango de tiempo de 0 a 10. a) y1 = 50 cos(t) b) y2 = sen(t) c) y3 = cos(t) + sen(t)

3. Graficar las siguientes funciones en tres dimensiones para x,y [–4, 4] a) z1 = exp(16 - x2 - y2) b) z2 = x2 + y2 – 9 c) z3 = x3 – 2xy2 - x2 - y2 d) z4 = exp(-x2 + y2) e) z5 = x exp(-x2 - y2)

Page 11: CURSO_BÁSICO_DE_MATLAB

TALLER 3. PROGRAMACIÓN EN MATLAB

Hasta ahora se ha trabajado en el espacio de trabajo de Matlab, ahora se verá como hacer un programa. Los programas en Matlab se escriben en un lenguaje especial llamado Lenguaje m el cual se compone de los comandos de Matlab. Es decir no es necesario ser un programador experto para realizar programas con Matlab. Los programas se escriben en algún editor de texto y se les asigna un nombre con la extensión .m. Luego los programas se pueden ejecutar desde el espacio de trabajo ubicando el directorio de trabajo y tecleando el nombre del programa.

Ejemplo: Realizar el programa que gráfica la silla de montar

Primero se debe abrir un editor de texto. Matlab tiene su propio editor al cual se puede accesar con los comandos:

FILE NEW M-FILE

a los cuales se accede desde la barra de menú.

El programa escrito queda de la forma:

%Programa para realizar el gráfico de la silla de montar a=10; %Se definen las constantes b=10; c=1; x=[-7.5:.5:7.5]; %Se delimita el rango para el eje x y=x; %El rango de y será el mismo de x [X,Y]=meshgrid(x,y); %Se crea un espacio tridimensional para graficar Z=((Y.^2./a^2)-(X.^2./b^2 ))./(c); %Se evalua la variable z mesh(X,Y,Z) %Se grafican los resultados view(-30,-160) %Se ubica el punto de visualización %Fin del programa

Con % se ponen comentarios. Cualquier duda sobre los comandos utilizados consulte con help.

Ejemplo: Programa para hacer una cara feliz

%Programa para hacer una cara feliz clear,clf,hold off dt=pi/20 t=0:dt:2*pi x=cos(t);y=sin(t); axis('off'),hold on plot(x,y) hold on for k=0.8:-0.05:0.05 plot(k*0.1*x-0.3,k*0.15*y+0.1) plot(k*0.1*x+0.3,k*0.15*y+0.1) end s1=3*pi/2-1.1; s2=3*pi/2+1.1 s=s1:dt:s2; xs=0.5*cos(s);ys=0.5*sin(s); plot(xs,ys)

Page 12: CURSO_BÁSICO_DE_MATLAB

hold off %Grafica de una esfera en tres dimensiones clear, clf axis ([-1.5, 1.5, -1.5, 1.5, -1.3, 1.3]) view ([1 -0.5 0.31]) caxis([-0.8 1.5]) colormap hot hold on L=[0.5, 0.3, 0.7]; V=[1, 1, 1] [x,y,z]=sphere(20); [xn,yn,zn]=surfnorm(x,y,z); % r=specular(xn,yn,zn,L,V); r=diffuse(xn,yn,zn,L); surfc(x,y,z,r) shading interp

Control de flujo El control de flujo es extremadamente poderoso porque este hace que cálculos pasados sirvan para realizar cálculos futuros. Matlab ofrece tres estructuras para la toma de decisiones o control de flujo:

Loop PARA (for)

En un loop for un grupo de comandos es ejecutado un número predeterminado de veces. La forma general es:

for x=arreglo comandos end

Ejemplo: Programa que calcula el seno de x para x entre 0 y pi con intervalos de 1

%Programa que ejemplifica la utilización del FOR for n=1:pi x(n)=sin(n); end %Fin del programa

Ejemplo: Activación del reloj y retardo insertado por un FOR

%Ejemplo de activación del reloj y retardo insertado por un FOR t=[0:1:8000]; %se crea un vector tiempo1=clock; %se asigna el primer tiempo h=sqrt(t); %calcula un vector h como la raiz cuadrada del %vector t tiempo2=clock; %se asigna el segundo tiempo %el tiempo de ejecución fue: ejecucion1=etime(tiempo2,tiempo1) %ahora utilizando el for tiempo3=clock; for i=1:8001 j(i)=sqrt(t(i)); end tiempo4=clock; ejecucion2=etime(tiempo4,tiempo3)

Page 13: CURSO_BÁSICO_DE_MATLAB

%Fin del programa

Tarea: Resuelva el mismo problema utilizando los comandos tic y toc

Loop MIENTRAS (while)

Las instrucciones se ejecutan cíclicamente mientras se cumpla la condición. while condición instruccciones end

Condicional if Las instrucciones1 se ejecutan si se cumple la condición 1, en caso contrario, si se cumple la condición 2 se ejecutan las instrucciones 2, si no se cumple ninguna de estas condiciones se ejecutan las instrucciones 3.

if condicion1 instruccciones1 elseif instruccciones2 else instruccciones3 end

Ejemplo en el que se utiliza if y while:

%Programa para sumar dos polinomios sin importar su orden. home disp('programa para sumar polinomios') disp(' ') disp('presione enter para continuar') pause k=1; while k=1 home p1=input(' entre polinomio numero 1:'); %sirve para ingresar datos p2=input('entre el polinomio numero 2:'); home disp('el polinomio numero 1es:') p1 disp(' ') disp('el polinomio numero 2 es:') p2 disp(' ') disp('presione enter para continuar') pause lp1=length(p1); lp2=length(p2); k=lp1-lp2; if lp1==lp2 pt=p1+p2; elseif lp1>lp2 p2=[zeros(1,k),p2]; pt=p1+p2; else p1=[zeros(1,-k),p1];

Page 14: CURSO_BÁSICO_DE_MATLAB

pt=p1+p2; end home disp('la suma total es') pt disp(' ') k=input('Si desea otra suma teclee 1 sino teclee 0'); pause end %este es el end del while %Fin del programa

No tiene muchos comentarios para que lo piense usted mismo, observe el despliegue en la pantalla.

Funciones m Matlab puede ejecutar una sucesión de instrucciones almacenadas en archivos de disco con la extensión " .m". Por ello la mayoría de las funciones de Matlab se llaman funciones m. Un ejemplo de estas funciones es roots. Busque esta función y observe el programa. Gran parte del trabajo con Matlab será el de crear y refinar archivos .m.

Usted puede crear sus propias funciones, de hecho cuando usted hace un programa y lo guarda con la extensión .m este queda como una función m la cual puede ser ejecutada con solo escribir su nombre. Las variables en un archivo de instrucciones son globales y, por tanto, cambiarán los valores del workspace. Ahora bien, el primer grupo de comentarios que usted escriba en la función saldrá en la pantalla cuando usted le pregunte a help por esta función.

Ejemplo: Realizar una función m que al ingresarle un grupo de datos calcule la media y el máximo valor del arreglo:

function [media,maximo]=medmax(datos) %MEDMAX Calcula la media y el máximo de un arreglo. %El arreglo de datos se ingresa en forma de vector fila o columna. %Este es el primer ejemplo de una función. %Esta primera parte de comentarios aparecerá cuando se %invoque help medmax. %Ejemplo: %[med,max]=medmax(vector) %Calcula la media y el máximo de los datos almacenados en vector, %los resultados se encuentran en med y max respectivamente. %Observe que estos comentarios no aparecen cuando se invoca %help medmax por que ya se dejó un renglón en blanco. % n=length(datos); media=sum(datos)/n; maximo=max(datos); % %Termina la función

Solución de ecuaciones diferenciales ordinarias Matlab permite resolver numéricamente una ecuación diferencial o un sistema de ecuaciones. Para ello se pueden utilizar las fórmulas de un método numérico como Runge-Kutta programando su algoritmo, o utilizar un método implícito de Matlab como ode23.

Comando ode23: Para utilizar el comando ode23 se debe crear primero un archivo m que contenga la ecuación diferencial de orden n como un conjunto de n ecuaciones de primer orden.

Page 15: CURSO_BÁSICO_DE_MATLAB

Simulación dinámica del cambio de nivel en un tanque

El nivel del líquido en tanque cambia de acuerdo con

A dhdt

q h11

1 1 1 = − α

donde

A1 = superficie del tanque, m2 h1 = nivel del líquido en el tanque, m q1 = caudal de entrada, m3/s q2 = caudal de salida, m3/s α = coeficiente de descarga, m2.5/s Tomando A1 = 1.0 m2, q1 = 0.05 m3/s, α = 0.05 m2.5/s y como condición inicial a t = 0 h1 = 0.0 m

Trace una grafica del nivel contra el tiempo para los primeros 1000 segundos y desde la gráfica determine cuál es el valor de estado estacionario para el nivel. Cuánto tiempo toma para alcanzar el estado estacionario.

Solución: Primero cree un archivo-m llamado “tanque_1.m” que contenga la ecuación diferencial

function hdot = tanque_1(t,h) hdot=0.0;a1=0.05;A1=1.0;q1=0.05; hdot=(q1-a1*sqrt(h))/A1;

(Observe que hdot corresponde a dhhdt

=& ).

Ahora cree otro archivo-m llamado “ejemplo1.m” que contenga la solución de la ecuación diferencial.

t0=0.0;tf=1000;h0=0.0; [t,h]=ode23(@tanque_1,[t0 tf],h0); plot(t,h) xlabel('tiempo,segundos'),ylabel ('Nivel del líquido,m') title('Figura(1):Nivel del líquido en el tanque') grid on

Ahora desde matlab ejecute el programa, observe la figura y responda las preguntas planteadas:

>>ejemplo1

Page 16: CURSO_BÁSICO_DE_MATLAB

TALLER 4. FUNCIONES DE TRANSFERENCIA

Cálculo de las raíces de una ecuación característica Para calcular las raíces de un polinomio se define un vector con todos coeficientes del mismo, desde el de mayor orden hasta el término independiente, y se aplica el comando roots a dicho vector.

3 25 8 3 0+ + + =s s s » p=[1 5 8 3] » roots(p)

También se puede hacer lo mismo directamente, sin definir ningún vector: » roots([1 5 8 3]) Representación de Sistemas Dada una función de transferencia H(s) el sistema queda definido, para Matlab, con la introducción del numerador y el denominador de la función. Dado que estos son polinomios en potencias de s será suficiente con introducir los coeficientes de estos polinomios, lo cual se hará en forma de vectores fila, ordenando los coeficientes por orden de potencias descendentes.

Ejemplo: Sea el sistema 2

3 2

3 2( )

3 5 2 1+

=+ + +

sH s

s s s

Se entra este sistema a Matlab, utilizando el numerador y el denominador.

>>num=[3 0 2]; >>den=[3 5 2 1];

Respuesta temporal de una función de transferencia

Para visualizar gráficamente la respuesta temporal a una entrada escalón e impulso se emplean los comandos step(num,den) e impulse(num,den), definiendo los vectores de los polinomios numerador y denominador.

Ejemplo: dado el sistema 2 2

23 3

2 3 2 3( )

( 1) 3 13+ + + +

=+ + +

=+

s s s sH s

s s s s se procede:

» num=[1,2,3]; » den=[1,3,3,1]; » step(num,den)

Page 17: CURSO_BÁSICO_DE_MATLAB

Si la entrada es un escalón de valor 5 y se desea ver la salida hasta un tiempo de 5 segundos: » step(5*num,den,0:0.1:5)

» impulse(num,den)

Sistemas de segundo orden

Para sistemas de segundo orden la función de transferencia es de la forma: 2

2

2

( )2( ) δ

ωω ω

=+ +

n

n n

C ss sR s

Obtener la respuesta transitoria de la función de transferencia polinómica de segundo orden con un

escalón y un impulso como entrada: 2

( ) 10.8 1( )

=+ +

C ss sR s

» num=1; » den=[1,.8,1]; » step(num,den)

Page 18: CURSO_BÁSICO_DE_MATLAB

En el caso de una entrada impulso, se obtiene: » impulse(num,den)

Conversión de funciones de transferencia

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.

La función residue convierte la función de transferencia polinómica: 1

11 1 0

1 1 0

( )−

−−

+ +=

+ +

+ ++ +L

L

n n

m mn n

m m

b s b s b s bH s

a s a s s aa

en la función transferencia cero-polo-ganancia:

1 2

1 2

( ) ( )= + + + +− − −

L n

n

H srr r k s

s p s p s p

>>[r,p,k]=residue(num,den)

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 (b0, b1,..., bn-1), numerador de la expresión polinómica y (a0, a1,..., am-1), denominador de la expresión polinómica.

Ejemplo: Sea el sistema 2

3 2

3 2( )

3 5 2 1+

=+ + +

sH s

s s s

>>num=[3 0 2]; >>den=[3 5 2 1]; >>[r,p,k]=residue(num,den) » r r =

Page 19: CURSO_BÁSICO_DE_MATLAB

1.0000 -0.0000 2.0000 » p p = -1.0000 -1.0000 -1.0000

Por lo tanto la solución es: ( )1 2

1 1= +

+ +H s

s s

La función tf2zp convierte la función de transferencia polinómica en la función transferencia cero-polo-ganancia:

( )( ) ( )( )( ) ( )

1 2

1 2

( ) =− − −

− − −L

Ln

n

H ss z s z s z

ks p s p s p

Esta instrucción determina los ceros (z1, z2, … , zn), 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.

>>[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 tanto la solución es

La función zp2tf convierte la función transferencia cero-polo-ganancia en la función de transferencia polinómica:

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, … , zn), p, de los polos (p1, p2,..., pn) y la ganancia correspondiente (k) de la función de transferencia del tipo cero-polo-ganancia.

» z=[-1.0000 + 1.4142i;-1.0000 - 1.4142i]; » p=[-1;-1;-1]; » k=1; » [hnum,hden]=zp2tf(z,p,k) hnum = 0 1.0000 2.0000 3.0000 hden = 1 3 3 1

Page 20: CURSO_BÁSICO_DE_MATLAB

Productos de funciones de transferencia

Los productos de polinomios se obtienen aplicando el comando conv.

» n=[1 10] » temp=conv([1 7],[1 15 35]) » d=conv(temp,[1 2 0]) » step(n,d)

Las cuatro líneas anteriores se pueden poner en una única orden:

» step([1 10],conv(conv([1 7],[1 15 35]),[1 2 0]))

Definición de funciones de transferencia

Si se posee la Control System Toolbox versión 5.2 o superior, es posible definir las funciones de transferencia con el comando tf. Después se pueden emplear todos los comandos aprendidos.

» G=tf([4],[1 2 0]) » impulse(G) » step(G) » rlocus(G) » bode(G) » margin(G)

La principal ventaja es que se pueden multiplicar directamente las funciones de transferencia:

» Gc=tf(5.6*[1 3],[1 5.4]) » step(Gc*G)

Page 21: CURSO_BÁSICO_DE_MATLAB

TALLER 5.

INTRODUCCIÓN AL MANEJO DE SIMULINK

Simulink es una herramienta de Matlab para modelado, simulación y análisis de sistemas dinámicos, soporta tanto sistemas lineales como no lineales: en tiempo continuo, muestreados, híbridos y sistemas multifrecuencia (contienen sistemas muestreados a diferente frecuencia).

Ejecutando en la línea de comando de MatLab >>simulink se abrirá la librería de Simulink, apareciendo (sobre el fondo de MATLAB) el “menú” principal de Simulink.Abriendo una ventana de simulación New y usando el ratón, se puede ir trasladando y conectando bloques de la librería de simulink en la ventana de trabajo, para construir el sistema a simular. Cada uno de estos bloques tiene una serie de parámetros ajustables que pueden modificarse pulsando dos veces el botón izquierdo del ratón sobre el bloque seleccionado.

Page 22: CURSO_BÁSICO_DE_MATLAB

Biblioteca de fuentes (“Sources”). La biblioteca de fuentes dispone de gran cantidad de elementos que pueden ser utilizados como señales de entrada para los sistemas habituales. siendo las más usuales: a) Band-Limited White Noise: Ruido blanco en un sistema continuo. b) Chirp Signal: Genera una onda senoidal de frecuencia creciente. c) Clock: Visualiza y proporciona el tiempo de simulación. d) Constant: Genera un valor constante e) Digital Clock: Genera tiempo de simulación en el intervalo de muestreo especificado. f) From File: Lee datos de un archivo. g) From Workspace: Lee datos de una matriz definida en el espacio de estados. h) Pulse Generator: Genera pulsos a intervalos regulares. g) Random Number: Genera números aleatorios distribuidos normalmente. h) Repeating Sequence: Genera una señal arbitraria repetible regularmente. i) Signal Generator: Genera diferentes formas de onda. j) Sine Wave: Genera una onda senoidal. k) Step Input: Genera una función escalón. l) In1: Señal de entrada (de la extinta “Connections”). Biblioteca de salidas (“Sinks”). El botón “Sinks” Incluye bloques que visualizan o escriben su salida: a) Display: Visualiza numéricamente la señal de entrada. b) Scope: Visualiza señales en ventanas de figura Matlab (con el escalado que se le indique). c) Out1: Señal de salida (de la extinta “Connections”). d) Stop Simulation: Para la simulación cuando la entrada es distinta de cero. e) To File: Escribe datos en un archivo. f) To Workspace: Escribe datos en una matriz del espacio de trabajo. g) XY Graph Scope: Visualiza gráficas X-Y de señales en la ventana de figuras de MATLAB.

Biblioteca de Sistemas Continuos. El botón “Continuous” incluye bloques que describen funciones continuas estándar (algunas de la extinta “Linnear”): a) Derivative: Genera la derivada respecto al tiempo de entrada. b) Integrator: Integra una señal. c) State-Space: Implementa un sistema lineal en el espacio de estados. i) Transfer Fcn: Implementa una función de transferencia lineal. j) Zero-Pole: Implementa una función de transferencia especificada en términos de polos y ceros.

Biblioteca Matemática (“Math”). El botón “Math” incluye bloques que permiten la realización de operaciones matemáticas. Solamente indicaremos las que anteriormente se encontraban en otras librerías: a) Gain: Ganancia (multiplica por una constante). b) Slider gain: Ganancia mediante “corredera”. c) Sum: comparador (sumador con signo).

Page 23: CURSO_BÁSICO_DE_MATLAB

Bibliotecas Señales y Sistemas (“Signals & System”) y Funciones y Tablas (“Functions & Tables”). Contiene, entre otras muchas: a1) Demux: Separa una señal vectorial en sus señales de salida. b1) Mux: Combina algunas líneas de entrada en una línea vectorial. a2) Fcn: Permite realizar funciones con variables del sistema b2) MATLAB Fcn: Permite usar funciones de MATLAB.

Se van a realizar algunas prácticas con lo visto hasta ahora, añadiendo lo que vaya siendo necesario en cada caso.

Ejemplo 1.

En este ejemplo, se trata simplemente de colocar una entrada mediante un generador de señales, y una salida de tipo “scope”, y realizar la simulación (esto es, en este caso, la planta a simular es simplemente una función de transferencia unitaria). Para ello, se seguirán los siguientes pasos:

a) Colocar los elementos de las bibliotecas “Source” y “Sinks” elementos de la figura y unirlos mediante una flecha.

b) Ajustar el generador de señales con los valores mostrados en la figura.

Page 24: CURSO_BÁSICO_DE_MATLAB

c) Ajustar el rango del visor (Scope) tal y como se indica en la figura.

d) En el menú “Simulations”, ajustar a los parámetros indicados en la figura:

e) En ese mismo menú “Simulations” comenzar con la simulación (“Start” o Ctrl-T). Si el visualizador no está en pantalla, llamarlo pulsando dos veces sobre su símbolo, hasta obtener algo semejante a la figura.

Page 25: CURSO_BÁSICO_DE_MATLAB

Se pueden repetir las simulaciones variando la forma de la señal del generador, para experimentar las posibles opciones, así como variar los rangos de los visualizadores.

Ejemplo 2.

Ahora se trata de observar la función del multiplexor y como almacenar la salida en variables vectoriales de MATLAB.

a) En primer lugar se monta el esquema de la figura, eligiendo dos entradas para el multiplexor, y un valor de 2 para la ganancia del bloque amplificador.

Elegiendo la misma fuente senoidal que para el caso del ejemplo 1. La variable de salida se llamara “sal” corresponde a un bloque To Workspace (sublibreria Sinks):

b) Una vez preparado el sistema, se tendra que ajustar los parámetros de la simulación, que ahora serán:

-Stop time: 2

-Solver options:

Type: Fixed-step ode4 (Runge-Kutta)

También se ajustará el Scope para un rango horizontal de 2 y vertical de 2.

c) Se iniciará la ejecución, obteniendo la siguiente salida

Se puede llamar a la variable de MATLAB “sal”, tecleando su nombre, para comprobar que se han almacenado los valores en una matriz de dos columnas (la segunda de valor doble que la primera), por efecto de los elementos Gain y Mux.

Subsistemas.

Se va a utilizar la posibilidad que Simulink ofrece para crear subsistemas nuevos a partir de bloques convencionales, lo que aporta gran potencia ya que permite el diseño de sistemas jerarquizados. Para ello, se va a crear un subsistema a partir del ejemplo 2, incluyendo el multiplicador, ganancia y multiplexor en un único bloque.

Page 26: CURSO_BÁSICO_DE_MATLAB

a) Sobre el bloque completo, marcar con el botón derecho del ratón el área que incluya los elementos que se quiere incluir en el subsistema.

b) Seleccionar la opción Create Subsystem del menú Edit de Simulink.

Se puede deshacer el subsistema eligiendo Undo create Subsystem en el mismo menú. Para ver el contenido del subsistema se puede pulsar dos veces sobre el mismo. Los subsistemas pueden “enmascararse” para conseguir una mayor facilidad en la introducción de datos. Esto se verá en un apartado posterior.

Modelado de Ecuaciones.

En este apartado se va a ver como se pueden modelar ecuaciones utilizando Simulink.

Ecuaciones algebraicas.

Se va a construir un sistema que tome como entrada grados Fahrenheit y los convierta en Celsius (como entrada colocaremos una onda senoidal para observar un amplio rango (la salida será un Scope con amplitud suficiente para visualizar todos los resultados).

Se sabe que la ecuación que realiza el cambio es la siguiente:

Se puede construir el siguiente sistema:

Obteniendo la siguiente salida (para una entrada de amplitud 50 y frecuencia 1

Page 27: CURSO_BÁSICO_DE_MATLAB

Ecuación diferencial.

Se va ahora a simular la siguiente ecuación diferencial simple

Esto se puede hacer de la siguiente forma

Donde, la salida puede observarse en la figura

Función de Transferencia.

Por último, es fácil ver que la función de transferencia asociada al sistema anterior (definida como el cociente de las transformadas de Laplace de la salida dividida por la entrada) es:

El sistema que se puede simular es el siguiente:

cuya salida coincide con la observada en la salida anterior.

Page 28: CURSO_BÁSICO_DE_MATLAB

TALLER 6.

LAZO CERRADO

Respuesta temporal de un sistema compensado Para obtener la respuesta temporal de un sistema compensado, es decir, dentro de un lazo de realimentación negativa, se puede emplear el comando feedback para definir la función de transferencia en lazo cerrado.

Los parámetros de este comando son el numerador y denominador de la función de transferencia directa y el numerador y denominador de la función de transferencia de realimentación H(s). Por ejemplo:

» n=[4] » d=[1 2 0] » nc=5.6*[1 3] » dc=[1 5.4] » [nlc,dlc]=feedback(conv(nc,n),conv(dc,d),1,1) » step(nlc,dlc)

En cambio, el lugar de las raíces del sistema compensado se debe calcular con la función de transferencia en lazo abierto:

» rlocus(conv(nc,n),conv(dc,d))

Ejercicios Introducir una función de transferencia G1(s) de un sistema de segundo orden: K=2.5, δ= 0.1 y ωn = 10 rad/s y una función de transferencia G2(s) de un sistema de primer orden: K=2 y τ=0.5s. Obtener la respuesta temporal de G1 ante un impulso y un escalón.

>>g1n=[2.5] Numerador de G1

>>g1d=[0.01 0.02 1] Denominador de G1

>>g2n=[2] Numerador de G2

>>g2d=[0.5 1] Denominador de G2

>>impulse(g1n,g1d) Respuesta de G1 ante un impulso

Page 29: CURSO_BÁSICO_DE_MATLAB

0 1 2 3 4 5 6-20

-15

-10

-5

0

5

10

15

20

25Impulse Response

Time (sec)

Am

plitu

de

Representar en una misma gráfica las respuestas temporales a una entrada escalón de G1 y G2.

>>step(g1n,g1d); >>[y1, x1,t] = step(g1n,g1d); >>hold on; >>step(g2n,g2d,t); >>hold off;

0 1 2 3 4 50

0.5

1

1.5

2

2.5

3

3.5

4

4.5Step Response

Time (sec)

Am

plitu

de

Obtener la función de transferencia en lazo cerrado de acuerdo con la siguiente figura, y determinar la respuesta ante una entrada tipo impulso:

>>[g4n, g4d] = feedback (g1n, g1d, g2n, g2d) 4 3 2

1.25 2.50.005 0.02 0.52 6

+=

+ + +sg

s s s

>>impulse (g4n, g4d); Sistema inestable

>>roots(g4d) 2.2319 +11.6961i2.2319 -11.6961i-8.4638

Page 30: CURSO_BÁSICO_DE_MATLAB

0 0.2 0.4 0.6 0.8 1 1.2-150

-100

-50

0

50

100

150

200

250Impulse Response

Time (sec)

Am

plitu

de

Page 31: CURSO_BÁSICO_DE_MATLAB

TALLER 7.

SIMULINK EN CONTROL

En los siguientes subapartados se realizará un estudio del comportamiento de los sistemas analógicos de segundo orden, ante diversos tipos de excitación, usando Simulink.

Sistemas de Segundo Orden

Para comenzar se estudiará la respuesta de un sistema analógico de segundo orden a una entrada tipo escalón unitario, tal como se indica en la figura 1. La señal de entrada es generada por un bloque Step input (sublibrería Sources), para el que se fijará a 1 segundo el instante en que tiene lugar el escalón. El sistema de segundo orden es un bloque Transfer Fcn (sublibrería Continuous) en el que se tienen que fijar los coeficientes del polinomio numerador y los del denominador. Si, por ejemplo, se pretende simular un sistema del tipo,

con ωn = 1 y δ = 0;5, se tendrá que fijar el numerador a [1] y el denominador a [1 2*0.5*1 1]. Finalmente, para visualizar la señal de salida, se usará el bloque Scope (sublibrería Sinks).

Figura 1: Sistema de segundo orden

Para realizar la simulación se debe seleccionar la opción Simulation. Antes de pulsar en start, se deben ajustar los parámetros de la simulación: start time (0.0), stop time (19.94), max step size (0.02), min step size (0.01) y tolerance (0.001). Tras estos ajustes ya se puede realizar la simulación y visualizar en el scope la señal de salida, que debe ser oscilatoria y amortiguada, por tratarse de un sistema subamortiguado (δ < 1).

Al abrir el bloque Scope se deberán ajustar en el visualizador los rangos vertical y horizontal, que se fijaran a 2 y 20 respectivamente.

La señal de salida y(t) puede transferirse en forma muestreada (y(nT), donde T es el periodo de muestreo) al entorno de MatLab usando el bloque To Workspace (sublibreria Sinks), en el que debe fijarse el nombre de la variable MatLab de salida (yout) ), se debe verificar que la variable sea array. Ya en línea de comando de MatLab, puede visualizarse la señal de salida mediante, >>plot(tout,yout);

Determinar, la sobreoscilación y el tiempo de establecimiento al 2%, y comparar con las predicciones teóricas. Repetir lo anterior para δ = 1 (sistema críticamente amortiguado) y δ = 1.5 (sistema sobreamortiguado). Comentar los resultados superponiendo en una sola gráfica las respuestas escalón de los tres tipos de sistema.

Funciones de Transferencia con Ceros

A continuación se comprobará el efecto de la introducción de ceros en la función de transferencia. Si al sistema de segundo orden del apartado anterior (δ = 0.5 y ωn = 1) se le añade ahora un cero en z0 = -1/a, la función de transferencia será:

Page 32: CURSO_BÁSICO_DE_MATLAB

Comprobar el efecto de dicho cero para a = 1, 0.5, 0.2; 0.1; 0.05. ¿Para qué valores de a puede despreciarse el efecto del cero?

Sistemas Realimentados

Un amplio rango de sistemas, entre los que se encuentran diversos tipos de sistemas de control, presenta una topología con realimentación. Como ejemplo de sistema realimentado se trazará el sistema realimentado de la figura 2. Siguiendo las indicaciones del apartado anterior, se medirán la sobreoscilación y los errores de posición y velocidad. Comprobar con las predicciones teóricas.

Figura 2: Sistema de segundo orden con realimentación.

Para medir el error de velocidad, es necesario generar una señal de entrada tipo rampa unitaria, que puede obtenerse mediante el generador Rampa con una pendiente igual a 1. A continuación se comprobará el efecto que produce en el sistema anterior la introducción de un controlador PI (ver figura 3),

con kp = ki = 1. Medir de nuevo la sobreoscilación y los errores de posición y velocidad (usando entradas tipo escalón unitario y rampa unitaria). Modificar los valores de los parámetros del controlador para reducir la sobreoscilación.

Figura 3: Sistema realimentado con controlador PI.

Page 33: CURSO_BÁSICO_DE_MATLAB

TALLER 8. MÉTODOS GRÁFICOS

Lugar de las raíces Se denomina lugar de raíces a la gráfica de la posición de las raíces de la ecuación característica de un sistema, es decir el denominador de la función de transferencia de lazo cerrado, con la variación de cero a infinito de algún parámetro, normalmente la ganancia de la función de transferencia de la rama directa.

De acuerdo con lo señalado, al resultar la función de transferencia de lazo cerrado la forma:

( ) ( )( ) 1 ( ) ( )

=+

C s G sR s G s H s

Por lo tanto la ecuación característica es: 1 ( ) ( ) 0+ =G s H s o bien: ( ) ( ) 1= −G s H s

Las raíces de la ecuación característica determinan tanto la estabilidad del sistema como la forma de la respuesta del mismo.

La función rlocus produce la gráfica del lugar geométrico de raíces de la función de transferencia de lazo abierto:

( )1

0 1 1

10 1 1( ) ( )

−−

−−

=+ + + +

+ + + +

L

Lm m

m m

n nn nk

a s a s a s a

b s b s b s bG s H s

en esta se tiene un polinomio numerador (num) y un polinomio denominador (den) y una ganancia K.

Instrucción: [r,k] = rlocus (num,den,m)

Esta instrucción determina los vectores r y k de las raíces (r) y las ganancias correspondientes (k) de la función de transferencia definida por los vectores num y den, de los coeficientes de los polinomios del numerador y denominador de la función de transferencia de lazo abierto G(s)H(s) y la variable de entrada opcional m, un vector de ganancias de entrada especificadas por el usuario.

El comando rlocfind permite señalar un punto del lugar de las raíces y calcula la ganancia que sitúa los polos en lazo cerrado en dicho punto. Además devuelve la posición de todos los polos en lazo cerrado para esa ganancia.

» [k,p]=rlocfind(num,den)

Obtener la gráfica del Lugar Geométrico de Raíces del siguiente sistema de realimentación unitaria:

» num=[1,2,3]; » den=[1,3,3,1]; » [r,k]=rlocus(num,den) r = -1.0000 -1.0000 + 0.0000i -1.0000 - 0.0000i -1.4169 -0.8082 + 0.3509i -0.8082 - 0.3509i -1.5631 -0.7570 + 0.4633i -0.7570 - 0.4633i -1.7735 -0.7023 + 0.6098i -0.7023 - 0.6098i -2.0965 -0.6576 + 0.7961i -0.6576 - 0.7961i

Page 34: CURSO_BÁSICO_DE_MATLAB

-2.6505 -0.6506 + 1.0155i -0.6506 - 1.0155i -3.7724 -0.7138 + 1.2268i -0.7138 - 1.2268i -4.2834 -0.7431 + 1.2732i -0.7431 - 1.2732i -9.9758 -0.8913 + 1.3927i -0.8913 - 1.3927i Inf -1.0000 + 1.4142i -1.0000 - 1.4142i k = Columns 1 through 7 0 0.0333 0.0771 0.1781 0.4117 0.9517 2.2000 Columns 8 through 10 2.7696 8.7584 Inf » plot(r,'x'),title ('Gráfica del Lugar de Raíces'),... xlabel('Eje real'),ylabel('Eje imaginario'),grid

En definitiva, la respuesta obtenida con Matlab debe interpretarse, asignando la ganancia calculada por el programa del modo que gráficamente se indica para algunas de las raíces graficadas, a continuación:

Page 35: CURSO_BÁSICO_DE_MATLAB

Diagrama de Bode El comando bode dibuja el diagrama de Bode de una función de transferencia. El comando margin dibuja el diagrama de Bode y calcula los valores de los márgenes de fase y ganancia y las frecuencias de cruce de fases y ganancias.

» bode(n,d) » margin(n,d)

Determine mediante el criterio simplificado de Bode el rango de valores de K de un controlador proporcional en cascada tanto G1 como el bucle cerrado son estables.

Para hallar la función de transferencia en bucle cerrado es G3.

>> [g3n, g3d ] = series (g1n,g1d,g2n,g2d)

Se obtiene como resultado:

g3n = [ 0 0 0 5 ]

g3n = [ 0.005 0.02 0.52 1.0 ]

siendo los polos de G3:

>> roots(g3d)

-1.0000 + 9.9499i

-1.0000 - 9.9499i

-2.0000

Para obtener el diagrama de Bode y determinar a continuación los márgenes de ganancia y de fase:

Page 36: CURSO_BÁSICO_DE_MATLAB

>>[g3m, g3f, w] = bode(g3n, g3d) >>margin(g3m,g3f,w)

El resultado es:

-60

-40

-20

0

20

Mag

nitu

de (d

B)

10-1 100 101 102-270

-180

-90

0

Pha

se (d

eg)

Bode DiagramGm = -13.1 dB (at 10.2 rad/sec) , Pm = -60.7 deg (at 13.1 rad/sec)

Frequency (rad/sec)

Como es posible observar, el margen de ganancia es negativo y el margen de fase también. Para obtener su valor:

>>[Gm, Rm, wGm, wFm] = margin(g3m, g3f, w);

Resultado:

Gm = 0.2182

Fm = -60.80

wGm = 10.206

wFm = 13.090

de donde:

· Margen de ganancia: Gm= 0.2182= -13.22 dB para un w= 10.206 rad/s.

· Margen de fase: fm= -60.80 para un w= 13.09 rad/s.

Luego se determina el rango de valores de K (controlador proporcional) que estabiliza el sistema en

Lazo cerrado es 0 < K < 0.2182.

Verificar mediante el diagrama de Nyquist la situación antes de compensar (K=1) y después de compensar (K= 0.18).

g5n = 0.18 * g3n; g5d = g3d; nyquist( g3n,g3d);

Page 37: CURSO_BÁSICO_DE_MATLAB

% la siguiente instrucción genera un vector de frecuencias % que se utilizara en la segunda gráfica a superponer [re, im, w] = nyquist(g3n,g3d); hold on; nyquist(g5n ,g5d, w)

-5 -4 -3 -2 -1 0 1 2 3 4 5-4

-3

-2

-1

0

1

2

3

4Nyquist Diagram

Real Axis

Imag

inar

y A

xis

Como se puede observar el nodo de -1+j0 es N=0.

Page 38: CURSO_BÁSICO_DE_MATLAB

REFERENCIAS

1. MATLAB, The Language of Technical Computing- “Getting Started with MATLAB”

2. EHIRCH, LEONARD and WILLIAM, Using MATLAB to Analize and Design Control Systems. The Benjamin/Cummings Publishing Company, Inc.

3. MAZZONE, Virginia. Introducción a MATLAB y SIMULINK para Control. Automatización y Control Industrial. Universidad Nacional de Quilmes, 2002.

4. SARMIENTO, Henry y BOTERO, Héctor. Curso básico de Matlab. Universidad de Antioquia, Facultad de Ingeniería, Departamento de Ingeniería Eléctrica. 2006.

5. SILVA BEARD, Andrea. Computación aplicada a procesos químicos. Departamento de Ingeniería y Ciencias Químicas, UIA.

6. Sistemas de Control. Facultad de Ingeniería, Universidad de Buenos Aires.