Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
Introduccion
a
MATLAB
J.M. Gonzalez de Durana
Dpto. de Ingenierıa de Sistemasy Automatica
EUITI e ITT, UPV-EHUVITORIA-GASTEIZ
26 de enero de 2004
2
Capıtulo 1
Los primeros pasos en Matlab
1.1 Caracterısticas
Matlab es un paquete de software orientado hacia el calculo numerico cientıfico e in-genieril. Integra calculo numerico, computacion de matrices y graficos en un entorno detrabajo comodo para el usuario. Su nombre significa Laboratorio de Matrices y fue escritoinicialmente en base a los ya existentes paquetes de calculo matricial LINPACK y EIS-PACK. Posteriormente se han anadido librerıas, denominadas Toolboxes, especializadasen diferentes areas cientıficas. De entre ellas podemos destacar
• Simulink Toolbox
• Control System Toolbox
• System Identification Toolbox
• Robust Conntrol Toolbox
• Signal Processing Toolbox
• Filter Design Toolbox
• Symbolic Math Toolbox
por su particular interes para nuestra area de conocimiento. La ultima de la lista, Symbolic
Math Toolbox, esta basada en el programa de calculo simbolico Maple y utiliza una sintaxisdiferente.
Matlab ha evolucionado y crecido con las aportaciones de muchos usuarios. En entor-nos universitarios se ha convertido, junto con Mathematica y Maple, en una herramientainstructora basica para cursos de matematicas aplicadas ası como para cursos avanzadosen otras areas. En entornos industriales se utiliza para investigar y resolver problemaspracticos y calculos de ingenierıa. Son aplicaciones tıpicas el calculo numerico, la realiza-cion de algoritmos, la resolucion de problemas con formulacion matricial, la estadıstica,la optimizacion, etc. Es de destacar la aplicacion en el estudio, simulacion y diseno de lossistemas dinamicos y de control.
3
4 CAPITULO 1. LOS PRIMEROS PASOS EN MATLAB
1.2 Funcionamiento
Matlab es un programa interprete de comandos. Esto quiere decir que es capaz de procesarde modo secuencial una serie de comandos previamente definidos, obteniendo de formainmediata los resultados. Los comandos pueden estar ya definidos en el propio Matlab ypueden tambien ser definidos por el usuario. Para que Matlab pueda realizar este procesoel usuario ha de escribir la lista de comandos en la ventana de comandos, si su numero esreducido, o en un fichero con extension .m, constituyendo entonces un programa.
El metodo que debe seguirse para procesar los datos es muy simple:
1. El usuario escribe expresiones en la ventana de comandos, o bien en un archivo detexto apropiado (archivo.m).
2. Tras la orden de ejecucion enter (o escribir el nombre del fichero), Matlab procesala informacion.
3. Matlab Escribe los resultados en la ventana de comandos y los graficos (si los hu-biere) en otras ventanas graficas.
1.3 Sintaxis
Para escribir las expresiones es preciso respetar ciertas reglas sintacticas propias de Mat-lab. Algunas se parecen bastante a las de otros lenguajes de programacion por lo que noresultan extranas.
1.3.1 Expresiones algebraicas
Estan formadas por cadenas de caracteres, numeros y operadores algebraicos. Las cadenasde caracteres pueden ser sımbolos de variables (matrices) o funciones de Matlab. Lasmayusculas y minusculas son distintas.
Podemos distinguir dos tipos de expresiones: numericas (propias de Matlab) y simbolicas(propias de Maple). Una expresion numerica puede conterner sımbolos (nombres de varia-bles) pero estos han de estar previamente asignadas a valores numericos. Las expresiones
>> a = 2; b = 3;
>> a + b
son numericas; el valor de a + b es hallado y mostrado por Matlab inmediatamen-te: ans = 5. Sin embargo, una expresion simbolica puede contener sımbolos sin valornumerico asignado. Si escribimos
>> syms x
>> p = 2*x^2 - 7;
la segunda expresion representa un polinomio en la indeterminada x. El valor de p parax = 1 se puede obtener con
>> subs(p,x,1)
que dara como resultado: ans = 5.
1.3. SINTAXIS 5
1.3.2 Operadores
Hay operadores para numeros (reales o complejos) y para matrices.
Para numeros: + - * / ^
Numeros complejos: Esta definida la unidad imaginaria,√−1, que se denota indistinta-
mente por los sımbolos i y j
Para matrices: + - * / \ ^
Para matrices elemento por elemento: .+ .- .* ./ .^
Los operadores para numeros se colocan entre dos numeros y dan como resultado otronumero. Por ejemplo 2 + 3 o a + b, si a y b han sido asignadas previamente a numeros.Los operadores para matrices se colocan entre dos matrices y dan como resultado otramatriz.
Los operadores de relacion son para numeros reales, se colocan entre dos numeros ydan como resultado 1, que significa cierto, o 0, que significa falso. El significado de todosellos resulta obvio, si bien conviene aclarar que el operador == significa igual, en el sentidode condicion (por ejemplo a==b puede ser cierto o falso), y es diferente del operador = quesirve para asignar un valor a una variable (por ejemplo a=3) significa dar a la variablea el valor de 3. El operador ~= significa distinto, tambien en el sentido de condicion.Los operadores de condicion se utilizan, sobre todo, en las estructuras de programacionif-then-else, for, y while.
Para delimitar las matrices se utilizan los corchetes “[ ]”. Para separar elementosconsecutivos, el espacio en blanco (barra espaciadora) o la coma , y para pasar de fila,
la tecla enter o el punto y coma ; .
La traspuesta conjugada de una matriz de numeros complejos A se representa por A’.
Otros operadores, para usos varios, son
Ayudas al usuario: who, help, ! , save, load
Operaciones logicas: & (AND), ! (OR), ~ (NOT)
1.3.3 Funciones elementales
Matlab dispone de las funciones elementales mas comunes (las que tienen las calculado-ras de bolsillo) y otras especiales, propias. Realizan una operacion sobre un argumentonumerico dado de tipo matriz y operan elemento por elemento. Las mas usuales son:
Trigonometricas: sin, cos, tan, asin, acos, atan, sinh, cosh, tanh, asinh, acosh, atanh.
Logicas: any, all, find, exist, isnan, finite, isempty, isstr, strcomp.
Otras: abs, angle, sqrt, real, imag, conj, round, fix, floor, ceil, sign, rem, exp, log, log10.
Especiales: bessel, gamma, rat, ert, invertf, ellipk, ellipj.
6 CAPITULO 1. LOS PRIMEROS PASOS EN MATLAB
1.4 Desarrollo de una sesion
Los manuales de Matlab explican detalladamente los conceptos, comandos y procedimien-tos del programa. Aquı vamos realizar una introduccion a su manejo mediante algunosejemplos. Es conveniente que los alumnos realicen por su cuenta otros parecidos y tratende utilizar Matlab para resolver problemas de Matematicas, Fısica y otras asignaturas.
La instalacion se realiza automaticamente con el CD de Matlab. Una vez instalado elprograma, al picar con el raton en el icono de MATLAB aparece en la pantalla la ventana:
Esta ventana se llama MATLAB command window y es en la que el usuario opera.En la primera lınea aparecen las opciones disponibles.
1.4.1 Comandos de Utilidad
Los comandos demo, help, who, whos, dir, diary y algunos otros, resultan muy utilespera el usuario en el desarrollo de la sesion.
El comando demo nos muestra, de modo interactivo, un amplio abanico de ejemplosde aplicacion de Matlab y es de gran ayuda durante nuestros inicios con el programa.
El comando help funcion_deseada muestra en la pantalla un texto explicando comose utiliza. Por ejemplo,
>> help poly
POLY Characteristic polynomial.
If A is an N by N matrix, POLY(A) is a row vector with
N+1 elements which are the coefficients of the
characteristic polynomial, DET(lambda*EYE(A) - A) .
If V is a vector, POLY(V) is a vector whose elements are
the coefficients of the polynomial whose roots are the
elements of V . For vectors, ROOTS and POLY are inverse
functions of each other, up to ordering, scaling, and
roundoff error.
1.5. OPERACIONES NUMERICAS 7
ROOTS(POLY(1:20)) generates Wilkinson’s famous example.
See also ROOTS, POLYVAL.
muestra en la pantalla la ayuda sobre el polinomio caracterıstico de una matriz. El usode la ayuda es muy conveniente, sobre todo en el perıodo de aprendizaje.
Los comandos who y whos dan una lista de las variables que estan actualmente en lamemoria (workspace de Matlab. El comando dir, igual que el de DOS, lista el directorioactual. El comando diary sirve para que todo lo que vamos tecleando y los resultadosobtenidos (incluidos los errores) se almacene en un archivo. Para ello debemos escribir,en el instante a partir del cual queremos grabar la sesion
>> diary dia12
en donde dia12 es el nombre del archivo en el que queremos que se escriba. Para terminarel proceso de grabacion hemos de teclear
>> diary off
El uso de la ayuda es muy conveniente, sobre todo en el perıodo de aprendizaje.
1.5 Operaciones numericas
Matlab puede operar como una calculadora: si el usuario escribe las ordenes apropia-das, los resultados aparecen en la ventana de comandos (Command Window). Observeseque si ponemos ; al final de la expresion el resultado no se escribe en la pantalla.Es capaz de realizar las operaciones aritmeticas suma, resta, multiplicacion, division ypotenciacion, con numeros (reales y complejos), con vectores (polinomios) y con matri-ces. Ademas, mediante la librerıa Symbolic Math Toolbox, puede tambien operar conexpresiones simbolicas.
1.5.1 Operaciones aritmeticas
Las operaciones aritmeticas con numeros son, quizas, las mas sencillas que pueden efec-tuarse. Para ilustrar su realizacion, a continuacion se muestran una serie de lıneas quecomienzan por >>, indicativo (o prompt) de la pantalla de comandos en una sesion de Ma-tlab, seguido de una orden y del resultado que aparecerıa inmediatamente en la pantallasi se ejecutara.
>> a = 4
a =
4
>> b = 5 + a
b =
9
>> c = a^2 + b^2
c =
97
>> sin (30*pi/180)
ans =
1/2
8 CAPITULO 1. LOS PRIMEROS PASOS EN MATLAB
Si el usuario no ha asignado el resultado a una variable, Matlab lo hace utilizando lavariable “ans”
Numeros complejos
La forma de operar con numeros complejos es igual que para los reales.
>> a=1; b=2; c=3;
>> x1=(-b+sqrt(b^2-4*a*c))/(2*a)
x1 =
-1.0000 + 1.4142i
>> x2=(-b-sqrt(b^2-4*a*c))/(2*a)
x2 =
-1.0000 - 1.4142i
>> a*x1^2+b*x1+c
ans =
0
>> c1=1+2*i
c1 =
1.0000 + 2.0000i
>> c2=1-2*i
c2 =
1.0000 - 2.0000i
Paso rectangulares ↔ polares:
>> M=abs(c1)
M =
2.2361
>> alpha=angle(c1)
alpha =
1.1071
>> alpha_grados=alpha*180/pi
alpha_grados =
63.4349
>> M*cos(alpha)
ans =
1
>> M*sin(alpha)
ans =
2
Podemos comprobar el resultado con las ordenes real(c1), imag(c1)
Operaciones con vectores
MATLAB no precisa una notacion especial para vectores. Vamos a hacer algunas opera-ciones sencillas con vectores.
1.5. OPERACIONES NUMERICAS 9
>> a = [1 2 3 4 6 4 3 4 5]
a =
1 2 3 4 6 4 3 4 5
>> b = a + 2
b =
3 4 5 6 8 6 5 6 7
>> c = a + b
c =
4 6 8 10 14 10 8 10 12
>> d = a .* b
c =
3 8 15 24 48 24 15 24 35
Los vectores, por defecto, son vectores fila.
Operaciones con polinomios
Los polinomios se representan en Matlab como vectores fila. Por ejemplo, el polinomio3s3 − 5s2 + 7s + 3 se representa por
>> p=[3 -5 7 3]
Las raıces de un polinomio se hallan mediante la funcion roots:
>> r=roots(p)
El producto de dos polinomios se realiza a traves de la convolucion de los vectores desus coeficientes, mediante la funcion conv. Por ejemplo,
>> p1=[-1 -3 3 4];
>> p2=[1 2 4 0];
>> p=conv(p1,p2);
Para la division se usa la deconvolucion. Mediante la funcion deconv se obtiene elcociente q y el resto r de la division.
>> [c,r]=deconv(p,p1);
La funcion polyval sirve para hallar el valor de un polinomio. Si el parametro que lepasamos es un vector, calcula otro vector con los valores del polinomio para cada uno delos del vector.
La funcion polyfit sirve para hacer ajustes polinomicos de una secuencia de datosdada por dos vectores X e Y. Se puede elegir el grado del polinomio. En el siguienteejemplo se utilizan estas dos funciones:
>> x=[0:10];
>> y=rand(x);
>> plot(x,y)
>> p=polyfit(x,y,3); % Elegimos grado 3
>> z=polyval(p,x);
>> hold
>> plot(x,z)
10 CAPITULO 1. LOS PRIMEROS PASOS EN MATLAB
Citaremos por ultimo la funcion residue que sirve para hallar los residuos de unafuncion racional en los polos de la misma (o coeficientes de su expansion en fraccionessimples), bajo el supuesto de que los polos sean simples. Ademas, dicha funcion calculatambien los polos y el termino directo.
>> B = [1 2 3 4];
>> A = [1 2 3 4 5 6 7];
>> [r,p,k] = residue(B,A);
Operaciones con matrices
Veamos como se efectuan algunas de las operaciones mas comunes con matrices:Introducir una matriz A:
>> A = [1 2 3;4 5 6;7 8 0]
Calculo de la transpuesta:
>> B = A’
Producto matricial:
>> C = A * B
Determinante:
>> det(A)
Rango de la matriz:
>> rank(A)
Numero de condicion:
>> cond(A)
Matriz inversa:
>> inv(A)
Valores propios y vectores propios:
>> [val,vec]=eig(A)
Valores singulares:
>> svd(A)
Exponenciacion matricial (eA):
>> expm(A)
Polinomio caracterıstico:
>> p = poly(A)
Las raıces de p, roots(p), deben ser los valores propios de A, eig(A).
1.6. OPERACIONES SIMBOLICAS 11
1.6 Operaciones simbolicas
La librerıa Symbolic Math Toolbox da acceso a Matlab a algunas funciones del nucleo deMaple que permiten operar con expresiones simbolicas.
1.6.1 Operaciones aritmeticas
En las primeras versiones de la librerıa Symbolic Math Toolbox era necesario emplearlos comandos especiales symadd, symsub, symmul, symdiv y sympow para las operacionesde suma, resta, multiplicacion, division y potenciacion, respectivamente, de expresionessimbolicas. Afortunadamente, esto ya no es necesario y se pueden usar para ello losoperadores numericos +, -, +, *, / y ^, siempre y cuando las variables simbolicas sehayan declarado previamente con sym() o syms. Si ponemos
>> syms a b p x
>> a = x^3+3*x^2-2*x+7;
>> b = x^2+x+3;
>> p = a * b
p =
(x^3+3*x^2-2*x+7)*(x^2+x+3)
obtenemos el polinomio producto en forma factorizada. Si lo queremos ver forma expan-dida, pondremos
>> expand(p)
ans =
x^5+4*x^4+4*x^3+14*x^2+x+21
Las demas operaciones simbolicas se efectuan de modo similar.
1.6.2 Sustitucion de variables
La sustitucion de un sımbolo por otro en una expresion simbolica se puede realizar conla orden subs. La forma de hacerlo es subs(expr, old, new), en donde expr es unaexpresion simbolica, old es el sımbolo (o valor) que se desea sustituir y new es el nuevosımbolo o valor.
Supongamos que en el polinomio f = ax2 + bx + c queremos sustituir x por -1. Paraello, si escribimos
>> syms x a b c
>> f = a*x^2 + b*x + c;
>> g = subs(f,x,-1)
entonces sale
g =
a - b + c
Se pueden tambien sustituir varias variables a la vez. Si en el mismo polinomio de antesquisieramos sustituir a por 1, b por 2 y c por k, podemos poner
12 CAPITULO 1. LOS PRIMEROS PASOS EN MATLAB
>> syms x a b c k
>> f = a*x^2 + b*x + c;
>> g = subs(f,[a,b,c],[1,2,k])
y obtendremos
g =
x^2+2*x+k
Numerador y denominador
En una expresion simbolica racional suele interesar conocer el numerador y el denominadorde la misma. Para esto tenemos la orden numden. Si, por ejemplo, nos dan la expresion
h =x2 + 1
2x − 1+
x
x − 1,
podemos hallar el denominador y el denominador de la misma con
>> x=sym(’x’)
>> h = (x^2+1)/(2x-1) + x/(x-1);
>> [n,d] = numden(h)
n =
x^3+x^2-1
d =
(2*x-1)*(x-1)
Conversion de polinomios
Las ordenes poly2sym y sym2poly sirven, respectivamente, para convertir un polinomioexpresado en forma numerica (vector de coeficientes) en su expresion simbolica, y vice-versa. El siguiente ejemplo ilustrara su utilizacion.
>> syms x
>> p = [1 2 3 4 5]
>> px = poly2sym(p,x)
px = x^4+2*x^3+3*x^2+4*x+5
>> sym2poly(px)
ans =
1 2 3 4 5
1.7 Graficos
Matlab tiene una buena coleccion de comandos para obtener representaciones graficas apartir de datos numericos y tambien algunos para expresiones simbolicas.
1.7. GRAFICOS 13
1.7.1 Graficos en 2D
En las aplicaciones interesa a veces conocer el valor numerico de una funcion y = f(x)para uno o varios valores de la variable. En Matlab, dada una funcion y = f(x), definidaen un intervalo [a, b], es posible representarla por un par (x,y) de vectores de numeros,tales que el vector x contiene un conjunto finito de valores de x y el vector y contiene elconjunto de valores imagenes de x por la funcion y, calculados por el propio Matlab. Unavez representada de este modo la funcion, se puede representar graficamente.
Por ejemplo, dada la funcion y = 10(1−e−x/3sin(10x)), definida en el intervalo [0, 10],una posible representacion en Matlab, seguida de su representacion grafica, serıa
>> x=[0:0.1:10];
>> y=10*(1-exp(-x/3).*sin(10*x));
>> plot(x,y),title(’Grafica de una funcion’)
0 1 2 3 4 5 6 7 8 9 100
2
4
6
8
10
12
14
16
18
20Gráfica de una función
La grafica corresponde a una funcion sinusoidal amortiguada mas una constante.
1.7.2 Graficos en 3D
Las funciones de dos variables, de la forma f(x, y) se pueden representar graficamentecon Matlab en 3D. Para ello es preciso crear un dominio de puntos en forma de mallarectangular en el plano (x, y), dentro del cual se desea representar la funcion. Esto sehace con la orden meshgrid (antes meshdom) de Matlab. Veamoslo con un ejemplo. Seala funcion z : R
2 → R,z =
√1 − x2 − y2,
cuyo dominio es el cırculo x2 + y2 < 1, y supongamos que queremos calcular los valoresde z en una region rectangular del plano (x, y) definida por los puntos (-1.25,-1.25) y(1.25,1.25), y representarla graficamente. Para ello escribiremos:
14 CAPITULO 1. LOS PRIMEROS PASOS EN MATLAB
>> [x,y] = meshgrid(-1.25:0.2:1.25,-1.25:0.2:1.25);
>> z = sqrt(1 - x.^2 - y.^2);
>> mesh(z)
y en la pantalla aparecera el grafico.
02
46
810
1214
0
5
10
150
0.2
0.4
0.6
0.8
1
1.8 Ficheros-m
Matlab esta dotado de un mecanismo que le permite interpretar ficheros de texto, conla condicion de que su nombre termine por .m. Se utilizan principalmente para crearfunciones (en el sentido matematico), programas y funciones (ordenes) de Matlab.
1.8.1 Funciones-funcion
Mediante ficheros-m podemos crear funciones en el sentido matematico:
f : x → f(x)
La denominacion que da Matlab a estas funciones es funciones-funcion (function func-tions). Estas funciones permiten realizar integracion numerica, resolver ecuaciones nolineales, problemas de optimizacion y resolver ecuaciones diferenciales. Veamos un par deejemplos.
Dentro del editor definimos la funcion f1(x)
function y=f1(x)
y=1 ./ ((x-0.3).^2+0.01) + 1 ./((x-0.9).^2+0.04)-6;
Una vez salvado el fichero podemos calcular la funcion en un intervalo y dibujarla.
1.8. FICHEROS-M 15
>> x=[-1:0.1:2];
>> y=f1(x);
>> plot(x,y);
−1 −0.5 0 0.5 1 1.5 2−20
0
20
40
60
80
100Función y=f1(x)
Es posible hallar los valores maximo y mınimo de la funcion en un intervalo:
>> xmin = fmin(’f1’,0.5,1);
xmin =
0.6370
>> ymin=f1(xmin);
ymin =
11.2528
Otro ejemplo puede ser representar la funcion
f =1
1
x+
1
y
utilizada en Optica. Para ello creamos el fichero lente.m con la definicion de la funcion.Escribimos
function z=lente(x,y)
z = 1 ./ (1 ./ x + 1 ./ y);
grabamos el fichero, con el nombre lente.m, y ya podemos utilizar la funcion y represen-tarla graficamente.
16 CAPITULO 1. LOS PRIMEROS PASOS EN MATLAB
>> x=[-1:0.05:1];
>> y=x;
>> [xx,yy]=meshdom(x,y);
z=lente(xx,yy);
atgz=atan(z);
mesh(atgz,[60 60])
title(’Funcion lente. f= 1/(1/x + 1/y)’)
010
2030
4050
0
10
20
30
40
50
−2
−1.5
−1
−0.5
0
0.5
1
1.5
2
Función de dos variables
Podemos asimismo hallar el valor mınimo en un intervalo:
>> xmin=fmin(’f1’,0.5,1)
>> ymin=f1(ymin)
1.8.2 Programacion
Para evitar teclear repetidamente las mismas funciones, Matlab permite crear un ficherocon una lista de comandos que luego, al ser llamado, interpreta secuencialmente. Dispone,como otros lenguajes de programacion, de las estructuras if-then-else, while y for. Elarchivo en el que se escriben las ordenes de Matlab (programa) ha de tener la extension.m y se puede escribir con cualquier editor de texto.
Para ejecutar el programa, simplemente ponemos su nombre
>> nombre-fichero
el mismo nombre que hayamos puesto antes (pero sin .m). En un fichero-m podemos colo-car simplemente una lista de instrucciones de Matlab con lo que al llamarlo se ejecutaransecuencialmente.
Matlab tiene un lenguaje de programacion propio, de tipo interprete. Es decir, escapaz de interpretar una lista de instrucciones contenidas en un fichero-m. Igual que
1.8. FICHEROS-M 17
otros lenguajes de programacion, dispone de las estructuras de programacion clasicas:if-then-else, for, y while.
Estructura if-then-else
La sintaxis de la estructura if-then-else es
if condicion1
orden1a
orden2a
...
...
elseif condicion2
orden1b
orden2b
...
...
else
orden n
end
en donde orden1*, orden2*, . . . , son ordenes y condicion1, condicion2, . . . , estamentoscondicionales o booleanos de Matlab. Puede observarse que no se pone la palabra then.Veamos un ejemplo.
if i==j
A(i,j) = 2;
elseif abs(i-j) == 1
A(i,j) = -1;
else
A(i,j) = 0;
end
Estructura for
La sintaxis de la estructura for es
for variable=expression
orden1a
orden2a
...
...
end
en donde orden1*, orden2*, . . . , son ordenes de Matlab. Por ejemplo,
A = zeros(3,4)
for i=[1:4]
for j=[1:4]
A(i,j) = i+j;
18 CAPITULO 1. LOS PRIMEROS PASOS EN MATLAB
end
end
Puede haber, como en este ejemplo, varios bucles for anidados.
Estructura while
La sintaxis de la estructura while es
while condicion
orden1a
orden2a
...
...
end
en donde orden1a, orden2a, . . . , son ordenes y condicion es un estamento condicionalo booleano de Matlab. Como ejemplo, podrıamos poner
n = 0; eps=1;
while 1+eps > 1
eps = eps/2;
n = n+1;
end
Capıtulo 2
Simulink
2.1 Inicio
Un diagrama de bloques es un modelo grafico que representa el modelo matematico deun determinado sistema dinamico. Simulink es una librerıa (toolbox ) de Matlab quepermite representar el diagrama de bloques de un sistema y a continuacion proceder a susimulacion.
El programa se inicia escribiendo simulink en la pantalla de comandos de Matlab otambien pulsando con el raton en el icono coloreado de Simulink que aparece en la ventanade comandos de Matlab. Con ello se abre una ventana titulada Simulink Library Browser
que contiene la librerıa Simulink y otras que son, digamos, complementarias. Al pulsarsobre el signo + que precede a su nombre, aparece una nueva lista y entonces en lapantalla veremos:
− Simulink
— Countinous
— Discrete
— Math Operations
— Signal Routing
— Sinks
— Sources...
+ Dials & Gauges Blockset
+ Stateflow
...
Los elementos de la lista de Simulink son los esenciales para construir diagramas debloques. El resto son librerıas adicionales especializadas areas especıficas de control, enformas avanzadas de simulacion, etc.
19
20 CAPITULO 2. SIMULINK
2.2 Creacion y simulacion de un modelo
Para aprender a manejar Simulink comenzaremos realizando el modelo de un sistema decontrol simple.
Dado el diagrama de bloques de un sistema de control,
U(s)+
-
K G(s)Y (s)
H(s)
en donde
K = 5, G(s) =s + 1
s2 + 4, H(s) =
2s + 1
s + 1
y suponiendo que la entrada es una funcion de tipo escalon unitario, queremos realizar lasimulacion del mismo con Simulink.
La construccion del modelo es muy sencilla. En primer lugar hemos de abrir unaventana para hacer el dibujo. Esto se hace picando con el raton en primer el icono de laizquierda (hoja en blanco) de la ventana de Simulink o tambien seleccionando con el ratonFile → New → Model, en la misma. A continuacion iremos colocando en esta ventanalos bloques del diagrama, para lo cual hemos de buscarlos en las librerıas de Simulink.Veamos donde se encuentran en este caso.
Para los bloques G(s) y H(s), funciones de transferencia, utilizaremos el elementoTransfer Fcn que se encuentra en la librerıa Continuous de Simulink. Una vez encon-trado el bloque, lo arrastramos con el raton a la ventana de dibujo. Como necesitamos doselementos, repetiremos la misma accion de nuevo. Tambien es posible efectuar una copiadel elemento, sin salir de la pantalla de dibujo, sin mas que arrastrar dicho elemento man-teniendo pulsado el boton derecho del raton. Una vez que hemos colocado los dos bloques,procederemos a ponerles sus datos. Para introducir los datos de G(s) repicaremos con elraton en uno de los iconos Transfer Fcn. Veremos entonces que se abre una ventana,y en ella pondremos, en formato numerico, los datos correspondientes a los polinomiosnumerador y denominador de G(s), es decir los vectores [1, 1] y [1, 0, 4] correspondientes,respectivamente, a dichos polinomios. Del mismo modo, lo que haremos para poner losdatos de H(s) es repicar en su icono e introducir los vectores [2, 1] y [1, 1] en la ventanaque se abra.
Para el bloque con funcion de transferencia K constante se podrıa usar tambien elbloque Transfer Fcn si bien parece mas apropiado el bloque Gain que se encuentra enla librerıa Math Operations de Simulink. Elegido este, lo arrastraremos con el raton ala pantalla del dibujo y, tras un repique en el mismo, pondremos un 5 como valor de laganancia.
El bloque adecuado para poner el punto de suma es Sum y se encuentra en la librerıaMath Operations. La ventana que se abre al repicar en el permite poner dos o massignos + o − y cambiar la orientacion de las flechas de entrada y salida segun que la barravertical este en la posicion izquierda, derecha, o entre los signos + y −.
Para realizar la simulacion hemos de poner como entrada una funcion de tipo es-calon. Esto lo hacemos escogiendo el bloque Step de la librerıa Sources de Simulink. Lo
2.2. CREACION Y SIMULACION DE UN MODELO 21
arrastraremos tambien a la ventana de dibujo y, repicando en su icono, pondremos comoparametros los siguientes. Step time = 0, Initial value = 0, Final value = 1.
Y por ultimo, para ver el resultado de la simulacion, necesitamos un elemento en elque se genere el grafico de la respuesta temporal. Lo mas sencillo es colocar el bloqueScope que se encuentra en la librerıa Sinks.
Una vez colocados todos los bloques, utilizando el boton izquierdo del raton, los unire-mos entre sı mediante flechas y acomodaremos su posicion hasta dejarla a nuestro gusto.El resultado puede ser, mas o menos, el siguiente.
s+1
s +42
Transfer FcnSum Step Scope
5
Gain
2s+1
s+1
Transfer Fcn
A veces puede ser conveniente invertir la orientacion de algun bloque para mejorar elaspecto de su conexion. Esto ocurre en este caso con el bloque H(s) en el que las flechasvan hacia atras. El cambio orientacion de un bloque se realiza picando en el mismocon el boton derecho del raton y a continuacion, con el boton izquierdo, en Format →Flip block. De modo similar son tambien posibles otras operaciones, como por ejemploocultar el nombre de un bloque.
Los bloques pueden tener otras opciones que no describimos aquı pero que el usuariopuede ver con facilidad con la ayuda de Matlab, accesible mediante el boton derecho delraton para cada bloque.
Una vez que el modelo ha sido completado, podemos proceder a la simulacion. En laventana del dibujo de Simulink, seleccionamos con el raton en Simulation→ Simulation
parameters. Esto nos permitira escoger los instantes de tiempo inicial y final, el algoritmoy su paso, fijo o variable, ası como algunos otros parametros relacionados con la simulacion.Aparte los tiempos, que pueden variar mucho segun la simulacion de que se trate, losotros valores que Matlab pone por defecto suelen resultar adecuados muchas veces. Comoresultado de la simulacion aparecera en el bloque Scope la grafica de la respuesta temporal.
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 10
0.1
0.2
0.3
0.4
0.5
0.6
0.7
t
y(t)
Respuesta temporal
22 CAPITULO 2. SIMULINK
2.3 Stateflow
Stateflow es una librerıa (toolbox ) de Matlab que permite modelar sistemas de eventosdiscretos dentro de Simulink, utilizando cartas de estado (statecharts). Las cartas deestado fueron introducidas por David Harel (Harel, 1987) y son una generalizacion de lasmaquinas de estados.
La librerıa de Stateflow posee un unico elemento o bloque, denominado Chart, quesirve para representar un sistema de eventos discretos. El bloque Chart se puede conectarcon otros bloques de Simulink, de tiempo continuo o discreto, para formar modelos desistemas hıbridos que pueden ser muy utiles en la investigacion del comportamiento detales sistemas mediante simulacion.
Una carta de estados (statechart) es un grafico formado por elementos graficos sobrelos que van escritos ciertos elementos de texto escritos en un lenguaje especial. Entreellos, hay unos elementos de texto especiales que son los datos y los eventos. La cartaes como la hoja de papel en la que se representan los elementos. Cada carta representaun sistema de eventos discretos y constituye un bloque de Simulink que puede conectarsecon otras cartas o con otros bloques de Simulink.
2.3.1 Elementos graficos
Los elementos graficos de son
• Estados
• Transiciones
• Uniones
mientras que los elementos de texto son
• Datos
• Eventos
Estados
Los estados tienen forma de rectangulo con los bordes redondeados y representan estados(a veces llamados modos o fases) del sistema de eventos discretos. No debemos confundirestos estados con los estados del clasico modelo de estado de un sistema de control. Losestados aquı considerados representan los modos o formas de evolucion del sistema alreaccionar frente a los eventos.
Junto a la esquina superior izquierda, cada rectangulo lleva un texto con un nombreque identifica al estado. Tras el nombre del estado y el separador opcional “/”, puedenaparecer otros textos indicando las acciones que llevara a cabo el sistema cuando este enese estado. La sintaxis de Stateflow permite especificar el instante en que se iniciara laaccion y la duracion de esta:
entry: la accion se inicia al entrar en este estado.
exit: la accion se inicia al salir de este estado.
2.3. STATEFLOW 23
during: la accion se inicia al entrar en este estado y permanece activa durante el tiempoque dura el estado.
on event e : La accion se inicia si, estando en este estado, se produce el evento e.
Posibles acciones son cambiar el valore de una salida o efectuar una llamada a una funcionde Matlab.
S1
S2
e
Figura 2.1: Estados y transicion
Un estado puede contener otros estados, o subestados, dentro de sı. Entonces dichoestado se llama estado padre, o superestado, y los subestados se llaman estados hijos. Haydos posibles formas de descomposicion de un estado (padre) en subestados (hijos). Unestado (padre) tiene descomposicion AND si los estados hijos se activan simultaneamenteal activarse el estado padre y entonces los estados hijos se marcan con lınea discontinua.Un estado (padre) tiene descomposicion OR (exclusiva) si unicamente puede estar activouno de los estados hijos al activarse el estado padre y entonces los estados hijos se marcancon lınea continua.
Transiciones
Las transiciones tienen forma de flecha y representan las transiciones o saltos entre estados,asociados a eventos, que se producen en el sistema de eventos discretos. Cada transicionrepresenta un evento e del sistema y se dibuja como una flecha que va desde el borde deun estado S1 hasta el borde de otro estado S2. Si el sistema esta en el estado S1 y seproduce el evento e, entonces el sistema pasa al estado S2. El disparo de una transicionpuede implicar la ejecucion de una o mas acciones.
Una transicion especial es la llamada transicion por defecto (default-transition), quesirve para senalar el estado inicial del sistema es decir, el primer estado en el que entrara elsistema al iniciar su evolucion, y tambien el estado hijo inicial dentro de un estado padre.Se reconoce por su forma ya que en el extremo opuesto a la flecha lleva un pequeno cırculonegro.
Cada transicion puede tener un texto escrito junto a ella que indica el evento que ha deproducirse para que se dispare la transicion ası como las acciones que entonces el sistemaemprendera. Este texto se divide en tres partes, todas ellas opcionales:
e (en donde e es el nombre de un evento): la transicion se dispara al producirse el eventoe en el sistema. Si no hay nombre de evento entonces la transicion se disparara antecualquier evento del sistema.
24 CAPITULO 2. SIMULINK
[c] (en donde c es una condicion): la transicion se dispara si la condicion c (expresionbooleana) es verdadera y se produce el evento e. Si esta parte no existe, se asume quec es cierta. Si la parte e del texto no existe, se disparara, bajo la misma condicion,siempre y cuando se produzca un evento cualquiera en el sistema.
{a} (en donde a es una accion): al producirse transicion el sistema lleva a cabo la acciona.
Si la transicion no lleva ningun texto, entonces se disparara automaticamente, siempre ycuando se produzca un evento cualquiera en el sistema.
Uniones
Las uniones tienen forma de pequeno cırculo. Hay dos tipos de uniones: uniones conectivas(connective junctions) y uniones de historia history junctions.
Las uniones conectivas son puntos de bifurcacion de la carta de estados y representanpuntos de decision del sistema de eventos discretos. Permiten conectar una transicion deentrada con varias transiciones de salida. Su empleo puede a veces simplificar la carta deestados y hacer que el codigo generado sea mas eficiente.
C2
e1
e2
e3
P H
C1
Figura 2.2: Estados, subestados y uniones
Al entrar en una union conectiva, el sistema, a traves de una condicion, selecciona unade las transiciones de salida para su evolucion.
Las uniones de tipo historia se utilizan en estados que han sido divididos por unadescomposicion OR. Si en el estado padre se pone el sımbolo ©H entonces cada vez quese active el estado padre, el primer estado que se activara sera el estado hijo que estuvoactivo por ultima vez.
2.3.2 Elementos de texto especiales
Datos
Una carta tiene asociados ciertos datos a los que puede acceder. Es necesario declararlosen Stateflow y pueden ser de los siguientes tipos:
• Entrada de Simulink
2.4. CREACION DE UN MODELO CON STATEFLOW–SIMULINK 25
• Salida de Simulink
• Local
• Constante
• Temporal
• Workspace
Los datos declarados como entrada o salida de Simulink generan automaticamente unaentrada o una salida en el bloque Chart creado por Stateflow en Simulink. Los de lostipos local, constante y temporal pueden definirse para toda la carta o dentro de unestado individual. Los datos temporales son solo validos mientras el estado padre se estaejecutando y son reinicializados cada vez que este se activa. El tipo workspace es unaconstruccion especial que permite utilizar el entorno de trabajo (workspace) de Matlabpara compartir datos a traves de toda la simulacion. Los datos por defecto, se almacenanen memoria en formato double de C pero se puede cambiar a otros formatos. Cada datotiene asociado un valor inicial y un intervalo de posibles valores.
Eventos
Estos elementos representan los eventos del sistema. Pueden ser de los tipos:
• Entrada de Simulink
• Salida de Simulink
• Local
Para los eventos que son entradas o salidas de Simulink, Stateflow crea automaticamenteun unico puerto de entrada–salida de eventos en el bloque Chart de Simulink, de formaque todos los eventos entran o salen, formando un vector de eventos, por el mismo puerto.Cada evento lleva asociado un ındice que refiere la posicion del evento en el vector. Laforma de producir un evento en Simulink para que entre en el bloque Chart es a travesde cambio brusco (flanco) de alguna senal. Al declarar el evento en Stateflow, se puedeelegir entre:
• Flanco de subida
• Flanco de bajada
• Flanco indiferente
2.4 Creacion de un modelo con Stateflow–Simulink
Tras arrancar el programa Matlab, creamos un modelo nuevo (new-model) de Simulink ycolocamos en el mismo, con el raton, el bloque Chart de Stateflow.
Con el editor grafico se pueden crear cartas Stateflow, de modo interactivo, simple-mente picando con el raton en cada elemento y arrastrandolo a la ventana de dibujo.Una vez colocados varios estados, podemos crear transiciones picando con el raton en
26 CAPITULO 2. SIMULINK
un estado y arrastrandolo hasta otro estado. Se etiquetan los estados y las transicionesindicando las acciones que van a ocurrir durante la ejecucion y bajo que condiciones seharan las transiciones. Finalmente se anade el historial, uniones, y estados en paralelopara detallar las operaciones del modelo.
Se pueden utilizar sub-cartas (una carta dentro de otra carta) para dotar de jerarquıaal diseno. Se permite crear transiciones entre objetos que residen en diferentes sub-cartasal mismo nivel o a diferentes niveles en la carta superior. Las sub-cartas permiten reduciruna carta complicada a un conjunto de diagramas organizados jerarquicamente. Con ellose consigue que la carta sea mas facil de entender y de mantener sin cambiar para nadasu semantica.
Los pasos a seguir para una aplicacion completa son:
• Crear la carta Stateflow
• Utilizar el Explorer de Stateflow
• Definir un interface de bloques de Stateflow
• Ejecutar la simulacion
• Generar el codigo
La generacion de codigo depende de la maquina en donde se vaya a implementar laaplicacion y no se hace hasta la ultima fase del diseno. El codigo generado por defectoes ANSI C pero existen programas que a partir del modelo de Stateflow generan codigopara otros lenguajes. Entre ellos cabe citar el programa sf2vhld, que es un traductorde Stateflow a VHLD, y el programa sf2plc que genera codigo para programar algunosautomatas programables.
Observaciones
• Si la simulacion va a ser larga se puede adoptar un tiempo de simulacion “infinito”poniendo el parametro de simulacion Stop time = inf.
• Para que se inicie la simulacion el sistema necesita un primer evento, como dearranque. Esto en ocasiones puede resultar molesto porque suele requerir que usua-rio produzca ese evento inicial de forma no muy ortodoxa. Esto puede evitarsemarcando X en la casilla con el texto “Execute (enter) Chart At Initialization” queaparece en el menu File → Chart Properties de la ventana Chart de Stateflow.
2.4.1 Ejemplo
Un sistema de seguridad muy antiguo del ferrocarril son las barreras que se colocanen los cruces entre la vıa ferrea y las carreteras o caminos. Como todos sabemos, elfuncionamiento de una de estas barreras como la de la figura 2.3 es muy sencillo: se abrey se cierra para evitar que los coches choquen con los trenes.
El problema que se plantea es disenar un sistema de control automatico que sea capazde cerrar la barrera cuando se aproxime un tren y de cerrarla cuando el tren haya pasado.Supondremos en principio que la vıa ferrea es de un solo sentido.
2.4. CREACION DE UN MODELO CON STATEFLOW–SIMULINK 27
Figura 2.3: Barrera de tren
Estamos ante un sistema de eventos discretos ya que la presencia y la ausencia deltren son eventos que pueden aprovecharse para abrir y cerrar la barrera.
Para medir desplazamientos consideraremos una recta, eje x, dispuesta a lo largo de lavıa y con origen 0 en el punto en que esta colocada la barrera, siendo el sentido positivoel de salida del tren.
Los componentes necesarios para montar el sistema pueden ser: una barrera accionadapor un motor-reductor, dos sensores de presencia s1 y s2, un sistema digital y reles yelementos auxiliares de conexion.
Cada sensor de presencia se instalara junto al raıl de la vıa de tal forma que al pasarel tren emita una senal. Colocaremos el sensor s1 en un punto x1 en el sentido de llegadadel tren y alejado lo suficiente del cruce como para que de tiempo a bajar la barrera. Elsensor s2 sera colocado en otro punto x2 en el sentido de partida del tren, en otro lugarproximo al cruce. De este modo podremos utilizar las senales de los sensores como eventosindicativos de la presencia del tren dentro del intervalo [x1, x2].
La operacion de la barrera debe ser: cuando el sensor s1 se activa, la barrera debecerrarse; cuando el sensor s2 se activa la barrera puede abrirse.
Para realizar el modelo del sistema de control de eventos discretos vamos a emplearlas posibilidades de division en paralelo (paralelismo) y de trasmision de eventos de quedisponen las cartas de estado.
Los interruptores Sw 1 y Sw 2 indicados en la figura 2.4 son elementos de tipo Manual
Switch de Simulink y sirven de modelos de los sensores de llegada y de salida del tren.Una transicion de 0 a 1 del interruptor Sw 1 (flanco de subida) indicara que llega el treny una transicion de 1 a 0 del interruptor Sw 2 (flanco de bajada) indicara que el tren seha ido.
La carta de estados de Stateflow se compone de dos estados que evolucionan en para-lelo, denominados Tren y Barrera, con dos hijos cada uno. El estado Barrera representael estado de la barrera y tiene dos hijos denominados Abrir y Cerrar. El estado Tren
representa el estado del tren y tiene dos hijos denominados Fuera y Dentro.
La carta de estados tiene como entrada (multiplexada) las senales generadas por losinterruptores Sw1 y Sw2. En el estado Tren, un flanco de subida en la entrada de Sw1
es el evento preciso para disparar la transicion s1 mientras que un flanco de bajada laentrada de Sw2 lo es para la s2. A su vez las transiciones s1 y s2 transmiten eventos
28 CAPITULO 2. SIMULINK
Sw2
Sw1
0
1
0
1
Chart
Tren 1 Barrera 2
Dentro
Fuera
Cerrar
Abrir
s2/e2 e2s1/e1 e1
Figura 2.4: Diagramas de Simulink y Stateflow
locales al estado Barrera para disparar las transiciones e1 y e2.Supondremos que inicialmente el tren esta lejos y la barrera esta abierta. Por tanto,
los estados iniciales del sistema son Fuera y Abrir.La proximidad de un tren se simula accionando de 0 a 1 el interruptor Sw1. Entonces
el estado Tren cambiara de Fuera a Dentro y antes de que se termine la transicion s1, elevento local e1 sera transmitido. El evento e1 accionara entonces la transicion dentro delestado Barrera de Abrir a Cerrar.
Capıtulo 3
Ejercicios de Calculo
3.0.2 Funciones variable compleja
En las aplicaciones de Sistemas Dinamicos y Teorıa de Control aparecen con frecuencialas funciones de variable compleja. Una funcion de variable compleja es una funcion
f : C → C
z 7→ f(z)
Las funciones de variable compleja f(z) no se pueden representar en 3D. Caben dosalternativas. La primera consiste en restringir el dominio de la funcion a una lınea en elplano z, obteniendo otra lınea en el plano f(z). En el siguiente ejemplo, la lınea es el ejeimaginario. (transformacion conforme),
>> z=[-100:.1:100]*j;
>> f=1./(1+z);
>> plot(f);
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1−0.5
−0.4
−0.3
−0.2
−0.1
0
0.1
0.2
0.3
0.4
0.5
La segunda posibilidad consiste en representar en 3D bien la parte real o bien la parteimaginaria de f(z) (o bien modulo o argumento). En el siguiente ejemplo se representael argumento.
29
30 CAPITULO 3. EJERCICIOS DE CALCULO
>> eps = 1e-9
>> [x,y] = meshdom(-1:0.1:1,-1:0.1:1);
>> z=x + j*y
>> f=1./(1+z+eps);
>> mesh(z)
3.0.3 Solucion numerica de ecuaciones
El calculo aproximado de las raıces de la ecuacion f(x) = 0 en un intervalo [a, b] esun problema clasico del analisis numerico. Son sin duda conocidos por el lector algunosalgoritmos como el metodo de las tangentes de Newton, el de la horquilla y el de las cuerdas(o secantes) que lo realizan. Todos ellos realizan iteraciones sucesivas xi → f(xi), i =1, 2, . . ., a partir de un valor xi supuesto de una raız y hasta conseguir que el valor def(xi) sea menor que un numero ε prefijado.
Para resolver este problema con Matlab, disponemos de la funcion fzero. Hay quepasarle un valor inicial de prueba. Por ejemplo,
>> xz1=fzero(’f1’,0)
>> xz0=fzero(’f1’,1)
Aquı, f1 es el nombre del fichero en el que esta definida la funcion.
3.0.4 Integracion numerica
Ahora vamos a integrar numericamente f1(x) en el intervalo [01] utilizando la funcionquad (cuadratura) o quad8
>> I=quad(’f1’,0,1)
>> I=quad8(’f1’,0,1)
El resultado es el mismo.
3.1 Derivacion e integracion
El paquete Symbolic Toolbox de Matlab permite realizar las operaciones de derivacion eintegracion simbolicas.
3.1.1 Derivadas
El comando diff() de Matlab permite calcular derivadas, totales y parciales, de unaexpresion algebraica, funcion de una o varias variables y parametros, respecto de una deellas (o de ellos). Supongamos que nos dan una expresion f(x), por ejemplo el polinomio
f(x) = a3x3 + a2x
2 + a1x + a0
y deseamos hallar sus derivadas respecto de x. Podemos hallar df(x)dx
de dos formas:
3.1. DERIVACION E INTEGRACION 31
>> syms a0 a1 a2 a3 x
>> f=a3*x^3+a2*x^2+a1*x+a0
f =
a3*x^3+a2*x^2+a1*x+a0
>> fx=diff(f)
fx =
3*a3*x^2+2*a2*x+a ,
ya que Matlab asume por defecto que la variable independiente es x, o bien especificandola variable respecto a la que queremos derivar,
>> fx=diff(f,x)
fx =
3*a3*x^2+2*a2*x+a1 .
La derivada segunda, d2f(x)dx2 , la obtenemos poniendo
>> f2x=diff(f,x,2)
f2x =
6*a3*x+2*a2
y, del mismo modo, las derivadas sucesivas:
>> f3x=diff(f,x,3)
f3x =
6*a3
>> f4x=diff(f,x,4)
f4x =
0
Ahora bien, si lo que queremos es derivar respecto a un parametro, supongamos que a2,escribiremos
>> fa3=diff(f,a3)
fa3 =
x^3
La operacion de derivacion, como otras, se puede extender a vectores y matrices. Sipedimos la derivada de una matriz A respecto de una variable x, Matlab calcula otramatriz cuyos elementos son las derivadas de los de la matriz A respecto de x.
>> syms x y
>> A=[1, x*y; x^2+y^2,x/y]
A =
[ 1, x*y]
[ x^2+y^2, x/y]
>> diff(A,y)
ans =
[ 0, x]
[2*y, -x/y^2] .
Lo mismo puede hacerse con vectores.
32 CAPITULO 3. EJERCICIOS DE CALCULO
3.1.2 Integrales
El comando int() de Matlab permite resolver integrales, tanto indefinidas como definidas.Sea la funcion f(x) = x
ln(x). Para hallar la integral
∫f(x)dx, indefinida, basta con poner
>> syms a b x
>> f=log(x)/x
f =
log(x)/x
>> int(f)
ans =
1/2*log(x)^2 .
y para obtener la expresion de una integral definida, tal como∫ b
af(x)dx, pondremos
>> int(f,a,b)
ans =
1/2*log(b)^2-1/2*log(a)^2
Observar que, en lugar de a y b, tambien habrıamos podido poner dos numeros.
Si la variable de integracion no es x, debemos especificarla:
>> syms u v
>> int(sin(u*v)*cos(u*v),v)
ans =
1/2*sin(u*v)^2/u
Igual que la derivacion, la integracion se puede extender a vectores y matrices.
3.2 Ecuaciones diferenciales
Matlab permite resolver ecuaciones diferenciales de dos formas: numerica y simbolica.
3.3 Resolucion numerica
Matlab dispone de las funciones ode23 y ode45 para resolver ecuaciones diferenciales.Para ello hemos de convertir primero (si es posible) la ecuacion diferencial de orden n enn ecuaciones diferenciales de primer orden (forma normal). Veamos el metodo medianteel ejemplo del pendulo.
3.4. RESOLUCION SIMBOLICA 33
β
mg
f (t)
En la figura, f(t) es una fuerza exterior, tangencial, aplicadaal pendulo. La ecuacion diferencial de deduce aplicando lasegunda ley de Newton:
f(t) − mg sin(β) − ma = 0
f(t) − mg sin(β) − mlβ = 0
mlβ + mg sin(β) − f(t) = 0
Haciendo el cambio β = x1, β = x2, queda
{x1 = x2
x2 =f(t) − mg sin x1
l mPara resolver este sistema de ecuaciones de primer grado Matlab exige crear un fichero
de funcion con la definicion de dicho sistema (ecuaciones de estado). Esto lo hacemosescribiendo la ecuacion diferencial en el fichero pendulo.m, con el editor:
function x_prima=pendulo(t,x)
l=1; m=1; g=9.8; % Constantes del pendulo
if t<1 % Fuerza exterior (pulso unico de 1 s)
f=1;
else f=0;
end
x_prima=zeros(2,1); % Ecuaciones de estado
x_prima=[x(2) f-m*g*sin(x(1))/(m*l)];
Salimos del editor, grabando el archivo, y ya podemos obtener soluciones numericas de laecuacion del pendulo:
>> t0=0; tf=5; % Intervalo de integracion
>> x0=[0]; % Condiciones iniciales
>> [t,x]=ode23(’pendulo’,t0,tf,x0);
>> plot(t,x)
3.4 Resolucion simbolica
La orden dsolve permite resolver ecuaciones diferenciales escritas en forma simbolica enMatlab. Esto se hace denotando las derivadas por medio del operador D. Por ejemplo, laecuacion diferencial lineal
a2d2x
dt2+ a1
dx
dt+ a0x = b
34 CAPITULO 3. EJERCICIOS DE CALCULO
0 1 2 3 4 5 6 7 8−0.5
0
0.5
1
1.5
2
t
(2*cos(2^(1/2)*t)+sin(2^(1/2)*t)*2^(1/2))/exp(t)
3.4.1 Transformada de Laplace
En los sistemas de control con modelo matematico de funcion de transferencia se presentael problema del calculo de la transformada inversa, de cara a la obtencion de la respuestadel sistema (variable y(t) de salida) dada la variable de entrada x(t). Las variables deentrada y de salida son funciones del tiempo.
X(s) e Y (s) son las transformadas de Laplace de x(t) e y(t) respectivamente. Portanto, dada x(t),
X(s) = L[x(t)]Y (s) = X(s)G(s)
}=⇒ y(t) = L−1[Y (s)]
X(s), Y (s) y G(s) son funciones racionales.
3.4.2 Resolucion numerica
Uno de los metodos mas utilizados para hallar la antitransformada de Laplace de unafuncion racional Y (s) = b(s)
a(s)es expandirla en fracciones simples, de transformada inversa
conocida. Sean p1, p2, . . . , pn las raıces del polinomio a(s), y supongamos que no hayninguna repetida. Entonces, la expansion en fracciones simples es de la forma
Y (s) =b(s)
a(s)=
r1
s − p1
+r1
s − p1
+ . . . +rn
s − pn
+ k(s)
en donde los numeros (en general complejos) r1, . . . , rn se llaman residuos de la funcionY (s) y k(s) es el cociente de la division de b(s) entre a(s), el cual es cero si Y (s) es propia.
Los polos, los residuos, y el termino k(s) pueden hallarse mediante Matlab. Entonces,la transformada inversa es inmediata:
y(t) = r1ep1t + r2e
p2t + . . . + rnepnt + L−1[k(s)]
3.4. RESOLUCION SIMBOLICA 35
Como aplicacion, vamos a resolver mediante Matlab el ejercicio de la figura.
b
k
( )
( )tf
t0 x
m
La ecuacion diferencial de este sistema es
mx(t) + bx(t) + kx(t) = f(t)
La transformada de Laplace, con condiciones iniciales nulas, es
ms2X(s) + bsX(s) + kX(s) = F (s)
Si, por ejemplo, f(t) es la funcion escalon unitario, f(t) = u(t), F (s) = 1/s, queda
X(s) =1
ms3 + bs2 + ks
Notese que el termino independiente del polinomio denominador de X(s) es cero.
La resolucion con Matlab, para los valores m = 1, b = 1, k = 1, se puede hacer delsiguiente modo:
>> m=1; b=1; k=1;
>> B=1;
>> A=[m b k 0];
>> [r,p,k]=residue(B,A)
>> t=[0:0.05:15];
>> x=r(1)*exp(p(1)*t)+r(2)*exp(p(2)*t)+r(3)*exp(p(3)*t);
>> plot(t,x)
36 CAPITULO 3. EJERCICIOS DE CALCULO
0 5 10 150
0.2
0.4
0.6
0.8
1
1.2
t
y(t)
Esto mismo se puede hacer de modo aun mas sencillo utilizando la funcion step
(escalon) o la funcion lsim del ToolBox Signals and Systems de Matlab.
3.5 Resolucion simbolica
La librerıa Symbolic Toolbox de Matlab permite hallar, mediante las ordenes laplace
e ilaplace, las transformadas directa e inversa de Laplace. Dada una funcion f(t),denotamos por F (s) su transformada de Laplace. Es decir
L(f(t)) = F (s).
Para hallar la transformada de Laplace F (s) de la funcion f(t) hemos de escribir
>> F = laplace(f)
en donde f es la expresion simbolica de f(t). Por defecto Matlab asume que la variableindependiente de f es t. Para hallar la transformada inversa f(t) de una F (s), pondremos
>> f = ilaplace(F)
en donde f es la expresion simbolica de F (s). Por defecto Matlab asume que la variableindependiente de F es s.
Como ejercicio, vamos a resolver de nuevo el ejemplo mecanico que antes hemos cal-culado numericamente.
>> syms s m b k
>> G = 1/(m*s^2+b*s+k)
>> G1 = subs(G,[m,b,k],[1,1,1])
3.5. RESOLUCION SIMBOLICA 37
G1 =
1/(s^2+s+1)
>> Y = symmul(G1,1/s);
>> y = ilaplace(Y);
>> ezplot(y, [0,15]), axis([0, 15, 0, 1.25]), title(’y(t)’)
Con esto, deberıa aparecer en la pantalla una grafica igual que la de antes.
38 CAPITULO 3. EJERCICIOS DE CALCULO
Capıtulo 4
Ejercicios de Algebra Lineal
4.1 Sistemas de ecuaciones lineales
Supongamos que nos dan las matrices A y b del sistema lineal Ax = b. Para introducirlasen el workspace de Matlab, ponemos
>> A = [1 2 3 4 5; 0 0 0 0 1; 0 0 0 0 1];
>> b = [1 2 3]’
Una vez que hemos introducido las matrices, para ver si el sistema tiene solucion, forma-mos la matriz ampliada Aa,
>> Aa = [A b];
y, calculando los rangos de las matrices A y Aa,
>> rank(A)
ans =
2
>> rank(Aa)
ans =
3
vemos que el sistema es incompatible, no tiene solucion.Consideremos ahora el sistema homogeneo Ax = 0. Sabemos que este siempre tiene
solucion (al menos la trivial) y que el conjunto de soluciones son los vectores del nucleode la matriz A. Para hallar estas soluciones ponemos
>> kerA = nullspace(A)
kerA =
[-2 -3 -4]
[ 1 0 0]
[ 0 1 0]
[ 0 0 1]
[ 0 0 0]
Esta matriz nos da los vectores columna de una base del nucleo de la aplicacion linealasociada a A: z1 = [−2 1 0 0 0]′, z2 = [−3 0 1 0 0]′ y z3 = [−4 0 0 1 0]′. Por tanto, elnucleo de la aplicacion lineal es el conjunto
{z = k1z1 + k2z2 + k3z3 | k1, k2, k3 ∈ C}.
39
40 CAPITULO 4. EJERCICIOS DE ALGEBRA LINEAL
4.1.1 Aplicacion a circuitos electricos
Las leyes basicas de la Teorıa de Circuitos son la ley de Ohm,
Z = V I
en donde Z es la impedancia del circuito, V el voltaje aplicado e I la intensidad quecircula por el mismo, y las leyes de Kirchhoff. Para calcular las intensidades y voltajes enlos circuitos electricos se suelen aplicar los conocidos metodos de mallas y nudos. Estosmetodos conducen al planteamiento de un sistema de ecuaciones el cual ha de resolversepara hallar los valores de las intensidades y voltajes del circuito.
Veamos como se resuelve el circuito de la figura, aplicando el metodo de mallas, conMatlab. Dadas las impedancias z1, . . . , z6 y el voltaje v(t) aplicado, se pide hallar lasintensidades de malla i1, i2 e i3.
+
-
3
5
4
6
2
1
2
3
1
Z
Z
Z
Z
Z
Z
i
i
i
v
Las ecuaciones de las tres mallas indicadas en la figura son:
v = (z1 + z2 + z4)i1 − z2i2 − z4i3
0 = −z4i1 − z5i2 + (z4 + z5 + z6)i3 (4.1)
0 = −z2i1 + (z2 + z5 + z3)i2 − z5i3
o, en forma matricial,
v00
=
z1 + z2 + z4 −z2 −z4
−z4 −z5 z4 + z5 + z6
−z2 z2 + z5 + z3 −z5
,
i1i2i3
es decir
V = Z I
en donde V, I ∈ C3 y Z ∈ C
3×3. La solucion del problema consiste en hallar i1, i2 y i3.
Resolucion numerica
La solucion numerica consiste en despejar el vector I de intensidades, una vez que sehan dado valores numericos (complejos) a las impedancias z1, . . . , z6 y al voltaje v. Al
4.1. SISTEMAS DE ECUACIONES LINEALES 41
tratarse de un circuito con mallas cerradas y con impedancias no nulas, la matriz Z deimpedancias es siempre no singular y, por tanto, existe la inversa Z−1. Por tanto,
I = Z−1V
Para hacer estos calculos con Matlab, escribiremos en un fichero-m los valores dadosal voltaje y a las impedancias. Por ejemplo, podrıamos poner lo siguiente.
% Ejemplo de circuito
% Datos:
Vef=220; f=50; w=2*pi*f;
R1=1; L1=0.1; C1=100e-6; z1=R1+j*L1*w+1/(i*C1*w)
R2=1; L2=0.03; C2=220e-6; z1=R2+j*L2*w+1/(i*C2*w)
R3=0.25; L3=0.2; C3=100e-6; z1=R3+j*L3*w+1/(i*C3*w)
R4=5; L4=0.1; C4=100e-6; z1=R4+j*L4*w+1/(i*C4*w)
R5=20; L5=0.01; C5=100e-6; z1=R5+j*L5*w+1/(i*C5*w)
R6=25; L6=0.33; C6=100e-6; z1=R6+j*L6*w+1/(i*C6*w)
V = [Vef 0 0]’
Z = [ z_1+z_2+z_4 - z_2 - z_4
-z_4 - z_5 z_4+z_5+z_6
-z_2 z_2+z_5+z_3 - z_5 ];
I = inv(Z)*V
Si el fichero en el que hemos escrito los datos tiene por nombre circuito.m, al ejecutarlomediante la orden
>> circuito
obtendremos el valor del vector de intensidades,
I =
17.9962 +10.1363i
2.1462 - 3.5405i
-0.4702 - 1.3816i
en amperios. Finalmente, podemos hallar el valor eficaz y el angulo de fase de las mismas.
>> Ief = abs(I)
Ief =
20.6545
4.1402
1.4594
>> fase = angle(I)
Ief =
0.5130
-1.0258
-1.8988
Este problema se puede tambien resolver simbolicamente de dos formas. La primera,resolviendo el sistema de ecuaciones (4.1), en forma simbolica, mediante el comando solve
y la segunda, por inversion de la matriz Z de impedancias en forma simbolica.
42 CAPITULO 4. EJERCICIOS DE ALGEBRA LINEAL
4.1.2 Aplicacion a los Sistemas de Control
El modelo de estado de un sistema de control viene dado por las ecuaciones
x(t) = Ax(t) + B u(t) (4.2)
y(t) = C x(t) + D u(t)
en donde A ∈ Rn×n, B ∈ R
n×q, C ∈ Rp×n y D ∈ R
p×q.Uno de los problemas que se presentan en las aplicaciones es hallar la solucion del
problema de condiciones iniciales, es decir, la solucion del sistema (4.2) junto con unsistema de condiciones iniciales dadas x(0) = x0 ∈ R
n. La solucion, que se puede hallarpor el metodo de variacion de las constantes (o por otros metodos), viene dada por lasformulas
x(t) = eAtx(0) +
∫ t
0
eA(t−τ)B U(τ) dτ (4.3)
y(t) = Cx(t) + Du(t)
El calculo numerico de estas expresiones esta implementado en la funcion lsim de Matlab.Un sencillo ejemplo nos aclarara sobre su uso. Sea un sistema dinamico lineal definidopor las matrices
A =
[0 2−1 −1
]B =
[01
]
C =[1 1
]D =
[0]
Vamos a calcular la respuesta temporal y(t) cuando la entrada u(t) es una funcion escalonunitario en t = 0 y las condiciones iniciales vienen dadas por el vector x(0) = [00]′. Parahallar la solucion con Matlab, introducimos las cuatro matrices,
>> A = [0 2; -1 -1], B = [0; 1], C = [1 1], D = [0]
y las condiciones iniciales
>> x0 = [0 0]’
Para hallar la solucion numerica hemos de definir un vector t cuyos elementos son losvalores del tiempo en los que queremos a calcular la solucion. Por ejemplo,
>> t = [0: 0.1; 10]’;
Ahora definimos los valores de la entrada u(t),
>> u = ones(size(t));
que en este caso es un vector del mismo tamano que t y cuyos elementos son todos iguala uno. Para obtener la solucion, ponemos
>> y = lsim(A,B,C,D,u,t,x0);
y Matlab nos calcula x(t) e y(t) para los valores de t antes definidos. Para representargraficamente y(t), ponemos
4.1. SISTEMAS DE ECUACIONES LINEALES 43
0 1 2 3 4 5 6 7 8 9 100
0.5
1
1.5y(t)
con lo que obtenemos la grafica de la respuesta temporal.Otra forma de obtener la solucion de las ecuaciones de estado es utilizando la trans-
formada de Laplace. Sabemos que la matriz de transferencia tiene dada por la formula
G(s) = C(sIn − A)−1B + D
y que, dadas G(s) y U(s) podemos hallar Y (s) con
Y (s) = G(s)U(s)
en donde U(s) = L(u(t)). Una vez hallada Y (s), la transformada inversa de Laplace nosdara y(t).
y(t) = L−1(Y (s))
Apliquemos este metodo al mismo ejercicio que acabamos de resolver con lsim. Pri-mero definimos la matriz identidad de orden 2.
>> I2 = [1 0; 0 1];
Ahora, para hacer la operacion G(s) = C(sIn − A)−1B + D, escribimos
>> G = C * (s*I2 - A)^(-1) * B + D
G =
(s+2)/(s^2+s+2)
Ahora, para hallar Y (s), ponemos
>> Y = symdiv(G,s)
Y =
(s+2)/(s^2+s+2)/s
y, finalmente,
>> y = ilaplace(Y);
con lo que obtendremos la expresion de y(t). Podemos comprobar con
>> ezplot(y, [0,10]), axis([0, 10, 0, 1.5]), title(’y(t)’)
que obtenemos la misma grafica que antes.
44 CAPITULO 4. EJERCICIOS DE ALGEBRA LINEAL
4.2 Comandos mas interesantes
El numero de ordenes y programas disponibles en Matlab es muy elevado y por ello noes posible un listado exhaustivo de todos ellos. En esta seccion se da un resumen, amodo de lista, de los que consideramos mas importantes para las asignaturas del area deAutomatica y Control.
General
help help facilitydemo run demonstrationswho list variables in memorywhat list M-files on disksize row and column dimensionslength vector lengthclear clear workspacecomputer type of computerˆC local abortexit exit MATLABquit same as exit
Matrix Operators Array Operators
+ addition + addition− subtraction − subtraction∗ multiplication .∗ multiplication/ right division ./ right division\ left division .\ left division power . power’ conjugate transpose .’ transpose
Relational and Logical Operators
< less than & and<= less than or equal | or> greater than ∼ not>= greater than or equal== equal∼= not equal
4.2. COMANDOS MAS INTERESANTES 45
Special Characters
= assignment statement[ used to form vectors and matrices] see [( arithmetic expression precedence) see (. decimal point... continue statement to next line, separate subscripts and function arguments; end rows, suppress printing% comments: subscripting, vector generation! execute operating system command
Special Values
ans answer when expression not assignedeps floating point precisionpi πi, j
√−1
inf ∞NaN Not-a-Numberclock wall clockdate dateflops floating point operation countnargin number of function input argumentsnargout number of function output arguments
Disk Files
chdir change current directorydelete delete filediary diary of the sessiondir directory of files on diskload load variables from filesave save variables to filetype list function or filewhat show M-files on diskfprintf write to a filepack compact memory via save
46 CAPITULO 4. EJERCICIOS DE ALGEBRA LINEAL
Special Matrices
compan companiondiag diagonaleye identitygallery esoterichadamard Hadamardhankel Hankelhilb Hilbertinvhilb inverse Hilbertlinspace linearly spaced vectorslogspace logarithmically spaced vectorsmagic magic squaremeshdom domain for mesh pointsones constantpascal Pascalrand random elementstoeplitz Toeplitzvander Vandermondezeros zero
Matrix Manipulation
rot90 rotationfliplr flip matrix left-to-rightflipud flip matrix up-to-downdiag diagonal matricestril lower triangular parttriu upper triangular partreshape reshape.’ transpose: convert matrix to single column; A(:)
Relational and Logical Functions
any logical conditionsall logical conditionsfind find array indices of logical valuesisnan detect NaNsfinite detect infinitiesisempty detect empty matricesisstr detect string variablesstrcmp compare string variables
4.2. COMANDOS MAS INTERESANTES 47
Control Flow
if conditionally execute statementselseif used with ifelse used with ifend terminate if, for, whilefor repeat statements a number of timeswhile do whilebreak break out of for and while loopsreturn return from functionspause pause until key pressed
Programming and M-Files
input get numbers from keyboardkeyboard call keyboard as M-fileerror display error messagefunction define functioneval interpret text in variablesfeval evaluate function given by stringecho enable command echoingexist check if variables existcasesen set case sensitivityglobal define global variablesstartup startup M-filegetenv get environment stringmenu select item from menuetime elapsed time
Text and Strings
abs convert string to ASCII valueseval evaluate text macronum2str convert number to stringint2str convert integer to stringsetstr set flag indicating matrix is a stringsprintf convert number to stringisstr detect string variablesstrcomp compare string variableshex2num convert hex string to number
48 CAPITULO 4. EJERCICIOS DE ALGEBRA LINEAL
Command Window
clc clear command screenhome move cursor homeformat set output display formatdisp display matrix or textfprintf print formatted numberecho enable command echoing
Graph Paper
plot linear X-Y plotloglog loglog X-Y plotsemilogx semi-log X-Y plotsemilogy semi-log X-Y plotpolar polar plotmesh 3-dimensional mesh surfacecontour contour plotmeshdom domain for mesh plotsbar bar chartsstairs stairstep grapherrorbar add error bars
Graph Annotation
title plot titlexlabel x-axis labelylabel y-axis labelgrid draw grid linestext arbitrarily position textgtext mouse-positioned textginput graphics input
Graph Window Control
axis manual axis scalinghold hold plot on screenshg show graph windowclg clear graph windowsubplot split graph window
Graph Window Hardcopy
print send graph to printerprtsc screen dumpmeta graphics metafile
4.2. COMANDOS MAS INTERESANTES 49
Elementary Math Functions
abs absolute value or complex magnitudeangle phase anglesqrt square rootreal real partimag imaginary partconj complex conjugateround round to nearest integerfix round toward zerofloor round toward −∞ceil round toward ∞sign signum functionrem remainderexp exponential base elog natural logarithmlog10 log base 10
Trigonometric Functions
sin sinecos cosinetan tangentasin arcsineacos arccosineatan arctangentatan2 four quadrant arctangentsinh hyperbolic sinecosh hyperbolic cosinetanh hyperbolic tangentasinh hyperbolic arcsineacosh hyperbolic arccosineatanh hyperbolic arctangent
Special Functions
bessel bessel functiongamma gamma functionrat rational approximationerf error functioninverf inverse error functionellipk complete elliptic integral of first kindellipj Jacobian elliptic integral
50 CAPITULO 4. EJERCICIOS DE ALGEBRA LINEAL
Decompositions and Factorizations
balance balanced formbacksub backsubstitutioncdf2rdf convert complex-diagonal to real-diagonalchol Cholesky factorizationeig eigenvalues and eigenvectorshess Hessenberg forminv inverselu factors from Gaussian eliminationnnls nonnegative least squaresnull null spaceorth orthogonalizationpinv pseudoinverseqr orthogonal-triangular decompositionqz QZ algorithmrref reduced row echelon formschur Schur decompositionsvd singular value decomposition
Matrix Conditioning
cond condition number in 2-normnorm 1-norm,2-norm,F-norm,∞-normrank rankrcond condition estimate (reciprocal)
Elementary Matrix Functions
expm matrix exponentiallogm matrix logarithmsqrtm matrix square rootfunm arbitrary matrix functionpoly characteristic polynomialdet determinanttrace tracekron Kronecker tensor product
4.2. COMANDOS MAS INTERESANTES 51
Polynomials
poly characteristic polynomialroots polynomial roots—companion matrix methodroots1 polynomial roots—Laguerre’s methodpolyval polynomial evaluationpolyvalm matrix polynomial evaluationconv multiplicationdeconv divisionresidue partial-fraction expansionpolyfit polynomial curve fitting
Column-wise Data Analysis
max maximum valuemin minimum valuemean mean valuemedian median valuestd standard deviationsort sortingsum sum of elementsprod product of elementscumsum cumulative sum of elementscumprod cumulative product of elementsdiff approximate derivativeshist histogramscorrcoef correlation coefficientscov covariance matrixcplxpair reorder into complex pairs
Signal Processing
abs complex magnitudeangle phase angleconv convolutioncorrcoef correlation coefficientscov covariancedeconv deconvolutionfft radix-2 fast Fourier transformfft2 two-dimensional FFTifft inverse fast Fourier transformifft2 inverse 2-D FFTfftshift FFT rearrangement
Numerical Integration
quad numerical function integrationquad8 numerical function integration
52 CAPITULO 4. EJERCICIOS DE ALGEBRA LINEAL
Differential Equation Solution
ode23 2nd/3rd order Runge-Kutta methodode45 4th/5th order Runge-Kutta-Fehlberg method
Nonlinear Equations and Optimization
fmin minimum of a function of one variablefmins minimum of a multivariable functionfsolve solution of a system of nonlinear equations
(zeros of a multivariable function)fzero zero of a function of one variable
Interpolation
spline cubic splinetable1 1-D table look-uptable2 2-D table look-up
Bibliografıa
Harel, D. (1987). Statecharts: a visual formalism for complex systems. Science of Com-
pueter Programing 8, 231–274.
53