You are on page 1of 53

Introducción

a
MATLAB

J.M. González de Durana

Dpto. de Ingenierı́a de Sistemas


y Automática
EUITI e ITT, UPV-EHU
VITORIA-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 cálculo numérico cientı́fico e in-
genieril. Integra cálculo numérico, computación de matrices y gráficos en un entorno de
trabajo cómodo para el usuario. Su nombre significa Laboratorio de Matrices y fue escrito
inicialmente en base a los ya existentes paquetes de cálculo matricial LINPACK y EIS-
PACK. Posteriormente se han añadido librerı́as, denominadas Toolboxes, especializadas
en diferentes áreas 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 interés para nuestra área de conocimiento. La última de la lista, Symbolic
Math Toolbox, está basada en el programa de cálculo simbólico Maple y utiliza una sintaxis
diferente.
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 herramienta
instructora básica para cursos de matemáticas aplicadas ası́ como para cursos avanzados
en otras áreas. En entornos industriales se utiliza para investigar y resolver problemas
prácticos y cálculos de ingenierı́a. Son aplicaciones tı́picas el cálculo numérico, la realiza-
ción de algoritmos, la resolución de problemas con formulación matricial, la estadı́stica,
la optimización, etc. Es de destacar la aplicación en el estudio, simulación y diseño de los
sistemas dinámicos y de control.

3
4 CAPÍTULO 1. LOS PRIMEROS PASOS EN MATLAB

1.2 Funcionamiento
Matlab es un programa intérprete de comandos. Esto quiere decir que es capaz de procesar
de modo secuencial una serie de comandos previamente definidos, obteniendo de forma
inmediata los resultados. Los comandos pueden estar ya definidos en el propio Matlab y
pueden también ser definidos por el usuario. Para que Matlab pueda realizar este proceso
el usuario ha de escribir la lista de comandos en la ventana de comandos, si su número es
reducido, o en un fichero con extensión .m, constituyendo entonces un programa.
El método 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 de


texto apropiado (archivo.m).

2. Tras la orden de ejecución enter (o escribir el nombre del fichero), Matlab procesa
la información.

3. Matlab Escribe los resultados en la ventana de comandos y los gráficos (si los hu-
biere) en otras ventanas gráficas.

1.3 Sintaxis
Para escribir las expresiones es preciso respetar ciertas reglas sintácticas propias de Mat-
lab. Algunas se parecen bastante a las de otros lenguajes de programación por lo que no
resultan extrañas.

1.3.1 Expresiones algebraicas


Están formadas por cadenas de caracteres, números y operadores algebraicos. Las cadenas
de caracteres pueden ser sı́mbolos de variables (matrices) o funciones de Matlab. Las
mayúsculas y minúsculas son distintas.
Podemos distinguir dos tipos de expresiones: numéricas (propias de Matlab) y simbólicas
(propias de Maple). Una expresión numérica puede conterner sı́mbolos (nombres de varia-
bles) pero éstos han de estar previamente asignadas a valores numéricos. Las expresiones
>> a = 2; b = 3;
>> a + b
son numéricas; el valor de a + b es hallado y mostrado por Matlab inmediatamen-
te: ans = 5. Sin embargo, una expresión simbólica puede contener sı́mbolos sin valor
numérico asignado. Si escribimos
>> syms x
>> p = 2*x^2 - 7;
la segunda expresión representa un polinomio en la indeterminada x. El valor de p para
x = 1 se puede obtener con
>> subs(p,x,1)
que dará como resultado: ans = 5.
1.3. SINTAXIS 5

1.3.2 Operadores
Hay operadores para números (reales o complejos) y para matrices.

Para números: + - * / ^

Números complejos: Está 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 números se colocan entre dos números y dan como resultado otro
número. Por ejemplo 2 + 3 o a + b, si a y b han sido asignadas previamente a números.
Los operadores para matrices se colocan entre dos matrices y dan como resultado otra
matriz.
Los operadores de relación son para números reales, se colocan entre dos números y
dan como resultado 1, que significa cierto, o 0, que significa falso. El significado de todos
ellos resulta obvio, si bien conviene aclarar que el operador == significa igual, en el sentido
de condición (por ejemplo a==b puede ser cierto o falso), y es diferente del operador = que
sirve para asignar un valor a una variable (por ejemplo a=3) significa dar a la variable
a el valor de 3. El operador ~= significa distinto, también en el sentido de condición.
Los operadores de condición se utilizan, sobre todo, en las estructuras de programación
if-then-else, for, y while.
Para delimitar las matrices se utilizan los corchetes “[ ]”. Para separar elementos
consecutivos, 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 números complejos A se representa por A’.
Otros operadores, para usos varios, son

Ayudas al usuario: who, help, ! , save, load

Operaciones lógicas: & (AND), ! (OR), ~ (NOT)

1.3.3 Funciones elementales


Matlab dispone de las funciones elementales más comunes (las que tienen las calculado-
ras de bolsillo) y otras especiales, propias. Realizan una operación sobre un argumento
numérico dado de tipo matriz y operan elemento por elemento. Las más usuales son:

Trigonométricas: sin, cos, tan, asin, acos, atan, sinh, cosh, tanh, asinh, acosh, atanh.

Lógicas: 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 CAPÍTULO 1. LOS PRIMEROS PASOS EN MATLAB

1.4 Desarrollo de una sesión


Los manuales de Matlab explican detalladamente los conceptos, comandos y procedimien-
tos del programa. Aquı́ vamos realizar una introducción a su manejo mediante algunos
ejemplos. Es conveniente que los alumnos realicen por su cuenta otros parecidos y traten
de utilizar Matlab para resolver problemas de Matemáticas, Fı́sica y otras asignaturas.
La instalación se realiza automáticamente con el CD de Matlab. Una vez instalado el
programa, al picar con el ratón 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 útiles
pera el usuario en el desarrollo de la sesión.
El comando demo nos muestra, de modo interactivo, un amplio abanico de ejemplos
de aplicación de Matlab y es de gran ayuda durante nuestros inicios con el programa.
El comando help función_deseada muestra en la pantalla un texto explicando cómo
se 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 NUMÉRICAS 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 uso
de 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 están actualmente en la
memoria (workspace de Matlab. El comando dir, igual que el de DOS, lista el directorio
actual. El comando diary sirve para que todo lo que vamos tecleando y los resultados
obtenidos (incluidos los errores) se almacene en un archivo. Para ello debemos escribir,
en el instante a partir del cual queremos grabar la sesión
>> diary dia12
en donde dia12 es el nombre del archivo en el que queremos que se escriba. Para terminar
el proceso de grabación hemos de teclear
>> diary off
El uso de la ayuda es muy conveniente, sobre todo en el perı́odo de aprendizaje.

1.5 Operaciones numéricas


Matlab puede operar como una calculadora: si el usuario escribe las órdenes apropia-
das, los resultados aparecen en la ventana de comandos (Command Window). Obsérvese
que si ponemos ; al final de la expresión el resultado no se escribe en la pantalla.
Es capaz de realizar las operaciones aritméticas suma, resta, multiplicación, división y
potenciación, con números (reales y complejos), con vectores (polinomios) y con matri-
ces. Además, mediante la librerı́a Symbolic Math Toolbox, puede también operar con
expresiones simbólicas.

1.5.1 Operaciones aritméticas


Las operaciones aritméticas con números son, quizás, las más sencillas que pueden efec-
tuarse. Para ilustrar su realización, a continuación se muestran una serie de lı́neas que
comienzan por >>, indicativo (o prompt) de la pantalla de comandos en una sesión de Ma-
tlab, seguido de una orden y del resultado que aparecerı́a inmediatamente en la pantalla
si 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 CAPÍTULO 1. LOS PRIMEROS PASOS EN MATLAB

Si el usuario no ha asignado el resultado a una variable, Matlab lo hace utilizando la


variable “ans”

Números complejos
La forma de operar con números 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 órdenes real(c1), imag(c1)

Operaciones con vectores


MATLAB no precisa una notación especial para vectores. Vamos a hacer algunas opera-
ciones sencillas con vectores.
1.5. OPERACIONES NUMÉRICAS 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 polinomio
3s3 − 5s2 + 7s + 3 se representa por
>> p=[3 -5 7 3]
Las raı́ces de un polinomio se hallan mediante la función roots:
>> r=roots(p)
El producto de dos polinomios se realiza a través de la convolución de los vectores de
sus coeficientes, mediante la función conv. Por ejemplo,
>> p1=[-1 -3 3 4];
>> p2=[1 2 4 0];
>> p=conv(p1,p2);
Para la división se usa la deconvolución. Mediante la función deconv se obtiene el
cociente q y el resto r de la división.
>> [c,r]=deconv(p,p1);
La función polyval sirve para hallar el valor de un polinomio. Si el parámetro que le
pasamos es un vector, calcula otro vector con los valores del polinomio para cada uno de
los del vector.
La función polyfit sirve para hacer ajustes polinómicos de una secuencia de datos
dada por dos vectores X e Y. Se puede elegir el grado del polinomio. En el siguiente
ejemplo 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 CAPÍTULO 1. LOS PRIMEROS PASOS EN MATLAB

Citaremos por último la función residue que sirve para hallar los residuos de una
función racional en los polos de la misma (o coeficientes de su expansión en fracciones
simples), bajo el supuesto de que los polos sean simples. Además, dicha función calcula
también los polos y el término directo.
>> B = [1 2 3 4];
>> A = [1 2 3 4 5 6 7];
>> [r,p,k] = residue(B,A);

Operaciones con matrices


Veamos cómo se efectúan algunas de las operaciones más comunes con matrices:
Introducir una matriz A:
>> A = [1 2 3;4 5 6;7 8 0]
Cálculo de la transpuesta:
>> B = A’
Producto matricial:
>> C = A * B
Determinante:
>> det(A)
Rango de la matriz:
>> rank(A)
Número de condición:
>> cond(A)
Matriz inversa:
>> inv(A)
Valores propios y vectores propios:
>> [val,vec]=eig(A)
Valores singulares:
>> svd(A)
Exponenciación 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 SIMBÓLICAS 11

1.6 Operaciones simbólicas


La librerı́a Symbolic Math Toolbox da acceso a Matlab a algunas funciones del núcleo de
Maple que permiten operar con expresiones simbólicas.

1.6.1 Operaciones aritméticas


En las primeras versiones de la librerı́a Symbolic Math Toolbox era necesario emplear
los comandos especiales symadd, symsub, symmul, symdiv y sympow para las operaciones
de suma, resta, multiplicación, división y potenciación, respectivamente, de expresiones
simbólicas. Afortunadamente, esto ya no es necesario y se pueden usar para ello los
operadores numéricos +, -, +, *, / y ^, siempre y cuando las variables simbólicas se
hayan 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 demás operaciones simbólicas se efectúan de modo similar.

1.6.2 Sustitución de variables


La sustitución de un sı́mbolo por otro en una expresión simbólica se puede realizar con
la orden subs. La forma de hacerlo es subs(expr, old, new), en donde expr es una
expresión simbólica, old es el sı́mbolo (o valor) que se desea sustituir y new es el nuevo
sı́mbolo o valor.
Supongamos que en el polinomio f = ax2 + bx + c queremos sustituir x por -1. Para
ello, 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 también sustituir varias variables a la vez. Si en el mismo polinomio de antes


quisiéramos sustituir a por 1, b por 2 y c por k, podemos poner
12 CAPÍTULO 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 expresión simbólica racional suele interesar conocer el numerador y el denominador


de la misma. Para esto tenemos la orden numden. Si, por ejemplo, nos dan la expresión

x2 + 1 x
h= + ,
2x − 1 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)

Conversión de polinomios

Las órdenes poly2sym y sym2poly sirven, respectivamente, para convertir un polinomio


expresado en forma numérica (vector de coeficientes) en su expresión simbólica, y vice-
versa. El siguiente ejemplo ilustrará su utilización.

>> 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 Gráficos
Matlab tiene una buena colección de comandos para obtener representaciones gráficas a
partir de datos numéricos y también algunos para expresiones simbólicas.
1.7. GRÁFICOS 13

1.7.1 Gráficos en 2D
En las aplicaciones interesa a veces conocer el valor numérico de una función y = f (x)
para uno o varios valores de la variable. En Matlab, dada una función y = f (x), definida
en un intervalo [a, b], es posible representarla por un par (x,y) de vectores de números,
tales que el vector x contiene un conjunto finito de valores de x y el vector y contiene el
conjunto de valores imágenes de x por la función y, calculados por el propio Matlab. Una
vez representada de este modo la función, se puede representar gráficamente.
Por ejemplo, dada la función y = 10(1 − e−x/3 sin(10x)), definida en el intervalo [0, 10],
una posible representación en Matlab, seguida de su representación gráfica, serı́a
>> x=[0:0.1:10];
>> y=10*(1-exp(-x/3).*sin(10*x));
>> plot(x,y),title(’Gráfica de una función’)
Gráfica de una función
20

18

16

14

12

10

0
0 1 2 3 4 5 6 7 8 9 10

La gráfica corresponde a una función sinusoidal amortiguada más una constante.

1.7.2 Gráficos en 3D
Las funciones de dos variables, de la forma f (x, y) se pueden representar gráficamente
con Matlab en 3D. Para ello es preciso crear un dominio de puntos en forma de malla
rectangular en el plano (x, y), dentro del cual se desea representar la función. Esto se
hace con la orden meshgrid (antes meshdom) de Matlab. Veámoslo con un ejemplo. Sea
la función z : R2 → R, p
z = 1 − x2 − y 2 ,
cuyo dominio es el cı́rculo x2 + y 2 < 1, y supongamos que queremos calcular los valores
de z en una región rectangular del plano (x, y) definida por los puntos (-1.25,-1.25) y
(1.25,1.25), y representarla gráficamente. Para ello escribiremos:
14 CAPÍTULO 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 aparecerá el gráfico.

0.8

0.6

0.4

0.2

0
15

14
10 12
10
8
5 6
4
2
0 0

1.8 Ficheros-m
Matlab está dotado de un mecanismo que le permite interpretar ficheros de texto, con
la condición de que su nombre termine por .m. Se utilizan principalmente para crear
funciones (en el sentido matemático), programas y funciones (órdenes) de Matlab.

1.8.1 Funciones-función
Mediante ficheros-m podemos crear funciones en el sentido matemático:

f : x → f (x)

La denominación que da Matlab a estas funciones es funciones-función (function func-


tions). Estas funciones permiten realizar integración numérica, resolver ecuaciones no
lineales, problemas de optimización y resolver ecuaciones diferenciales. Veamos un par de
ejemplos.
Dentro del editor definimos la función f 1(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 función en un intervalo y dibujarla.


1.8. FICHEROS-M 15

>> x=[-1:0.1:2];
>> y=f1(x);
>> plot(x,y);

Función y=f1(x)
100

80

60

40

20

−20
−1 −0.5 0 0.5 1 1.5 2

Es posible hallar los valores máximo y mı́nimo de la función en un intervalo:

>> xmin = fmin(’f1’,0.5,1);


xmin =
0.6370
>> ymin=f1(xmin);
ymin =
11.2528

Otro ejemplo puede ser representar la función

1
f=
1 1
+
x y

utilizada en Optica. Para ello creamos el fichero lente.m con la definición de la función.
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 función y represen-


tarla gráficamente.
16 CAPÍTULO 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(’Función lente. f= 1/(1/x + 1/y)’)
Función de dos variables

1.5

0.5

−0.5

−1

−1.5

−2
0
10
20
0
30 10
20
40 30
40
50 50

Podemos asimismo hallar el valor mı́nimo en un intervalo:


>> xmin=fmin(’f1’,0.5,1)
>> ymin=f1(ymin)

1.8.2 Programación
Para evitar teclear repetidamente las mismas funciones, Matlab permite crear un fichero
con una lista de comandos que luego, al ser llamado, interpreta secuencialmente. Dispone,
como otros lenguajes de programación, de las estructuras if-then-else, while y for. El
archivo en el que se escriben las órdenes de Matlab (programa) ha de tener la extensión
.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 ejecutarán
secuencialmente.
Matlab tiene un lenguaje de programación propio, de tipo intérprete. Es decir, es
capaz de interpretar una lista de instrucciones contenidas en un fichero-m. Igual que
1.8. FICHEROS-M 17

otros lenguajes de programación, dispone de las estructuras de programación clásicas:


if-then-else, for, y while.

Estructura if-then-else
La sintaxis de la estructura if-then-else es
if condición1
orden1a
orden2a
...
...
elseif condición2
orden1b
orden2b
...
...
else
orden n
end
en donde orden1*, orden2*, . . . , son órdenes y condición1, condición2, . . . , estamentos
condicionales 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 órdenes de Matlab. Por ejemplo,
A = zeros(3,4)
for i=[1:4]
for j=[1:4]
A(i,j) = i+j;
18 CAPÍTULO 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 condición
orden1a
orden2a
...
...
end

en donde orden1a, orden2a, . . . , son órdenes y condición es un estamento condicional


o 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 gráfico que representa el modelo matemático de
un determinado sistema dinámico. Simulink es una librerı́a (toolbox ) de Matlab que
permite representar el diagrama de bloques de un sistema y a continuación proceder a su
simulación.
El programa se inicia escribiendo simulink en la pantalla de comandos de Matlab o
también pulsando con el ratón en el icono coloreado de Simulink que aparece en la ventana
de 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 pulsar
sobre el signo + que precede a su nombre, aparece una nueva lista y entonces en la
pantalla 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 de
bloques. El resto son librerı́as adicionales especializadas áreas especı́ficas de control, en
formas avanzadas de simulación, etc.

19
20 CAPÍTULO 2. SIMULINK

2.2 Creación y simulación de un modelo


Para aprender a manejar Simulink comenzaremos realizando el modelo de un sistema de
control simple.
Dado el diagrama de bloques de un sistema de control,
U (s) Y (s)
+ K G(s)
-

H(s)

en donde
s+1 2s + 1
K = 5, G(s) = 2
, H(s) =
s +4 s+1
y suponiendo que la entrada es una función de tipo escalón unitario, queremos realizar la
simulación del mismo con Simulink.
La construcción del modelo es muy sencilla. En primer lugar hemos de abrir una
ventana para hacer el dibujo. Esto se hace picando con el ratón en primer el icono de la
izquierda (hoja en blanco) de la ventana de Simulink o también seleccionando con el ratón
File → New → Model, en la misma. A continuación iremos colocando en esta ventana
los bloques del diagrama, para lo cual hemos de buscarlos en las librerı́as de Simulink.
Veamos dónde se encuentran en este caso.
Para los bloques G(s) y H(s), funciones de transferencia, utilizaremos el elemento
Transfer Fcn que se encuentra en la librerı́a Continuous de Simulink. Una vez encon-
trado el bloque, lo arrastramos con el ratón a la ventana de dibujo. Como necesitamos dos
elementos, repetiremos la misma acción de nuevo. También es posible efectuar una copia
del elemento, sin salir de la pantalla de dibujo, sin más que arrastrar dicho elemento man-
teniendo pulsado el botón derecho del ratón. Una vez que hemos colocado los dos bloques,
procederemos a ponerles sus datos. Para introducir los datos de G(s) repicaremos con el
ratón en uno de los iconos Transfer Fcn. Veremos entonces que se abre una ventana,
y en ella pondremos, en formato numérico, los datos correspondientes a los polinomios
numerador 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 los
datos de H(s) es repicar en su icono e introducir los vectores [2, 1] y [1, 1] en la ventana
que se abra.
Para el bloque con función de transferencia K constante se podrı́a usar también el
bloque Transfer Fcn si bien parece más apropiado el bloque Gain que se encuentra en
la librerı́a Math Operations de Simulink. Elegido éste, lo arrastraremos con el ratón a
la pantalla del dibujo y, tras un repique en el mismo, pondremos un 5 como valor de la
ganancia.
El bloque adecuado para poner el punto de suma es Sum y se encuentra en la librerı́a
Math Operations. La ventana que se abre al repicar en él permite poner dos o más
signos + o − y cambiar la orientación de las flechas de entrada y salida según que la barra
vertical esté en la posición izquierda, derecha, o entre los signos + y −.
Para realizar la simulación hemos de poner como entrada una función de tipo es-
calón. Esto lo hacemos escogiendo el bloque Step de la librerı́a Sources de Simulink. Lo
2.2. CREACIÓN Y SIMULACIÓN DE UN MODELO 21

arrastraremos también a la ventana de dibujo y, repicando en su icono, pondremos como


parámetros los siguientes. Step time = 0, Initial value = 0, Final value = 1.
Y por último, para ver el resultado de la simulación, necesitamos un elemento en el
que se genere el gráfico de la respuesta temporal. Lo más sencillo es colocar el bloque
Scope que se encuentra en la librerı́a Sinks.
Una vez colocados todos los bloques, utilizando el botón izquierdo del ratón, los unire-
mos entre sı́ mediante flechas y acomodaremos su posición hasta dejarla a nuestro gusto.
El resultado puede ser, más o menos, el siguiente.

s+1
5
s2+4
Step Sum Gain Transfer Fcn Scope

2s+1
s+1
Transfer Fcn

A veces puede ser conveniente invertir la orientación de algún bloque para mejorar el
aspecto de su conexión. Esto ocurre en este caso con el bloque H(s) en el que las flechas
van hacia atrás. El cambio orientación de un bloque se realiza picando en el mismo
con el botón derecho del ratón y a continuación, con el botón izquierdo, en Format →
Flip block. De modo similar son también posibles otras operaciones, como por ejemplo
ocultar el nombre de un bloque.
Los bloques pueden tener otras opciones que no describimos aquı́ pero que el usuario
puede ver con facilidad con la ayuda de Matlab, accesible mediante el botón derecho del
ratón para cada bloque.
Una vez que el modelo ha sido completado, podemos proceder a la simulación. En la
ventana del dibujo de Simulink, seleccionamos con el ratón en Simulation → Simulation
parameters. Esto nos permitirá escoger los instantes de tiempo inicial y final, el algoritmo
y su paso, fijo o variable, ası́ como algunos otros parámetros relacionados con la simulación.
Aparte los tiempos, que pueden variar mucho según la simulación de que se trate, los
otros valores que Matlab pone por defecto suelen resultar adecuados muchas veces. Como
resultado de la simulación aparecerá en el bloque Scope la gráfica de la respuesta temporal.
Respuesta temporal
0.7

0.6

0.5

0.4
y(t)

0.3

0.2

0.1

0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
t
22 CAPÍTULO 2. SIMULINK

2.3 Stateflow
Stateflow es una librerı́a (toolbox ) de Matlab que permite modelar sistemas de eventos
discretos dentro de Simulink, utilizando cartas de estado (statecharts). Las cartas de
estado fueron introducidas por David Harel (Harel, 1987) y son una generalización de las
máquinas de estados.
La librerı́a de Stateflow posee un único elemento o bloque, denominado Chart, que
sirve para representar un sistema de eventos discretos. El bloque Chart se puede conectar
con otros bloques de Simulink, de tiempo continuo o discreto, para formar modelos de
sistemas hı́bridos que pueden ser muy útiles en la investigación del comportamiento de
tales sistemas mediante simulación.
Una carta de estados (statechart) es un gráfico formado por elementos gráficos sobre
los que van escritos ciertos elementos de texto escritos en un lenguaje especial. Entre
ellos, hay unos elementos de texto especiales que son los datos y los eventos. La carta
es como la hoja de papel en la que se representan los elementos. Cada carta representa
un sistema de eventos discretos y constituye un bloque de Simulink que puede conectarse
con otras cartas o con otros bloques de Simulink.

2.3.1 Elementos gráficos


Los elementos gráficos de son

• Estados

• Transiciones

• Uniones

mientras que los elementos de texto son

• Datos

• Eventos

Estados
Los estados tienen forma de rectángulo con los bordes redondeados y representan estados
(a veces llamados modos o fases) del sistema de eventos discretos. No debemos confundir
estos estados con los estados del clásico modelo de estado de un sistema de control. Los
estados aquı́ considerados representan los modos o formas de evolución del sistema al
reaccionar frente a los eventos.
Junto a la esquina superior izquierda, cada rectángulo lleva un texto con un nombre
que identifica al estado. Tras el nombre del estado y el separador opcional “/”, pueden
aparecer otros textos indicando las acciones que llevará a cabo el sistema cuando esté en
ese estado. La sintaxis de Stateflow permite especificar el instante en que se iniciará la
acción y la duración de esta:

entry: la acción se inicia al entrar en este estado.

exit: la acción se inicia al salir de este estado.


2.3. STATEFLOW 23

during: la acción se inicia al entrar en este estado y permanece activa durante el tiempo
que dura el estado.
on event e : La acción 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 función
de Matlab.

S1

S2

Figura 2.1: Estados y transición

Un estado puede contener otros estados, o subestados, dentro de sı́. Entonces dicho
estado se llama estado padre, o superestado, y los subestados se llaman estados hijos. Hay
dos posibles formas de descomposición de un estado (padre) en subestados (hijos). Un
estado (padre) tiene descomposición AND si los estados hijos se activan simultáneamente
al activarse el estado padre y entonces los estados hijos se marcan con lı́nea discontinua.
Un estado (padre) tiene descomposición OR (exclusiva) si únicamente puede estar activo
uno de los estados hijos al activarse el estado padre y entonces los estados hijos se marcan
con 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 transición
representa un evento e del sistema y se dibuja como una flecha que va desde el borde de
un estado S1 hasta el borde de otro estado S2 . Si el sistema está en el estado S1 y se
produce el evento e, entonces el sistema pasa al estado S2 . El disparo de una transición
puede implicar la ejecución de una o más acciones.
Una transición especial es la llamada transición por defecto (default-transition), que
sirve para señalar el estado inicial del sistema es decir, el primer estado en el que entrará el
sistema al iniciar su evolución, y también 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 pequeño cı́rculo
negro.
Cada transición puede tener un texto escrito junto a ella que indica el evento que ha de
producirse para que se dispare la transición ası́ como las acciones que entonces el sistema
emprenderá. Este texto se divide en tres partes, todas ellas opcionales:
e (en donde e es el nombre de un evento): la transición se dispara al producirse el evento
e en el sistema. Si no hay nombre de evento entonces la transición se disparará ante
cualquier evento del sistema.
24 CAPÍTULO 2. SIMULINK

[c] (en donde c es una condición): la transición se dispara si la condición c (expresión


booleana) es verdadera y se produce el evento e. Si esta parte no existe, se asume que
c es cierta. Si la parte e del texto no existe, se disparará, bajo la misma condición,
siempre y cuando se produzca un evento cualquiera en el sistema.

{a} (en donde a es una acción): al producirse transición el sistema lleva a cabo la acción
a.
Si la transición no lleva ningún texto, entonces se disparará automáticamente, siempre y
cuando se produzca un evento cualquiera en el sistema.

Uniones
Las uniones tienen forma de pequeño cı́rculo. Hay dos tipos de uniones: uniones conectivas
(connective junctions) y uniones de historia history junctions.
Las uniones conectivas son puntos de bifurcación de la carta de estados y representan
puntos de decisión del sistema de eventos discretos. Permiten conectar una transición de
entrada con varias transiciones de salida. Su empleo puede a veces simplificar la carta de
estados y hacer que el código generado sea más eficiente.

e1

e2 P
H

e3 C1 C2

Figura 2.2: Estados, subestados y uniones

Al entrar en una unión conectiva, el sistema, a través de una condición, selecciona una
de las transiciones de salida para su evolución.
Las uniones de tipo historia se utilizan en estados que han sido divididos por una
descomposición OR. Si en el estado padre se pone el sı́mbolo H entonces cada vez que
se active el estado padre, el primer estado que se activará será el estado hijo que estuvo
activo por última vez.

2.3.2 Elementos de texto especiales


Datos
Una carta tiene asociados ciertos datos a los que puede acceder. Es necesario declararlos
en Stateflow y pueden ser de los siguientes tipos:
• Entrada de Simulink
2.4. CREACIÓN DE UN MODELO CON STATEFLOW–SIMULINK 25

• Salida de Simulink

• Local

• Constante

• Temporal

• Workspace
Los datos declarados como entrada o salida de Simulink generan automáticamente una
entrada o una salida en el bloque Chart creado por Stateflow en Simulink. Los de los
tipos local, constante y temporal pueden definirse para toda la carta o dentro de un
estado individual. Los datos temporales son sólo válidos mientras el estado padre se está
ejecutando y son reinicializados cada vez que éste se activa. El tipo workspace es una
construcción especial que permite utilizar el entorno de trabajo (workspace) de Matlab
para compartir datos a través de toda la simulación. Los datos por defecto, se almacenan
en memoria en formato double de C pero se puede cambiar a otros formatos. Cada dato
tiene 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 automáticamente
un único puerto de entrada–salida de eventos en el bloque Chart de Simulink, de forma
que todos los eventos entran o salen, formando un vector de eventos, por el mismo puerto.
Cada evento lleva asociado un ı́ndice que refiere la posición del evento en el vector. La
forma de producir un evento en Simulink para que entre en el bloque Chart es a través
de cambio brusco (flanco) de alguna señal. Al declarar el evento en Stateflow, se puede
elegir entre:
• Flanco de subida

• Flanco de bajada

• Flanco indiferente

2.4 Creación de un modelo con Stateflow–Simulink


Tras arrancar el programa Matlab, creamos un modelo nuevo (new-model ) de Simulink y
colocamos en el mismo, con el ratón, el bloque Chart de Stateflow.
Con el editor gráfico se pueden crear cartas Stateflow, de modo interactivo, simple-
mente picando con el ratón en cada elemento y arrastrándolo a la ventana de dibujo.
Una vez colocados varios estados, podemos crear transiciones picando con el ratón en
26 CAPÍTULO 2. SIMULINK

un estado y arrastrándolo hasta otro estado. Se etiquetan los estados y las transiciones
indicando las acciones que van a ocurrir durante la ejecución y bajo que condiciones se
harán las transiciones. Finalmente se añade el historial, uniones, y estados en paralelo
para detallar las operaciones del modelo.
Se pueden utilizar sub-cartas (una carta dentro de otra carta) para dotar de jerarquı́a
al diseño. Se permite crear transiciones entre objetos que residen en diferentes sub-cartas
al mismo nivel o a diferentes niveles en la carta superior. Las sub-cartas permiten reducir
una carta complicada a un conjunto de diagramas organizados jerárquicamente. Con ello
se consigue que la carta sea más fácil de entender y de mantener sin cambiar para nada
su semántica.
Los pasos a seguir para una aplicación completa son:

• Crear la carta Stateflow

• Utilizar el Explorer de Stateflow

• Definir un interface de bloques de Stateflow

• Ejecutar la simulación

• Generar el código

La generación de código depende de la máquina en donde se vaya a implementar la


aplicación y no se hace hasta la última fase del diseño. El código generado por defecto
es ANSI C pero existen programas que a partir del modelo de Stateflow generan código
para otros lenguajes. Entre ellos cabe citar el programa sf2vhld, que es un traductor
de Stateflow a VHLD, y el programa sf2plc que genera código para programar algunos
autómatas programables.

Observaciones
• Si la simulación va a ser larga se puede adoptar un tiempo de simulación “infinito”
poniendo el parámetro de simulación Stop time = inf.

• Para que se inicie la simulación el sistema necesita un primer evento, como de


arranque. Esto en ocasiones puede resultar molesto porque suele requerir que usua-
rio produzca ese evento inicial de forma no muy ortodoxa. Esto puede evitarse
marcando X en la casilla con el texto “Execute (enter) Chart At Initialization” que
aparece en el menú 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 colocan
en los cruces entre la vı́a férrea y las carreteras o caminos. Como todos sabemos, el
funcionamiento de una de estas barreras como la de la figura 2.3 es muy sencillo: se abre
y se cierra para evitar que los coches choquen con los trenes.
El problema que se plantea es diseñar un sistema de control automático que sea capaz
de cerrar la barrera cuando se aproxime un tren y de cerrarla cuando el tren haya pasado.
Supondremos en principio que la vı́a férrea es de un sólo sentido.
2.4. CREACIÓN 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 del


tren son eventos que pueden aprovecharse para abrir y cerrar la barrera.
Para medir desplazamientos consideraremos una recta, eje x, dispuesta a lo largo de la
vı́a y con origen 0 en el punto en que está colocada la barrera, siendo el sentido positivo
el de salida del tren.
Los componentes necesarios para montar el sistema pueden ser: una barrera accionada
por un motor-reductor, dos sensores de presencia s1 y s2 , un sistema digital y relés y
elementos auxiliares de conexión.
Cada sensor de presencia se instalará junto al raı́l de la vı́a de tal forma que al pasar
el tren emita una señal. Colocaremos el sensor s1 en un punto x1 en el sentido de llegada
del tren y alejado lo suficiente del cruce como para que dé tiempo a bajar la barrera. El
sensor s2 será colocado en otro punto x2 en el sentido de partida del tren, en otro lugar
próximo al cruce. De este modo podremos utilizar las señales de los sensores como eventos
indicativos de la presencia del tren dentro del intervalo [x1 , x2 ].
La operación de la barrera debe ser: cuando el sensor s1 se activa, la barrera debe
cerrarse; cuando el sensor s2 se activa la barrera puede abrirse.
Para realizar el modelo del sistema de control de eventos discretos vamos a emplear
las posibilidades de división en paralelo (paralelismo) y de trasmisión de eventos de que
disponen 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 transición de 0 a 1 del interruptor Sw 1 (flanco de subida) indicará que llega el tren
y una transición de 1 a 0 del interruptor Sw 2 (flanco de bajada) indicará que el tren se
ha 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 representa
el 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 señales generadas por los
interruptores Sw1 y Sw2 . En el estado Tren, un flanco de subida en la entrada de Sw1
es el evento preciso para disparar la transición s1 mientras que un flanco de bajada la
entrada de Sw2 lo es para la s2 . A su vez las transiciones s1 y s2 transmiten eventos
28 CAPÍTULO 2. SIMULINK

Tren 1 Barrera 2

Fuera Abrir

1
0 s1/e1 s2/e2 e1 e2
Sw1
Dentro Cerrar
1
0
Sw2 Chart

Figura 2.4: Diagramas de Simulink y Stateflow

locales al estado Barrera para disparar las transiciones e1 y e2 .


Supondremos que inicialmente el tren está lejos y la barrera está 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 cambiará de Fuera a Dentro y antes de que se termine la transición s1 , el
evento local e1 será transmitido. El evento e1 accionará entonces la transición dentro del
estado Barrera de Abrir a Cerrar.
Capı́tulo 3

Ejercicios de Cálculo

3.0.2 Funciones variable compleja


En las aplicaciones de Sistemas Dinámicos y Teorı́a de Control aparecen con frecuencia
las funciones de variable compleja. Una función de variable compleja es una función

f : C→C
z 7→ f (z)

Las funciones de variable compleja f (z) no se pueden representar en 3D. Caben dos
alternativas. La primera consiste en restringir el dominio de la función a una lı́nea en el
plano z, obteniendo otra lı́nea en el plano f (z). En el siguiente ejemplo, la lı́nea es el eje
imaginario. (transformación conforme),
>> z=[-100:.1:100]*j;
>> f=1./(1+z);
>> plot(f);
0.5

0.4

0.3

0.2

0.1

−0.1

−0.2

−0.3

−0.4

−0.5
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1

La segunda posibilidad consiste en representar en 3D bien la parte real o bien la parte


imaginaria de f (z) (o bien módulo o argumento). En el siguiente ejemplo se representa
el argumento.

29
30 CAPÍTULO 3. EJERCICIOS DE CÁLCULO

>> 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 Solución numérica de ecuaciones


El cálculo aproximado de las raı́ces de la ecuación f (x) = 0 en un intervalo [a, b] es
un problema clásico del análisis numérico. Son sin duda conocidos por el lector algunos
algoritmos como el método 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 de
f (xi ) sea menor que un número ε prefijado.
Para resolver este problema con Matlab, disponemos de la función fzero. Hay que
pasarle 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 está definida la función.

3.0.4 Integración numérica


Ahora vamos a integrar numéricamente f 1(x) en el intervalo [01] utilizando la función
quad (cuadratura) o quad8

>> I=quad(’f1’,0,1)
>> I=quad8(’f1’,0,1)

El resultado es el mismo.

3.1 Derivación e integración


El paquete Symbolic Toolbox de Matlab permite realizar las operaciones de derivación e
integración simbólicas.

3.1.1 Derivadas
El comando diff() de Matlab permite calcular derivadas, totales y parciales, de una
expresión algebraica, función de una o varias variables y parámetros, respecto de una de
ellas (o de ellos). Supongamos que nos dan una expresión f (x), por ejemplo el polinomio

f (x) = a3 x3 + a2 x2 + a1 x + a0
df (x)
y deseamos hallar sus derivadas respecto de x. Podemos hallar dx
de dos formas:
3.1. DERIVACIÓN E INTEGRACIÓN 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 especificando
la variable respecto a la que queremos derivar,
>> fx=diff(f,x)
fx =
3*a3*x^2+2*a2*x+a1 .
d2 f (x)
La derivada segunda, 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 parámetro, supongamos que a2 ,
escribiremos
>> fa3=diff(f,a3)
fa3 =
x^3
La operación de derivación, como otras, se puede extender a vectores y matrices. Si
pedimos la derivada de una matriz A respecto de una variable x, Matlab calcula otra
matriz 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 CAPÍTULO 3. EJERCICIOS DE CÁLCULO

3.1.2 Integrales
El comando int() de Matlab permite resolver integrales,R tanto indefinidas como definidas.
x
Sea la función f (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 .

Rb
y para obtener la expresión de una integral definida, tal como a
f (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, también habrı́amos podido poner dos números.


Si la variable de integración 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 derivación, la integración se puede extender a vectores y matrices.

3.2 Ecuaciones diferenciales


Matlab permite resolver ecuaciones diferenciales de dos formas: numérica y simbólica.

3.3 Resolución numérica


Matlab dispone de las funciones ode23 y ode45 para resolver ecuaciones diferenciales.
Para ello hemos de convertir primero (si es posible) la ecuación diferencial de orden n en
n ecuaciones diferenciales de primer orden (forma normal). Veamos el método mediante
el ejemplo del péndulo.
3.4. RESOLUCIÓN SIMBÓLICA 33

En la figura, f (t) es una fuerza exterior, tangencial, aplicada


al péndulo. La ecuación diferencial de deduce aplicando la
β
segunda ley de Newton:

f (t) − mg sin(β) − ma = 0
f (t) − mg sin(β) − ml β̈ = 0
f (t) mlβ̈ + mg sin(β) − f (t) = 0

Haciendo el cambio β = x1 , β̇ = x2, queda


mg
(
ẋ1 = x2
f (t) − mg sin x1
ẋ2 =
lm
Para resolver este sistema de ecuaciones de primer grado Matlab exige crear un fichero
de función con la definición de dicho sistema (ecuaciones de estado). Esto lo hacemos
escribiendo la ecuación diferencial en el fichero pendulo.m, con el editor:

function x_prima=péndulo(t,x)
l=1; m=1; g=9.8; % Constantes del péndulo
if t<1 % Fuerza exterior (pulso único 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 numéricas de la


ecuación del péndulo:

>> t0=0; tf=5; % Intervalo de integración


>> x0=[0]; % Condiciones iniciales
>> [t,x]=ode23(’péndulo’,t0,tf,x0);
>> plot(t,x)

3.4 Resolución simbólica


La orden dsolve permite resolver ecuaciones diferenciales escritas en forma simbólica en
Matlab. Esto se hace denotando las derivadas por medio del operador D. Por ejemplo, la
ecuación diferencial lineal
d2 x dx
a2 2
+ a1 + a0 x = b
dt dt
34 CAPÍTULO 3. EJERCICIOS DE CÁLCULO

(2*cos(2^(1/2)*t)+sin(2^(1/2)*t)*2^(1/2))/exp(t)

1.5

0.5

−0.5
0 1 2 3 4 5 6 7 8
t

3.4.1 Transformada de Laplace


En los sistemas de control con modelo matemático de función de transferencia se presenta
el problema del cálculo de la transformada inversa, de cara a la obtención de la respuesta
del sistema (variable y(t) de salida) dada la variable de entrada x(t). Las variables de
entrada y de salida son funciones del tiempo.
X(s) e Y (s) son las transformadas de Laplace de x(t) e y(t) respectivamente. Por
tanto, dada x(t), 
X(s) = L[x(t)]
=⇒ y(t) = L−1 [Y (s)]
Y (s) = X(s)G(s)
X(s), Y (s) y G(s) son funciones racionales.

3.4.2 Resolución numérica


Uno de los métodos más utilizados para hallar la antitransformada de Laplace de una
b(s)
función racional Y (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 hay
ninguna repetida. Entonces, la expansión en fracciones simples es de la forma
b(s) r1 r1 rn
Y (s) = = + + ... + + k(s)
a(s) s − p1 s − p1 s − pn
en donde los números (en general complejos) r1 , . . . , rn se llaman residuos de la función
Y (s) y k(s) es el cociente de la división de b(s) entre a(s), el cual es cero si Y (s) es propia.
Los polos, los residuos, y el término k(s) pueden hallarse mediante Matlab. Entonces,
la transformada inversa es inmediata:
y(t) = r1 ep1 t + r2 ep2 t + . . . + rn epn t + L−1 [k(s)]
3.4. RESOLUCIÓN SIMBÓLICA 35

Como aplicación, vamos a resolver mediante Matlab el ejercicio de la figura.

f (t)
m

0 x(t) b

La ecuación diferencial de este sistema es

mẍ(t) + bẋ(t) + kx(t) = f (t)

La transformada de Laplace, con condiciones iniciales nulas, es

ms2 X(s) + bsX(s) + kX(s) = F (s)

Si, por ejemplo, f (t) es la función escalón unitario, f (t) = u(t), F (s) = 1/s, queda

1
X(s) =
ms3 + bs2 + ks

Nótese que el término independiente del polinomio denominador de X(s) es cero.


La resolución con Matlab, para los valores m = 1, b = 1, k = 1, se puede hacer del
siguiente 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 CAPÍTULO 3. EJERCICIOS DE CÁLCULO

y(t)

1.2

0.8

0.6

0.4

0.2

0
0 5 10 15
t

Esto mismo se puede hacer de modo aún más sencillo utilizando la función step
(escalón) o la función lsim del ToolBox Signals and Systems de Matlab.

3.5 Resolución simbólica


La librerı́a Symbolic Toolbox de Matlab permite hallar, mediante las órdenes laplace
e ilaplace, las transformadas directa e inversa de Laplace. Dada una función 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 función f (t) hemos de escribir


>> F = laplace(f)
en donde f es la expresión simbólica de f (t). Por defecto Matlab asume que la variable
independiente de f es t. Para hallar la transformada inversa f (t) de una F (s), pondremos
>> f = ilaplace(F)
en donde f es la expresión simbólica de F (s). Por defecto Matlab asume que la variable
independiente de F es s.
Como ejercicio, vamos a resolver de nuevo el ejemplo mecánico que antes hemos cal-
culado numéricamente.
>> syms s m b k
>> G = 1/(m*s^2+b*s+k)
>> G1 = subs(G,[m,b,k],[1,1,1])
3.5. RESOLUCIÓN SIMBÓLICA 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 gráfica igual que la de antes.
38 CAPÍTULO 3. EJERCICIOS DE CÁLCULO
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 introducirlas
en 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 solución, 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 solución.
Consideremos ahora el sistema homogéneo Ax = 0. Sabemos que éste siempre tiene
solución (al menos la trivial) y que el conjunto de soluciones son los vectores del núcleo
de 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 núcleo de la aplicación lineal
asociada a A: z1 = [−2 1 0 0 0]0 , z2 = [−3 0 1 0 0]0 y z3 = [−4 0 0 1 0]0 . Por tanto, el
núcleo de la aplicación lineal es el conjunto
{z = k1 z1 + k2 z2 + k3 z3 | k1 , k2 , k3 ∈ C}.

39
40 CAPÍTULO 4. EJERCICIOS DE ALGEBRA LINEAL

4.1.1 Aplicación a circuitos eléctricos


Las leyes básicas de la Teorı́a de Circuitos son la ley de Ohm,

Z =VI

en donde Z es la impedancia del circuito, V el voltaje aplicado e I la intensidad que


circula por el mismo, y las leyes de Kirchhoff. Para calcular las intensidades y voltajes en
los circuitos eléctricos se suelen aplicar los conocidos métodos de mallas y nudos. Estos
métodos conducen al planteamiento de un sistema de ecuaciones el cual ha de resolverse
para hallar los valores de las intensidades y voltajes del circuito.
Veamos como se resuelve el circuito de la figura, aplicando el método de mallas, con
Matlab. Dadas las impedancias z1 , . . . , z6 y el voltaje v(t) aplicado, se pide hallar las
intensidades de malla i1 , i2 e i3 .

Z1

+
i1
v Z4
- Z2
i3 Z6

i2
Z5
Z3

Las ecuaciones de las tres mallas indicadas en la figura son:

v = (z1 + z2 + z4 )i1 − z2 i2 − z4 i3
0 = −z4 i1 − z5 i2 + (z4 + z5 + z6 )i3 (4.1)
0 = −z2 i1 + (z2 + z5 + z3 )i2 − z5 i3

o, en forma matricial,
     
v z1 + z 2 + z 4 −z2 −z4 i1
0 =  −z4 −z5  
z 4 + z 5 + z 6 , i2 
0 −z2 z2 + z 5 + z 3 −z5 i3

es decir
V =ZI
en donde V, I ∈ C3 y Z ∈ C3×3 . La solución del problema consiste en hallar i1 , i2 y i3 .

Resolución numérica
La solución numérica consiste en despejar el vector I de intensidades, una vez que se
han dado valores numéricos (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 de


impedancias es siempre no singular y, por tanto, existe la inversa Z −1 . Por tanto,

I = Z −1 V

Para hacer estos cálculos con Matlab, escribiremos en un fichero-m los valores dados
al 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 ejecutarlo
mediante 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 ángulo 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 también resolver simbólicamente de dos formas. La primera,
resolviendo el sistema de ecuaciones (4.1), en forma simbólica, mediante el comando solve
y la segunda, por inversión de la matriz Z de impedancias en forma simbólica.
42 CAPÍTULO 4. EJERCICIOS DE ALGEBRA LINEAL

4.1.2 Aplicación a los Sistemas de Control


El modelo de estado de un sistema de control viene dado por las ecuaciones

ẋ(t) = A x(t) + B u(t) (4.2)


y(t) = C x(t) + D u(t)

en donde A ∈ Rn×n , B ∈ Rn×q , C ∈ Rp×n y D ∈ Rp×q .


Uno de los problemas que se presentan en las aplicaciones es hallar la solución del
problema de condiciones iniciales, es decir, la solución del sistema (4.2) junto con un
sistema de condiciones iniciales dadas x(0) = x0 ∈ Rn . La solución, que se puede hallar
por el método de variación de las constantes (o por otros métodos), viene dada por las
fórmulas

Z t
At
x(t) = e x(0) + eA(t−τ ) B U (τ ) dτ (4.3)
0
y(t) = Cx(t) + Du(t)

El cálculo numérico de estas expresiones está implementado en la función lsim de Matlab.


Un sencillo ejemplo nos aclarará sobre su uso. Sea un sistema dinámico lineal definido
por las matrices    
0 2 0
A= B=
−1 −1 1
   
C= 1 1 D= 0
Vamos a calcular la respuesta temporal y(t) cuando la entrada u(t) es una función escalón
unitario en t = 0 y las condiciones iniciales vienen dadas por el vector x(0) = [00] 0 . Para
hallar la solución 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 solución numérica hemos de definir un vector t cuyos elementos son los
valores del tiempo en los que queremos a calcular la solución. 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 tamaño que t y cuyos elementos son todos igual
a uno. Para obtener la solución, 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 representar
gráficamente y(t), ponemos
4.1. SISTEMAS DE ECUACIONES LINEALES 43

y(t)
1.5

0.5

0
0 1 2 3 4 5 6 7 8 9 10

con lo que obtenemos la gráfica de la respuesta temporal.


Otra forma de obtener la solución de las ecuaciones de estado es utilizando la trans-
formada de Laplace. Sabemos que la matriz de transferencia tiene dada por la fórmula
G(s) = C(sIn − A)−1 B + 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 nos
dará y(t).
y(t) = L−1 (Y (s))
Apliquemos este método 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 operación G(s) = C(sIn − A)−1 B + 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 expresión de y(t). Podemos comprobar con
>> ezplot(y, [0,10]), axis([0, 10, 0, 1.5]), title(’y(t)’)
que obtenemos la misma gráfica que antes.
44 CAPÍTULO 4. EJERCICIOS DE ALGEBRA LINEAL

4.2 Comandos más interesantes

El número de órdenes y programas disponibles en Matlab es muy elevado y por ello no


es posible un listado exhaustivo de todos ellos. En esta sección se da un resumen, a
modo de lista, de los que consideramos más importantes para las asignaturas del área de
Automática y Control.

General
help help facility
demo run demonstrations
who list variables in memory
what list M-files on disk
size row and column dimensions
length vector length
clear clear workspace
computer type of computer
ˆC local abort
exit exit MATLAB
quit same as exit

Matrix Operators Array Operators


+ addition + addition
− subtraction − subtraction
∗ multiplication .∗ multiplication
/ right division ./ right division
\ left division .\ left division
b power .b 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 MÁS 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 assigned
eps floating point precision
pi π

i, j −1
inf ∞
NaN Not-a-Number
clock wall clock
date date
flops floating point operation count
nargin number of function input arguments
nargout number of function output arguments

Disk Files
chdir change current directory
delete delete file
diary diary of the session
dir directory of files on disk
load load variables from file
save save variables to file
type list function or file
what show M-files on disk
fprintf write to a file
pack compact memory via save
46 CAPÍTULO 4. EJERCICIOS DE ALGEBRA LINEAL

Special Matrices
compan companion
diag diagonal
eye identity
gallery esoteric
hadamard Hadamard
hankel Hankel
hilb Hilbert
invhilb inverse Hilbert
linspace linearly spaced vectors
logspace logarithmically spaced vectors
magic magic square
meshdom domain for mesh points
ones constant
pascal Pascal
rand random elements
toeplitz Toeplitz
vander Vandermonde
zeros zero

Matrix Manipulation
rot90 rotation
fliplr flip matrix left-to-right
flipud flip matrix up-to-down
diag diagonal matrices
tril lower triangular part
triu upper triangular part
reshape reshape
.’ transpose
: convert matrix to single column; A(:)

Relational and Logical Functions


any logical conditions
all logical conditions
find find array indices of logical values
isnan detect NaNs
finite detect infinities
isempty detect empty matrices
isstr detect string variables
strcmp compare string variables
4.2. COMANDOS MÁS INTERESANTES 47

Control Flow
if conditionally execute statements
elseif used with if
else used with if
end terminate if, for, while
for repeat statements a number of times
while do while
break break out of for and while loops
return return from functions
pause pause until key pressed

Programming and M-Files


input get numbers from keyboard
keyboard call keyboard as M-file
error display error message
function define function
eval interpret text in variables
feval evaluate function given by string
echo enable command echoing
exist check if variables exist
casesen set case sensitivity
global define global variables
startup startup M-file
getenv get environment string
menu select item from menu
etime elapsed time

Text and Strings


abs convert string to ASCII values
eval evaluate text macro
num2str convert number to string
int2str convert integer to string
setstr set flag indicating matrix is a string
sprintf convert number to string
isstr detect string variables
strcomp compare string variables
hex2num convert hex string to number
48 CAPÍTULO 4. EJERCICIOS DE ALGEBRA LINEAL

Command Window
clc clear command screen
home move cursor home
format set output display format
disp display matrix or text
fprintf print formatted number
echo enable command echoing

Graph Paper
plot linear X-Y plot
loglog loglog X-Y plot
semilogx semi-log X-Y plot
semilogy semi-log X-Y plot
polar polar plot
mesh 3-dimensional mesh surface
contour contour plot
meshdom domain for mesh plots
bar bar charts
stairs stairstep graph
errorbar add error bars

Graph Annotation
title plot title
xlabel x-axis label
ylabel y-axis label
grid draw grid lines
text arbitrarily position text
gtext mouse-positioned text
ginput graphics input

Graph Window Control


axis manual axis scaling
hold hold plot on screen
shg show graph window
clg clear graph window
subplot split graph window

Graph Window Hardcopy


print send graph to printer
prtsc screen dump
meta graphics metafile
4.2. COMANDOS MÁS INTERESANTES 49

Elementary Math Functions


abs absolute value or complex magnitude
angle phase angle
sqrt square root
real real part
imag imaginary part
conj complex conjugate
round round to nearest integer
fix round toward zero
floor round toward −∞
ceil round toward ∞
sign signum function
rem remainder
exp exponential base e
log natural logarithm
log10 log base 10

Trigonometric Functions
sin sine
cos cosine
tan tangent
asin arcsine
acos arccosine
atan arctangent
atan2 four quadrant arctangent
sinh hyperbolic sine
cosh hyperbolic cosine
tanh hyperbolic tangent
asinh hyperbolic arcsine
acosh hyperbolic arccosine
atanh hyperbolic arctangent

Special Functions
bessel bessel function
gamma gamma function
rat rational approximation
erf error function
inverf inverse error function
ellipk complete elliptic integral of first kind
ellipj Jacobian elliptic integral
50 CAPÍTULO 4. EJERCICIOS DE ALGEBRA LINEAL

Decompositions and Factorizations


balance balanced form
backsub backsubstitution
cdf2rdf convert complex-diagonal to real-diagonal
chol Cholesky factorization
eig eigenvalues and eigenvectors
hess Hessenberg form
inv inverse
lu factors from Gaussian elimination
nnls nonnegative least squares
null null space
orth orthogonalization
pinv pseudoinverse
qr orthogonal-triangular decomposition
qz QZ algorithm
rref reduced row echelon form
schur Schur decomposition
svd singular value decomposition

Matrix Conditioning
cond condition number in 2-norm
norm 1-norm,2-norm,F-norm,∞-norm
rank rank
rcond condition estimate (reciprocal)

Elementary Matrix Functions


expm matrix exponential
logm matrix logarithm
sqrtm matrix square root
funm arbitrary matrix function
poly characteristic polynomial
det determinant
trace trace
kron Kronecker tensor product
4.2. COMANDOS MÁS INTERESANTES 51

Polynomials
poly characteristic polynomial
roots polynomial roots—companion matrix method
roots1 polynomial roots—Laguerre’s method
polyval polynomial evaluation
polyvalm matrix polynomial evaluation
conv multiplication
deconv division
residue partial-fraction expansion
polyfit polynomial curve fitting

Column-wise Data Analysis


max maximum value
min minimum value
mean mean value
median median value
std standard deviation
sort sorting
sum sum of elements
prod product of elements
cumsum cumulative sum of elements
cumprod cumulative product of elements
diff approximate derivatives
hist histograms
corrcoef correlation coefficients
cov covariance matrix
cplxpair reorder into complex pairs

Signal Processing
abs complex magnitude
angle phase angle
conv convolution
corrcoef correlation coefficients
cov covariance
deconv deconvolution
fft radix-2 fast Fourier transform
fft2 two-dimensional FFT
ifft inverse fast Fourier transform
ifft2 inverse 2-D FFT
fftshift FFT rearrangement

Numerical Integration
quad numerical function integration
quad8 numerical function integration
52 CAPÍTULO 4. EJERCICIOS DE ALGEBRA LINEAL

Differential Equation Solution


ode23 2nd/3rd order Runge-Kutta method
ode45 4th/5th order Runge-Kutta-Fehlberg method

Nonlinear Equations and Optimization


fmin minimum of a function of one variable
fmins minimum of a multivariable function
fsolve solution of a system of nonlinear equations
(zeros of a multivariable function)
fzero zero of a function of one variable

Interpolation
spline cubic spline
table1 1-D table look-up
table2 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

You might also like