SIMULINK
10.1 INTRODUCCION
La Figura 10.2a muestra la ventana que se despliega al hacer doble clic sobre la
librería “Continuous” y la Figura 10.2b muestra los íconos que simbolizan a cada
uno de los bloques que incluye esta librería. Los nombres de los bloques son:
Derivative (Derivada), Integrator (Integrador), State-Space (Espacio de los Estados),
Transfer Fcn (Función de Transferencia como numerador/denominador), Transport
Delay (Tiempo Muerto), Variable Transport Delay (Tiempo Muerto Variable), Zero-
Pole (Transferencia Muerto en la forma de zeros y polos)
Mach
179
(a) (b)
Mach
180
(a) (b)
Mach
181
(a) (b)
La Figura 10.6 muestra las ventanas de especificaciones para los bloques que
incluyen un atraso por tiempo muerto dentro de la dinámica de un sistema. Simulink
incluye un bloque “Transport Delay” y otro titulado “Variable Transport Delay”
Mach
182
(a) (b)
La Figura 10.7 muestra la ventana que se despliega al hacer doble clic sobre la
librería “Math Operations” y la Figura 10.8 los botones incluidos en dicha librería.
Mach
183
Mach
184
El bloque “Slider Gain” realiza la misma operación del bloque “Gain” permitiendo
la variación del valor de la ganancia asignada, mediante el botón deslizable, desde
un valor mínimo hasta un máximo. La Figura 10.10b muestra la ventana de
especificaciones del bloque “Slider Gain”
(a) (b)
Figura 10.10 Especificaciones de los bloques (a) Gain y (b) Slider Gain
Mach
185
(a) (b)
Figura 10.12 Especificaciones del bloque (a) Math Function, (b) Trigonometric
Function
Mach
186
La Figura 10.13 muestra la ventana que se despliega al hacer doble clic sobre la
librería “Sources” y la Figura 10.14 los íconos de los bloques incluidos en dicha
librería
Mach
187
(a) (b)
Mach
188
(a) (b)
Figura 10.16 Especificaciones del bloque (a) Sine Wave y (b) Signal Generator
Mach
189
(a) (b)
Mach
190
(a) (b)
(a) (b)
Figura 10.19 Especificaciones del bloque (a) XY Graph y (b) Floating Scope
Mach
191
(a) (b)
Figura 10.20 Especificaciones del bloque (a) “Display” y (b) “To Workspace”
Las Figuras 10.22 muestran las ventanas que se despliegan al abrir las librerías
“Signal Routing” y “Ports & Subsystems” que contienen bloques de enrutamiento de
señales y definición de puertos y subsistemas.
Mach
192
(a) (b)
Figura 10.22. Librería (a) Signal Routing (a) y (b) Ports & Subsystems
Mach
193
Mach
194
Mach
195
Una función de transferencia se puede simular con el bloque “LTI System” que se
encuentra en la herramienta “Control System Toolbox” y que se observa al hacer
doble clic sobre dicha herramienta. Con el bloque “LTI System” se puede introducir
la función de transferencia ya sea en la forma estándar, o zero-pole o espacio de los
estados, utilizando los comandos correspondientes para cada una de ellas, es decir,
tf, zpk o ss
Mach
196
Mach
197
Mach
198
Las leyendas que aparecen sobre algunas corrientes se digitan haciendo un clic sobre
el lugar sobre el cual se quiere introducir. Las letras griegas se colocan con el estilo
“Symbol”
Para esta simulación, se construye un archivo tipo “Script” en Matlab con nombre
“Sistemas.m” y un diagrama de bloques en Simulink denominado
“Primer_Segundo_Orden.mdl”. En el primero se capturan o calculan todos los
parámetros requeridos y en el segundo se desarrolla la simulación. De esta forma,
los bloques del diagrama en Simulink se especifican con los símbolos asignados en
el archivo “Sistemas.m”. Se observa, además, que el tiempo de simulación se
captura con el nombre “Rango” y se introduce dentro de la ventana de
especificaciones de los parámetros de simulación que se despliega dentro de la
ventana de Simulink. La simulación se inicia con la apertura del archivo
“Sistemas.m”, y desde aquí se ordena la corrida y posterior apertura del diagrama de
bloques en Simulink. La solución gráfica resultante se observa desplegando los
registradores respectivos. Algunos comandos de matlab utilizados en el primero de
los archivos se explican al final de esta lección.
Mach
199
Mach
200
Mach
201
Mach
202
Mach
203
Mach
204
Mach
205
Mach
206
Las Figuras 10.38 a 10.42 muestran los diagramas de bloques de cada uno de los
sucesivos subsistemas introducidos en el diagrama de bloque de la Figura 10.37. La
estructura de los subsistemas es similar a la construida para el modelo de tres
tanques de flujo en serie no interactuantes.
Mach
207
Mach
208
Mach
209
Mach
210
Al hacer doble clic sobre el bloque se despliega el subsistema que muestra el bloque
“For Iterator”, y un puerto de entrada unido a un puerto de salida como se observa
en la Figura 10.46
El bloque “For Iterator” se especificó para que la entrada del número de cálculos se
alimente externamente seleccionando la opción “External” en el cuadro “Source of
number of iterations”
Mach
211
Figura 10.46
Mach
212
En los archivos codificados con Matlab para ejecutar algunas simulaciones en esta
lección se utilizan algunos comandos como el msgbox, errordlg y sim. A
continuación se explican en cuanto a la sintaxis empleada en algunos de ellos:
Comando msgbox
Mach
213
msgbox(Mensaje, Título,Icono)
errordlg(Mensaje, Título)
questdlg(Mensaje, Título,Botón1,Boton2,Boton3,BotonPorDefecto)
A los botones pueden asignárseles nombres diferentes a los que muestran por
defecto. La presión de uno de ellos acepta como respuesta el nombre
correspondiente
Comando sim
sim(‘Model’)
[t,x,y] = sim(‘Model’, Intervalo de Tiempo)
Mach
214
Comando beep
Archivo Sistemas.m
Mach
215
disp(':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::')
disp(' ')
disp(' ')
disp('1. PASO')
disp('2. RAMPA')
disp('3. SENO')
disp(' ')
R = input('Escriba La Respuesta a Simular: ');
if (R < 1)|(R > 3)
errordlg('Selecione 1, 2 o 3')
beep
R = input('Escriba La Respuesta a Simular: ');
end
clc
disp(' ')
disp(' ')
switch R
case 1
clc
disp('::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ')
disp(' ')
disp(' CAMBIO PASO EN LA VARIABLE DE ENTRADA')
disp(' ')
disp('::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ')
disp(' ')
X = input('Introduzca El Valor Del Cambio Paso En La Variable De Entrada
= ');
disp(' ')
r=0;
A=0;
w=0;
case 2
clc
disp('::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ')
disp(' ')
disp(' CAMBIO RAMPA EN LA VARIABLE DE ENTRADA')
disp(' ')
disp('::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ')
disp(' ')
r = input('Introduzca El Valor De La Pendiente De La Rampa De Entrada = ');
Mach
216
disp(' ')
X=0;
A=0;
w=0;
case 3
clc
disp('::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ')
disp(' ')
disp(' CAMBIO SENO EN LA VARIABLE DE ENTRADA')
disp(' ')
disp('::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ')
disp(' ')
A = input('Amplitud De La Entrada Seno = ');
w = input('Frecuencia De La Entrada Seno = ');
disp(' ')
X=0;
r=0;
end
disp(':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::')
disp(' ')
disp(' PARAMETROS DE LA SIMULACION DINAMICA')
disp(' ')
disp(':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::')
disp(' ')
helpdlg('Si Desea Ver La Respuesta Sin Tiempo Muerto Digite "Cero" De Lo
Contrario Otro Valor','Tiempo Muerto')
beep
To = input('* Escriba El Valor Del Tiempo Muerto, s = ');
Rango = input('* Tiempo de simulación, s = ');
disp(' ')
clc
disp('::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ')
disp(' ')
disp(' SISTEMAS')
disp(' ')
disp('::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ')
disp(' ')
disp(' ')
disp('1. SISTEMA LINEAL DE PRIMER ORDEN: TANQUE CALENTADOR')
disp('2. SISTEMA LINEAL DE SEGUNDO ORDEN: VALVULA DE
CONTROL')
disp(' ')
Mach
217
switch S
case 1
clc
disp(':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::')
disp(' ')
disp('¡USTED ESCOGIO SIMULAR EL SISTEMA LINEAL DE PRIMER
ORDEN: TANQUE CALENTADOR!')
disp(' ')
disp(':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::')
disp(' ')
disp(' ')
clc
disp(' ')
disp(' ')
disp('::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ')
disp(' ')
disp(' PARAMETROS FISICOS DEL SISTEMA')
disp(' ')
disp('::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ')
disp(' ')
F = input('* Flujo Volumetrico, m^3/s = ');
V = input('* Volumen Del Liquido En El Tanque, m^3 = ');
A = input('* Area De Transferencia De Calor, m^2 = ');
U = input('* Coeficiente Global De Transferencia De Calor, KW/m^2-ºC = ');
T = input('* Temperatura De Entrada Del Agua En Estado Estacionario, ºC =
');
C = input('* Calor Específico, KJ/Kg-ºC = ');
RHO = input('* Densidad Del Agua, Kg/m^3 = ');
disp(' ')
disp(' ')
disp('::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ')
disp(' ')
Mach
218
switch R
case 2
disp('Atraso De La Respuesta Lineal')
tau
case 3
disp('Amplitud Del Perfil Sinusoidal De La Respuesta');
K*A/sqrt(1+(w*tau)^2)
disp('Fase de la respuesta con respecto a la entrada');
atan(-w*tau)
end
STOP=input('Presione ENTER para ver la simulacion en Simulink');
clc
case 2
clc
disp('::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ')
disp(' ')
disp('!USTED ESCOGIO SIMULAR EL SISTEMA LINEAL DE SEGUNDO
ORDEN: VALVULA DE CONTROL!')
disp(' ')
disp('::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ')
disp(' ')
disp(' ')
Mach
219
disp('::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ')
disp(' ')
disp(' PARAMETROS FISICOS DEL SISTEMA')
disp(' ')
disp('::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ')
disp(' ')
M = input('* Masa Del Bloque, lbm = ');
C = input('* Coeficiente De Amortiguamiento Viscoso, lbf/pie/s = ');
K = input('* Constante De Hooke Del Resorte, lbf/pie = ');
A = input('* Area Del Diafragma, pie^2 = ');
disp(' ')
disp(' ')
disp('::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ')
disp(' ')
disp(' PARAMETROS DINAMICOS DEL SISTEMA')
disp(' ')
disp('::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ')
disp(' ')
tau = sqrt(M/(32.2*K))
K = A/K
sigma = sqrt((32.2*C^2)/(4*M*K))
disp(' ')
disp(' ')
disp(':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::')
disp(' ')
disp(' RAICES DE LA ECUACION CARACTERISTICA')
disp(' ')
disp(':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::')
disp(' ')
p = [tau^2 2*sigma*tau 1];
z = roots(p)
disp(' ')
disp(' ')
disp('::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ')
disp(' ')
disp(' RESULTADOS')
disp(' ')
disp('::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ')
disp(' ')
switch R
case 1
if sigma > 1
Mach
220
case 2
if sigma > 1
disp('Respuesta Sobreamortiguada')
disp('Atrasos dinámicos')
atraso = -1./z
elseif sigma == 1
disp('Respuesta Amortiguada Crítica')
disp('Atrasos dinámicos')
atraso = -1./z
elseif (sigma < 1)&(sigma > 0)
disp('Respuesta Subamortiguada')
Frecuencia = (sqrt(1-sigma^2))/tau
Fase = atan(2*sigma*(sqrt(1-sigma^2))/(2*sigma^2-1))
elseif sigma == 0
disp('Respuesta Oscilatoria Sostenida')
else
disp('Respuesta Inestable')
end
case 3
if sigma > 1
disp('Respuesta Sobreamortiguada')
disp('Atrasos dinámicos')
atraso = -1./z
Mach
221
end
sim('Primer_Segundo_Orden')
Primer_Segundo_Orden
Archivo “ordenmayorsimulink”
clc
close all
global Ti Inicio K1 K2 K3 rho V Cv Cp w t0 tau1 tau2 tau3 h n m g11 g12 g13 g21
g22 g23 g31 g32 g33 G h11 h21 h31 H GH a11 a12 a13 a21 a22 a23 a31 a32 a33 A
b11 b21 b31 B C D f1 f2 T10 T20 K10 K20 V1 V2 r r2 P P2 Am wf Am2 wf2 NT
disp('
|******************************************************************|'
)
disp(' RESPUESTAS: PAS0, RAMPA Y SENO PARA SISTEMAS DE
ORDEN MAYOR')
disp('
|*******************************************************************
********|')
disp(' ')
disp(' |*********|')
disp(' SISTEMAS')
disp(' |*********|')
disp(' ')
Mach
222
% CAPTURA DE LA RESPUESTA
R = [1 2 3];
R = input('Digite el numero de la respuesta a simular = ');
if R>3 | R<1
errordlg('El numero de la respuesta tiene que ser 1,2 o 3')
disp(' ')
R = input('Digite el numero de la respuesta que desee simular = ');
end
disp(' ')
disp(' |**********|')
disp(' DOMINIOS')
disp(' |**********|')
disp(' ')
disp('1. TIEMPO')
disp('2. LAPLACE')
disp('3. TIEMPO - ESPACIO DE LOS ESTADOS')
disp(' ')
Mach
223
% PROCESO
tau1 = rho*V*Cv/(w*Cp);
tau2 = tau1;
tau3 = tau2;
K1 = w*Cp/(w*Cv);
K2 = K1;
K3 = K2;
switch R
case 1
disp(' ')
disp('
|*******************************************************************
**************|')
Mach
224
switch D
case 1
disp(' ')
disp('
|*******************************************************************
**************|')
disp(' RESPUESTA PASO DE UN SISTEMA NO INTERACTUANTE EN
EL DOMINIO DEL TIEMPO')
disp('
|*******************************************************************
**************|')
disp(' ')
% RESULTADOS
disp(' ')
disp(' |***********|')
disp(' RESULTADOS')
disp(' |***********|')
disp('LAS CONSTANTES DE TIEMPO SON :')
disp(' ')
disp('tau1 = tau2 = tau3 = '), disp(tau1)
disp(' ')
disp('LAS GANANCIAS SON :')
disp(' ')
disp('K1 = K2 = K3 ='), disp(K1)
disp(' ')
sim('nointerordenmayor')
nointerordenmayor
case 2
disp(' ')
Mach
225
disp('
|*******************************************************************
**************|')
disp(' RESPUESTA PASO DE UN SISTEMA NO INTERACTUANTE EN
EL DOMINIO DE LAPLACE ')
disp('
|*******************************************************************
**************|')
disp(' ')
% RESULTADOS
disp(' ')
disp(' |***********|')
disp(' RESULTADOS')
disp(' |***********|')
disp('LAS CONSTANTES DE TIEMPO SON :')
disp(' ')
disp('tau1 = tau2 = tau3 = '), disp(tau1)
disp(' ')
disp('LAS GANANCIAS SON :')
disp(' ')
disp('K1 = K2 = K3 ='), disp(K1)
disp(' ')
sim('nointerordenmayor')
nointerordenmayor
case 3
disp(' ')
disp('
|*******************************************************************
*****************************|')
disp(' RESPUESTA PASO DE UN SISTEMA NO INTERACTUANTE EN EL
DOMINIO DEL TIEMPO - ESPACIO DE LOS ESTADOS')
disp('
|*******************************************************************
*****************************|')
disp(' ')
% PROCESO
a11 = -1/tau1;
a12 = 0;
a13 = 0;
Mach
226
a21 = K1/tau2;
a22 = -1/tau2;
a23 = 0;
a31 = 0;
a32 = K2/tau3;
a33 = -1/tau3;
A = [a11 a12 a13; a21 a22 a23; a31 a32 a33]
b11 = K1/tau1;
b21 = 0;
b31 = 0;
B = [b11; b21; b31]
C = [1 0 0; 0 1 0; 0 0 1]
D = [0;0;0];
% RESULTADOS
disp(' ')
disp(' |***********|')
disp(' RESULTADOS')
disp(' |***********|')
disp('LAS CONSTANTES DE TIEMPO SON :')
disp(' ')
disp('tau1 = tau2 = tau3 = '), disp(tau1)
disp(' ')
disp('LAS GANANCIAS SON :')
disp(' ')
disp('K1 = K2 = K3 ='), disp(K1)
disp(' ')
sim('nointerss')
nointerss
end
case 2
disp('
|*******************************************************************
**************|')
disp(' CAMBIO RAMPA DE UN SISTEMA NO
INTERACTUANTE')
disp('
|*******************************************************************
**************|')
disp(' ')
% ENTRADAS
r = input('Pendiente = ');
Mach
227
P=0;Am=0;wf=0;
switch D
case 1
disp(' ')
disp('
|*******************************************************************
**************|')
disp(' RESPUESTA RAMPA DE UN SISTEMA NO INTERACTUANTE EN
EL DOMINIO DEL TIEMPO')
disp('
|*******************************************************************
**************|')
disp(' ')
% RESULTADOS
disp(' ')
disp(' |***********|')
disp(' RESULTADOS')
disp(' |***********|')
disp('LAS CONSTANTES DE TIEMPO SON :')
disp(' ')
disp('tau1 = tau2 = tau3 = '), disp(tau1)
disp(' ')
disp('LAS GANANCIAS SON :')
disp(' ')
disp('K1 = K2 = K3 ='), disp(K1)
disp(' ')
case 2
disp(' ')
disp('
|*******************************************************************
**************|')
disp(' RESPUESTA RAMPA DE UN SISTEMA NO INTERACTUANTE EN
EL DOMINIO DE LAPLACE ')
disp('
|*******************************************************************
**************|')
disp(' ')
% RESULTADOS
disp(' ')
Mach
228
disp(' |***********|')
disp(' RESULTADOS')
disp(' |***********|')
disp('LAS CONSTANTES DE TIEMPO SON :')
disp(' ')
disp('tau1 = tau2 = tau3 = '), disp(tau1)
disp(' ')
disp('LAS GANANCIAS SON :')
disp(' ')
disp('K1 = K2 = K3 ='), disp(K1)
disp(' ')
case 3
msgbox('En el espacio de los estados solo se puede simular la respuesta paso')
disp(' ')
input(' Pulse ENTER para terminar y realizar una nueva Simulacion')
clc
close all
ordenmayorsimulink
end
sim('nointerordenmayor')
nointerordenmayor
case 3
disp('
|*******************************************************************
**************|')
disp(' CAMBIO SENO DE UN SISTEMA NO INTERACTUANTE')
disp('
|*******************************************************************
**************|')
disp(' ')
% ENTRADAS
Am = input('Amplitud = ');
wf = input('Frecuencia (rad/seg) = ');
P=0;r=0;
switch D
case 1
disp(' ')
disp('
|*******************************************************************
**************|')
Mach
229
% RESULTADOS
disp(' ')
disp(' |***********|')
disp(' RESULTADOS')
disp(' |***********|')
disp('LAS CONSTANTES DE TIEMPO SON :')
disp(' ')
disp('tau1 = tau2 = tau3 = '), disp(tau1)
disp(' ')
disp('LAS GANANCIAS SON :')
disp(' ')
disp('K1 = K2 = K3 ='), disp(K1)
disp(' ')
case 2
disp(' ')
disp('
|*******************************************************************
**************|')
disp(' RESPUESTA SENO DE UN SISTEMA NO INTERACTUANTE EN
EL DOMINIO DE LAPLACE ')
disp('
|*******************************************************************
**************|')
disp(' ')
% RESULTADOS
disp(' ')
disp(' |***********|')
disp(' RESULTADOS')
disp(' |***********|')
disp('LAS CONSTANTES DE TIEMPO SON :')
disp(' ')
disp('tau1 = tau2 = tau3 = '), disp(tau1)
disp(' ')
disp('LAS GANANCIAS SON :')
Mach
230
disp(' ')
disp('K1 = K2 = K3 ='), disp(K1)
disp(' ')
case 3
msgbox('En el espacio de los estados solo se puede simular la respuesta paso')
disp(' ')
input(' Pulse ENTER para terminar y realizar una nueva Simulacion')
clc
close all
ordenmayorsimulink
end
sim('nointerordenmayor')
nointerordenmayor
end
case 2
disp(' ')
disp('
|*******************************************************************
**************|')
disp(' PARÁMETROS FÍSICOS DEL SISTEMA
INTERACTUANTE')
disp('
|*******************************************************************
**************|')
disp(' ')
% ENTRADAS
rho = input('Valor de la densidad, lb/pie3 = ');
V1 = input('Volumen del primer tanque, pie3 = ');
V2 = input('Volumen del segundo tanque, pie3 = ');
f1 = input('Flujo volumetrico de entrada al primer tanque, pie3/min= ');
f2 = input('Flujo volumetrico de entrada al segundo tanque, pie3/min= ');
Cv = input('Calor especifico a volumen constante, Btu/lb-°F = ');
Cp = Cv;
T10 = input('Temperatura Inicial del Tanque 1, °F = ');
T10 = T20;
t0 = input('Tiempo de simulación, min = ');
Inicio = input('Condiciones iniciales = ');
% PROCESO
Cp = Cv;
Mach
231
switch R
case 1
disp('
|*******************************************************************
**************|')
disp(' CAMBIO PASO DE UN SISTEMA INTERACTUANTE')
disp('
|*******************************************************************
**************|')
disp(' ')
% ENTRADAS
NT = [1 2];
NT = input('Número del tanque a cambiar = ');
switch NT
case 1
P = input('Cambio paso en el Primer Tanque = ');
P2 =0;
case 2
P =0;
P2 = input('Cambio paso en el Segundo Tanque = ');
end
r=0;Am=0;wf=0;r2=0;Am2=0;wf2=0;
switch D
case 1
disp(' ')
disp('
|*******************************************************************
**************|')
disp(' RESPUESTA PASO DE UN SISTEMA INTERACTUANTE EN EL
DOMINIO DEL TIEMPO')
disp('
|*******************************************************************
**************|')
disp(' ')
Mach
232
% RESULTADOS
disp(' ')
disp(' |***********|')
disp(' RESULTADOS')
disp(' |***********|')
disp('LAS CONSTANTES DE TIEMPO SON :')
disp(' ')
disp('tau1 = tau2 = tau3 = '), disp(tau1)
disp(' ')
disp('LAS GANANCIAS SON :')
disp(' ')
disp('K1 = K2 = K3 ='), disp(K1)
disp(' ')
sim('interordenmayor')
interordenmayor
case 2
disp(' ')
disp('
|*******************************************************************
**************|')
disp(' RESPUESTA PASO DE UN SISTEMA INTERACTUANTE EN EL
DOMINIO DE LAPLACE ')
disp('
|*******************************************************************
**************|')
disp(' ')
% RESULTADOS
disp(' ')
disp(' |***********|')
disp(' RESULTADOS')
disp(' |***********|')
disp('LAS CONSTANTES DE TIEMPO SON :')
disp(' ')
disp('tau1 = tau2 = tau3 = '), disp(tau1)
disp(' ')
disp('LAS GANANCIAS SON :')
disp(' ')
disp('K1 = K2 = K3 ='), disp(K1)
disp(' ')
sim('interordenmayor')
interordenmayor
Mach
233
case 3
disp(' ')
disp('
|*******************************************************************
*****************************|')
disp(' RESPUESTA PASO DE UN SISTEMA INTERACTUANTE EN EL
DOMINIO DEL TIEMPO - ESPACIO DE LOS ESTADOS')
disp('
|*******************************************************************
*****************************|')
disp(' ')
% PROCESO
a11 = -1/tau1;
a12 = K1/tau1;
a21 = K2/tau2;
a22 = -1/tau2;
A = [a11 a12; a21 a22]
b11 = K10/tau1;
b12 = 0;
b21 = 0;
b22 = K20/tau2;
B = [b11 b12; b21 b22]
C = [1 0; 0 1]
D = [0 0;0 0]
% RESULTADOS
disp(' ')
disp(' |***********|')
disp(' RESULTADOS')
disp(' |***********|')
disp('LAS CONSTANTES DE TIEMPO SON :')
disp(' ')
disp('tau1 = tau2 = tau3 = '), disp(tau1)
disp(' ')
disp('LAS GANANCIAS SON :')
disp(' ')
disp('K1 = K2 = K3 ='), disp(K1)
disp(' ')
sim('interss')
interss
end
Mach
234
case 2
disp('
|*******************************************************************
**************|')
disp(' CAMBIO RAMPA DE UN SISTEMA INTERACTUANTE')
disp('
|*******************************************************************
**************|')
disp(' ')
NT = [1 2];
NT = input('Número del tanque a cambiar = ');
switch NT
case 1
r = input('Pendiente en el Primer Tanque = ');
r2 =0;
case 2
r =0;
r2 = input('Pendiente en el Segundo Tanque = ');
end
P=0;Am=0;wf=0;P2=0;Am2=0;wf2=0;
switch D
case 1
disp(' ')
disp('
|*******************************************************************
**************|')
disp(' RESPUESTA RAMPA DE UN SISTEMA INTERACTUANTE EN EL
DOMINIO DEL TIEMPO')
disp('
|*******************************************************************
**************|')
disp(' ')
% RESULTADOS
disp(' ')
disp(' |***********|')
disp(' RESULTADOS')
disp(' |***********|')
disp('LAS CONSTANTES DE TIEMPO SON :')
disp(' ')
disp('tau1 = tau2 = tau3 = '), disp(tau1)
disp(' ')
Mach
235
case 2
disp(' ')
disp('
|*******************************************************************
**************|')
disp(' RESPUESTA RAMPA DE UN SISTEMA INTERACTUANTE EN EL
DOMINIO DE LAPLACE ')
disp('
|*******************************************************************
**************|')
disp(' ')
% RESULTADOS
disp(' ')
disp(' |***********|')
disp(' RESULTADOS')
disp(' |***********|')
disp('LAS CONSTANTES DE TIEMPO SON :')
disp(' ')
disp('tau1 = tau2 = tau3 = '), disp(tau1)
disp(' ')
disp('LAS GANANCIAS SON :')
disp(' ')
disp('K1 = K2 = K3 ='), disp(K1)
disp(' ')
case 3
msgbox('En el espacio de los estados solo se puede simular la respuesta paso')
disp(' ')
input(' Pulse ENTER para terminar y realizar una nueva Simulacion')
clc
close all
ordenmayorsimulink
end
sim('interordenmayor')
interordenmayor
case 3
Mach
236
disp('
|*******************************************************************
**************|')
disp(' CAMBIO SENO DE UN SISTEMA INTERACTUANTE')
disp('
|*******************************************************************
**************|')
disp(' ')
NT = [1 2];
NT = input('Número del tanque a cambiar = ');
switch NT
case 1
Am = input('Amplitud, Am = ');
wf = input('Frecuencia, wf (rad/seg) = ');
Am2 = 0;
wf2 = 0;
case 2
Am = 0;
wf = 0;
Am2 = input('Amplitud, Am2 = ');
wf2 = input('Frecuencia, wf2 (rad/seg) = ');
end
P=0;r=0;P2=0;r2=0;
switch D
case 1
disp(' ')
disp('
|*******************************************************************
**************|')
disp(' RESPUESTA SENO DE UN SISTEMA INTERACTUANTE EN EL
DOMINIO DEL TIEMPO')
disp('
|*******************************************************************
**************|')
disp(' ')
% RESULTADOS
disp(' ')
disp(' |***********|')
disp(' RESULTADOS')
disp(' |***********|')
disp('LAS CONSTANTES DE TIEMPO SON :')
disp(' ')
Mach
237
case 2
disp(' ')
disp('
|*******************************************************************
**************|')
disp(' RESPUESTA SENO DE UN SISTEMA INTERACTUANTE EN EL
DOMINIO DE LAPLACE ')
disp('
|*******************************************************************
**************|')
disp(' ')
% RESULTADOS
disp(' ')
disp(' |***********|')
disp(' RESULTADOS')
disp(' |***********|')
disp('LAS CONSTANTES DE TIEMPO SON :')
disp(' ')
disp('tau1 = tau2 = tau3 = '), disp(tau1)
disp(' ')
disp('LAS GANANCIAS SON :')
disp(' ')
disp('K1 = K2 = K3 ='), disp(K1)
disp(' ')
case 3
msgbox('En el espacio de los estados solo se puede simular la respuesta paso')
disp(' ')
input(' Pulse ENTER para terminar y realizar una nueva Simulacion')
clc
close all
ordenmayorsimulink
end
sim('interordenmayor')
interordenmayor
Mach
238
end
end
disp(' ')
disp('===============================================
========================================= ')
disp(' ')
disp('1. NUEVA SIMULACION')
disp('2. TERMINAR LA SIMULACION')
disp(' ')
Sim=input('Escoger la opcion a realizar = ');
if Sim == 1
clc
close all
ordenmayorsimulink
else
if Sim ==2
clc
close all
end
end
Mach
Departamento de Electrónica
Universidad de Alcalá
1. ¿QUÉ ES MATLAB?.
Teoría de control
Tratamiento de señales
Inteligencia artificial
Diseño de sistemas de potencia
Control de procesos mecánicos, de aviación, automoción, etc.
Financiero
Mapeo y tratamiento de imágenes
Instrumentación y adquisición de datos
Identificación de sistemas
...
ENTORNO DE TRABAJO
Ventana de comandos:
Directamente sobre S.O. MATLAB
Entorno de trabajo (Workspace):
Visualiza las variables definidas en
cada instante
Editor de ficheros *.m: Editor
inteligente (colores e indentado)
con depurador paso a paso y
visualización de variables internas
Editor de ficheros *.mdl: Editor
gráfico para diseñar modelos de
Simulink
Elección del directorio de
trabajo: Explorador de Windows
Figuras: Potente editor de figuras
con posibilidad de incluir textos,
cambiar el formato, etc.
2. EL USO DE MATLAB
GENERACIÓN DE MATRICES
A=[a b c d e] ó A=[a, b, c, d, e]
A= [a, b, c; d, e, f; g, h, i] ó
a b c
A = d e f
g h i
Ejemplo:
B=[1:1:8]
B=[1 2 3 4 5 6 7 8 ]
Ejemplo:
1 2 3
A = 4 5 6
7 8 9
A(fila_inicial:fila_final, col_inicial:col_final)
Ejemplo:
B=A(1:3,1:2)
1 2
B = 4 5
7 8
VARIABLES
A/B ≠ B/A
ya que A/B= A*B-1 y B/A= B*A-1
• Funciones Elementales.
sin Sine.
sinh Hyperbolic sine.
asin Inverse sine.
asinh Inverse hyperbolic sine.
cos Cosine.
cosh Hyperbolic cosine.
acos Inverse cosine.
acosh Inverse hyperbolic cosine.
tan Tangent.
tanh Hyperbolic tangent.
atan Inverse tangent.
atan2 Four quadrant inverse tangent.
atanh Inverse hyperbolic tangent.
sec Secant.
sech Hyperbolic secant.
asec Inverse secant.
asech Inverse hyperbolic secant.
csc Cosecant.
csch Hyperbolic cosecant.
acsc Inverse cosecant.
acsch Inverse hyperbolic cosecant.
cot Cotangent.
coth Hyperbolic cotangent.
acot Inverse cotangent.
acoth Inverse hyperbolic cotangent.
exp Exponential.
log Natural logarithm.
log10 Common (base 10) logarithm.
log2 Base 2 logarithm and dissect floating point number.
pow2 Base 2 power and scale floating point number.
sqrt Square root.
nextpow2 Next higher power of 2.
abs Absolute value.
• Análisis de datos
• Manipulación de matrices
Tipo de línea
* star
Color + plus
y yellow -- dashed
m magenta x x-mark
c cyan -. dashdot
r red o circle
g green : dotted
b blue . point
w white - solid
k black ^ triangle (up)
< triangle (left)
> triangle (right)
v triangle (down)
d diamond
s square
p pentagram
h hexagram
Ejemplo:
grid
title(‘Ejemplo funcion seno y coseno’)
xlabel(‘tiempo’)
ylabel(‘seno/coseno’)
gtext(‘valor nulo’) % y se coloca el texto en el punto deseado
gtext(‘valor máximo’) % y se coloca el texto en el punto deseado
gtext(‘valor mínimo’) % y se coloca el texto en el punto deseado
Ejemplo:
0.5
seno
-0.5
-1
0 2 4 6 8 10 12 14 16 18 20
tiempo
Ejemplo funcion coseno
1
0.5
coseno
-0.5
-1
0 2 4 6 8 10 12 14 16 18 20
tiempo
function prueba()
%esta función no tiene parámetros de entrada ni de salida
Ejemplo:
function y=media(x)
[m,n]=size(x);
if m==1 %es por tanto un vector
y=sum(x)/n;
else
error ('Debes de introducir un vector');
end
Ejemplo:
[sol,n_sol]=sistema(S)
donde:
• sol= vector que contiene las soluciones al sistema
• N_sol= número de soluciones del sistema
• S=matriz que contiene los coeficientes y términos independientes de
las n ecuaciones en el siguiente formato:
3 − 1 1 - 2
3a − b + c − 2 = 0
S = 5 2 3 - 1
5a + 2b + 3c − 1 = 0
- 1 5 - 2 - 5
− a + 5b − 2c − 5 = 0
function [sol,n_sol]=prac2_1(S)
[filas,columnas]=size(S);
if (filas>columnas)
error('Sistema de ecuaciones no correcto')
else
%vector formado por la ultima col
Aux_1=S(:,columnas);
Ejemplo:
N=maximo(A)
• N= número mayor de A;
• A= vector enviado;
function x=maximo(A)
else
error ('Introduce un vector y no una matriz');
end %fin del if principal
3. EL USO DE SIMULINK
Ejemplo
Numerator [1 2]
Denominator [1 2 5]
CONFIGURACIÓN DE LA SIMULACIÓN
Ejemplo:
Ejemplo:
Desde MATLAB:
>>plot(tout, Salida);
>>plot(tiempo, Salida);
Ejemplo:
Función de transferencia
Función Polo-Cero
Descomposición en fracciones simples
Variables de Estado
FUNCIÓN DE TRANSFERENCIA
num(s) a1 * sm -1 + a 2 * s m - 2 + ... + a ns m -n
H(s) = =
den(s) b1 * s j−1 + b 2 * s j- 2 + ... + b t * s j- t
Ejemplo:
FORMATO POLO–CERO
Ejemplo:
(s + 1)(s + 2)
H(s) = 4
(s + 3)(s + 4)(s + 5)
Mediante un fichero script:
Ejemplo:
En MATLAB:
num1=10;
num2=[1 10]; %(s+10)
num3=[1 0 0 1]; % (s^3+1)
NUM=conv(num1,(conv(num2,num3)));
Ejemplo:
( s + 1)3
H ( s) =
( s + 4)( s + 3) 2 ( s 4 + s 3 + s 2 + 2)
En MATLAB:
s^3 + 3 s^2 + 3 s + 1
----------------------------------------------------
s^5 + 7 s^4 - 3 s^3 - 107 s^2 - 210 s - 72
Ejemplo:
+ (s-1)(s-2)(s-3)
- +
Step Input - (s+1)(s+3)(s-4)
Sum Sum1
Zero-Pole Auto-Scale
Graph
25
s+10
Transfer Fcn
RESPUESTA TEMPORAL
Ejemplo:
>>impulse([1],[1 1]);
Impulse Response
1
0.9
0.8
0.7
0.6
Amplitude
0.5
0.4
0.3
0.2
0.1
0
0 1 2 3 4 5 6
Time (sec)
>>step([1],[1 1]);
Step Response
1
0.9
0.8
0.7
0.6
Amplitude
0.5
0.4
0.3
0.2
0.1
0
0 1 2 3 4 5 6
Time (sec)
Ejemplo:
1
s2 +1.5s+8
Transfer Fcn1
5
-10
10
0.7
15
-20
20
25
-30 0.4
30
35
-40 0.28 0.19 0.135 0.095 0.06 0.03
40
-12 -10 -8 -6 -4 -2 0
Real Axis
Ejemplo:
Dicho valor será aquél que haga que las raíces del lugar representado
anteriormente tengan parte real positiva. Para poder obtener dicho
valor se utiliza la función rlocfind, de esta forma:
>> rlocfind(N,D)
>>[K,raices]= rlocfind(N,D)
Ejemplo:
>> sgrid(0.1,2)
20
15
10
-5
0 2 4 6 8 10 12 14 16 18 20
Manual de referencia de
Febrero 2000
Tabla de Contenidos
1. INTRODUCCIÓN................................................................................................................... 3
4. M-FILES ................................................................................................................................ 7
8. AYUDA................................................................................................................................ 22
9. SIMULINK ........................................................................................................................... 23
2
UPCo MATLAB & SIMULINK
ICAI - DEA Manual de referencia
1. Introducción
MATLAB es una aplicación destinada a cálculos matemáticos, si bien dispone de
ciertas funciones destinadas a temas más específicos, como por ejemplo la ToolBox
de control, que facilita el estudio de sistemas dinámicos y su regulación.
Además, existe un complemento de MATLAB llamado SIMULINK, que nos permite un
enfoque más gráfico de los sistemas de control.
Al ejecutar MATLAB, aparecerá una ventana en blanco, llamada ventana de
comandos. La forma de trabajar con MATLAB es como con cualquier calculadora:
» 4*2 [ pulsamos enter]
ans =
8
» precio = 17;
» iva =0.16;
» precio_total =17 * (1+iva)
precio_total =
19.7200
Acabamos de crear tres variables, cuyo valor se guardará en memoria. En las dos
primeras sentencias se incluye un punto y coma al final, con lo que el resultado no
aparecerá por pantalla. El nombre que elijamos para nuestras variables tiene algunas
restricciones: no pueden tener un espacio intermedio, se distinguen mayúsculas de
minúsculas, y deben empezar por una letra.
Si queremos ver las variables que tenemos definidas, teclearemos el comando who:
» who
Your variables are:
iva precio precio_total
Para borrar todas las variables, existe el comando clear: tecleando clear iva borraría
esta variable , pero si escribimos sólo clear, borrará todo lo que hay en memoria; por
desgracia, una vez eliminadas, las variables no se pueden recuperar.
Podemos recuperar cualquier instrucción escrita previamente pulsando la tecla del
cursor . Para detener la ejecución de cualquier instrucción, hay que pulsar la
combinación de teclas Ctrl+C.
3
UPCo MATLAB & SIMULINK
ICAI - DEA Manual de referencia
» x = 3 - sqrt (5/6) * 2
x=
1.1743
FUNCIONES HABITUALES
1
MATLAB trabaja únicamente en radianes.
4
UPCo MATLAB & SIMULINK
ICAI - DEA Manual de referencia
Es recomendable trabajar con atan2 en vez de atan, pues si la parte real del número
complejo es negativa, el ángulo quedará en el segundo o tercer cuadrante. Por
ejemplo:
» 180/pi*atan(-2/3)
ans =
-33.6901
» 180/pi*atan(2/-3)
ans =
-33.6901
» 180/pi*atan2(-2,3)
ans =
-33.6901
» 180/pi*atan2(2,-3)
ans =
146.3099
Para la función atan los números complejos -2+3j y 2-3j tienen la misma fase; atan2,
sin embargo, nos da el ángulo correcto. Se ha multiplicado por 180/pi para obtener el
resultado en grados2.
Para definir un número complejo, se puede usar i o j como unidad imaginaria
indistintamente:
» c1=-1+2j
c1 =
-1.0000 + 2.0000i
» c1=-1+2i
c1 =
-1.0000 + 2.0000i
2
La constante pi viene definida por defecto en MATLAB
5
UPCo MATLAB & SIMULINK
ICAI - DEA Manual de referencia
6
UPCo MATLAB & SIMULINK
ICAI - DEA Manual de referencia
4. M-files
Cuando realizamos cálculos simples, es habitual escribir las instrucciones en la
ventana de comandos. Sin embargo, cuando se van a realizar una serie de
operaciones más complicadas y de forma repetitiva, se utilizan los llamados M-Files;
son ficheros de texto donde tecleamos las instrucciones de MATLAB. Para crear un
nuevo archivo M, hacemos clic en File\New\M-File; nos aparecerá una ventana en
blanco para editar el archivo. Por ejemplo:
Una vez guardado el archivo (con el nombre trabajo.m, por ejemplo), nos bastará
teclear su nombre en MATLAB, y se ejecutará directamente:
» trabajo
modulo =
14.4222
fase =
140.0267
Supongamos que queremos que este programa sirva no sólo para los complejos
comp1 y comp2. Para ello, bastará con borrar las dos primeras líneas del programa
anterior. Ahora tendremos que definir antes el valor de comp1 y comp2 (si no,
MATLAB nos dará un error diciendo que las variables comp1 y comp2 no están
definidas):
» comp1=-3+2i;
» comp2=-10+j;
» trabajo
modulo =
13.3417
fase =
160.7222
3
El símbolo % indica que esa línea es comentario.
7
UPCo MATLAB & SIMULINK
ICAI - DEA Manual de referencia
También podíamos hacer que el programa pidiese los números complejos al usuario
(pues éste no tiene por qué saber qué es comp1 y comp2):
8
UPCo MATLAB & SIMULINK
ICAI - DEA Manual de referencia
» x=[0 0.1*pi 0.2*pi 0.3*pi 0.4*pi 0.5*pi 0.6*pi 0.7*pi 0.8*pi 0.9*pi pi]
x=
Columns 1 through 7
0 0.3142 0.6283 0.9425 1.2566 1.5708 1.8850
Columns 8 through 11
2.1991 2.5133 2.8274 3.1416
Tal como hemos visto, para crear un vector fila es necesario escribir entre corchetes
los elementos, separados por un espacio o una coma
Si ahora escribimos sin (x), hallaremos el seno de todos los valores de x:
» y=sin(x)
y=
Columns 1 through 7
0 0.3090 0.5878 0.8090 0.9511 1.0000 0.9511
Columns 8 through 11
0.8090 0.5878 0.3090 0.0000
Para manejar un único elemento del vector, por ejemplo seno(0.5*pi), nos referiremos
a él como el elemento 6 del vector y:
» y(6)
ans =
1
Si queremos utilizar los 5 primeros elementos, escribiremos y(1:5), y para tomar del
elemento 7 al último teclearemos y(7:end)
En caso de querer representar la función seno(x), necesitaríamos bastantes más de 11
elementos para obtener una gráfica aceptable. Escribir 1000 elementos resultaría
bastante tedioso. Como era de suponer, existe una forma “automática” de crear un
vector. La instrucción es: x= (valor_inicial:incremento:valor_final). Por ejemplo:
X=(0:0.01:pi); %Esta instrucción nos crea un vector x con valor inicial x, valor
%final pi, y la diferencia entre elementos consecutivos es 0.01*pi
9
UPCo MATLAB & SIMULINK
ICAI - DEA Manual de referencia
De igual manera, se pueden crear matrices, escribiendo un "; " para indicar que es una
fila distinta:
» x= [ 2 3 ; 2 5 ]
x=
2 3
2 5
10
UPCo MATLAB & SIMULINK
ICAI - DEA Manual de referencia
6. Representaciones gráficas
» x = (0:0.01:2*pi);
» y = sin(x);
» plot (x,y)
Esta gráfica se puede ampliar, reducir , cambiar su color y copiar para utilizarla en otro
documento.
Si ya teníamos abierta una ventana Figure, al usar plot, desaparecerá la gráfica
anterior sin previo aviso. Para evitarlo, añadiremos una nueva ventana tecleando
figure en MATLAB. Es posible dibujar más de una gráfica en una ventana, escribiendo
plot(eje x1, eje y1, eje x2, eje y2,...); por ejemplo:
11
UPCo MATLAB & SIMULINK
ICAI - DEA Manual de referencia
» z = cos(x);
» plot(x,y,x,z)
También podemos dividir la ventana en varias partes con el comando subplot (m,n,i).
La ventana Figure se dividirá en una matriz de m por n pequeñas ventanas, y se
seleccionará la ventana i-ésima. Por ejemplo:
0.5
-0.5
-1
0 1 2 3 4 5 6 7
0.5
-0.5
-1
0 1 2 3 4 5 6 7
12
UPCo MATLAB & SIMULINK
ICAI - DEA Manual de referencia
Por ejemplo:
13
UPCo MATLAB & SIMULINK
ICAI - DEA Manual de referencia
14
UPCo MATLAB & SIMULINK
ICAI - DEA Manual de referencia
s 0.5 sen(x)
et cos(x)
n
ei
d
n
e
p 0
e
d
s
el
b -0.5
ai
r
a
v
-1 variable Z
variable Y
-1.5
0 1 2 3 4 5 6
variable independiente
15
UPCo MATLAB & SIMULINK
ICAI - DEA Manual de referencia
7. Toolbox de control 4
» planta = tf ( [ 1 1] , [3 2 5] );
1+ S
nos definiría F ( s) = 2
3× S + 2× S + 5
De esta representación, podemos quedarnos únicamente con el numerador y/o
denominador:
» [num,den] = tfdata (planta , ' v ' )5
num = 0 1 1
den =
3 2 5
4
Teclear ctrldemo para ver una demostración de las posibilidades que ofrece esta Toolbox
5
El argumento 'v' se incluye para obtener numerador y denominador en forma de vectores
16
UPCo MATLAB & SIMULINK
ICAI - DEA Manual de referencia
p=
-0.3333 + 1.2472i
-0.3333 - 1.2472i
k=
[]
» w = logspace (-2, 3, 1001); % Creamos vector w, con valor inicial en 10-2, valor
% final = 103, con 1001 puntos
» bode (planta,w)
Podemos hallar también los márgenes de ganancia y/o fase y pulsaciones asociadas:
17
UPCo MATLAB & SIMULINK
ICAI - DEA Manual de referencia
Mf =
Inf
wu =
1.8258
wo =
NaN
En este caso, no tenemos margen de fase, y por tanto no existe la pulsación de cruce
(el término NaN significa Not-A-Number).
Existen también funciones para dibujar el lugar de las raíces:
» rlocus(planta)
1.5
0.5
si
x 0
A
g
a
mI
-0.5
-1
-1.5
-4 -3 -2 -1 0 1
Real Axis
Con este gráfico, es posible diseñar para obtener unos polos determinados. Para
obtener mayor precisión, es conveniente dibujar una rejilla radial:
» zeta=0:0.1:1; % Definimos x y wn
» wn=1:10;
» sgrid(zeta,wn) % Nos muestra rectas de pendiente zeta y
% circunferencias de radio wn
» zoom
18
UPCo MATLAB & SIMULINK
ICAI - DEA Manual de referencia
19
UPCo MATLAB & SIMULINK
ICAI - DEA Manual de referencia
7.3 LTIVIEW
Todo lo que hemos visto hasta ahora se puede hacer con un único comando de
forma más intuitiva. Para ello, tecleamos ltiview. Nos aparecerá la siguiente pantalla:
20
UPCo MATLAB & SIMULINK
ICAI - DEA Manual de referencia
Al seleccionar una de estas opciones, nos aparecerá un punto en la gráfica; para ver
cuál es el valor en concreto, es necesario mantener pulsado el ratón en ese punto.
21
UPCo MATLAB & SIMULINK
ICAI - DEA Manual de referencia
8. Ayuda
Existen demasiados comandos en MATLAB para poder recordarlos. Para
facilitarnos la labor, se ha creado un archivo de ayuda al cual podemos recurrir en todo
momento.
» help sqrt
SQRT Square root.
SQRT(X) is the square root of the elements of X. Complex
results are produced if X is not positive.
See also SQRTM
El comando help nos muestra una pequeña descripción de la función, y también una
serie de comandos relacionados (en este caso sqrtm, que nos permite hacer raíces
cuadradas de matrices).
Aunque en la ayuda aparezca la función en mayúsculas, al usarla hemos de escribirla
en minúscula (pues SQRT daría error).
Si no conocemos en concreto el nombre de la función, podemos usar el comando
lookfor:
»lookfor complex
nos mostrará todas las funciones relacionadas con números complejos.
También es útil el comando demo , que nos mostrará una pantalla con demostraciones
de todas las posibilidades que ofrece MATLAB.
22
UPCo MATLAB & SIMULINK
ICAI - DEA Manual de referencia
9. Simulink
9.1 Introducción
Simulink es una extensión de MATLAB para la simulación de sistemas dinámicos.
Al ser un entorno gráfico, resulta bastante sencillo de emplear. Para ejecutar Simulink,
podemos teclear simulink desde MATLAB, o bien hacer clic en el icono , en la barra
de herramientas de MATLAB.
Nos aparecerán dos ventanas: una con las librerías de Simulink, y otra en blanco
donde construiremos nuestro nuevo modelo.
En cada uno de los grupos que aparecen en la fig. 3, estarán los bloques necesarios
para simular nuestro sistema de control. Por ejemplo, haciendo doble clic en Linear
aparecerá la siguiente ventana:
23
UPCo MATLAB & SIMULINK
ICAI - DEA Manual de referencia
ref Salida
10 S +1
_ S + 3·S + 5
24
UPCo MATLAB & SIMULINK
ICAI - DEA Manual de referencia
Se hará de igual manera para la constante (Gain) y el punto de suma (Sum), en el que
pondremos +-
Cada bloque tiene en sus extremos una o varias flechas. Al situarnos con el ratón en
esas flechas, el puntero pasa a ser una cruz. Para conectar los bloques, arrastramos
hasta la flecha del siguiente bloque.
Ahora necesitamos poner la referencia. Para ello, hacemos doble clic en el grupo
Sources, y elegimos Step. Lo arrastramos hasta la ventana donde tenemos el modelo.
Para cambiar los valores del escalón, y el tiempo en que éste se produce, hacemos
doble clic en el bloque. Por defecto, el escalón es unitario y se da en t=1.
Por último, para ver la salida (o cualquier otra señal) hay varias posibilidades. Las dos
más utilizadas son los bloques Scope y To Workspace (en el grupo Sinks).
El bloque Scope nos permite ver el comportamiento de una señal mientras se simula.
Por el contrario, To Workspace guarda la señal en memoria, para poder dibujarla
después de la simulación (con el comando plot) o guardarla en un fichero de datos
.mat.
25
UPCo MATLAB & SIMULINK
ICAI - DEA Manual de referencia
La orientación por defecto de los bloques es "a derechas" (la entrada está en la
izquierda, la salida en la derecha). Esto se puede cambiar seleccionando el bloque y
pulsando Ctrl+R o en el menú Format/Rotate Block.
26
UPCo MATLAB & SIMULINK
ICAI - DEA Manual de referencia
9.3. Simulación
Para simular el sistema ya construido, elegimos Start del menú Simulation. En
este menú también hay otras opciones; la única que usaremos es Parameters:
Si queremos ver la salida, hacemos doble clic en el bloque Scope. Nos aparecerá la
siguiente pantalla:
27
UPCo MATLAB & SIMULINK
ICAI - DEA Manual de referencia
En la barra de herramientas existen varios iconos: los tres primeros fijan el tipo de
zoom (ampliar eje x y eje y, sólo eje x o solo eje y ). El cuarto icono (con el símbolo de
los prismáticos) hará que aparezca en pantalla la gráfica completa. El quinto nos
guarda la configuración de los ejes para posteriores simulaciones, y el último nos
permite fijar los ejes, y la cantidad de datos que queremos guardar.
28
UPCo MATLAB & SIMULINK
ICAI - DEA Manual de referencia
Datos:
Potencia inyectada en bloque 3
Temperatura controlada en bloque 3
C1= 2 min kW / ºC C2= 2.5 min kW / ºC C3= 3.5 min kW / ºC
R13 = 7.5 ºC / kW R23 = 10 ºC / kW R30 = 15 ºC / kW
6
Las ecuaciones que nos describen este sistema son:
1 1 1
Pg ( s ) = C3 ·T3 ( s )·s + ·(T3 ( s ) - T2 ( s )) + ·(T3 ( s ) - T1 ( s )) + ·(T3 ( s ) - T0 ( s ))
R32 R31 R30
1
·(T3 ( s ) - T1 ( s )) = C1·T1 ( s )·s
R31
1
·(T3 ( s ) - T2 ( s )) = C2 ·T2 ( s )·s
R32
6
No se ha considerado el efecto de una posible perturbación, pues hemos de definir una única entrada y salida
29
UPCo MATLAB & SIMULINK
ICAI - DEA Manual de referencia
[T3]
1
1/15 1/60 [T1]
s
[T1]
[T3]
1
1/25 1/60 [T2]
s
[T2]
[T3]
1/7.5
[T1]
[T3]
1/10 1
Out
[T2]
1
1/3. 1/60 [T3]
[T3] 1/15 s
1
In
Para construir el modelo de una forma más clara, se han utilizado Tags o etiquetas
(que se encuentran en Connections)
El término 1/60 corresponde al cambio de unidades de minutos a segundos
30
UPCo MATLAB & SIMULINK
ICAI - DEA Manual de referencia
Una vez modelado el sistema, resulta conveniente crear un bloque que agrupe
nuestro sistema real. Para ello, seleccionamos todos los bloques, pulsando en una
esquina y arrastrando hasta englobar a todos los elementos (no con la opción
Edit/Select all). Después hacemos clic en Edit/Create subsystem, que debería
aparecer habilitada. Debería quedarnos una ventana así:
31
Introducción a Matlab y Simulink
Regulación Automática
Ingeniero en Electrónica. Curso 2006/2007.
Javier Aracil y Fabio Gómez–Estern
1. Introducción
Matemáticas y cálculo.
Desarrollo de algoritmos.
Adquisición de datos.
Desarrollo de aplicaciones.
El tipo básico de variable con el que trabaja Matlab es una matriz que no requiere
ser dimensionada previamente en la declaración. Una de las caracterı́sticas más intere-
santes consiste en que el álgebra vectorial y matricial se expresa con la misma sintaxis
que las operaciones aritméticas escalares. Por ejemplo, en lenguaje C, para realizar la
suma de dos variables enteras o reales b y c, escribiremos:
a=b+c;
1
2. Componentes de Matlab
De estos cuatro puntos, en este capı́tulo trataremos, de forma somera, los dos
primeros.
Los ejemplos que se presentan en este texto, se han desarrollado para la versión de
Matlab 7.0. ellos no impide que puedan funcionar con otras versiones del programa.
Concretamente, para la versión 6.5 y posteriores está prácticamente garantizado el
funcionamiento.
Sin embargo, hay que señalar que algunos complementos de Matlab no aparecen
incluidos en la instalación básica del mismo, por tanto un programa que funciona en
un ordenador con la versión 7.0 instalada, puede fallar en otro ordenador con la misma
versión.
2
tener instalado, aparte del sistema básico de Matlab, el denominado Control System
Toolbox.
3. Simulink
En el presente curso trabajaremos con la versión 6.0, que viene incluida en el paquete
de Matlab 7.0. Su instalación es opcional, por tanto debemos seleccionar la opción
correspondiente al instalar el programa
3
4.2. Organización de ventanas
Como se ha dicho previamente, en Matlab todos los objetos son matrices. Un escalar
no es más que una matriz 1 × 1. En la lı́nea de comandos, podemos asignar un nombre
simbólico para identificar una matriz.
4
Matlab.
Los objetos pueden crearse en cualquier momento. Para ello basta con asignarles
un valor mediante una asignación, como en el ejemplo previo. Los identificadores em-
pleados para designar matrices son de libre elección, con la salvedad de que no pueden
comenzar por un número, ni contener espacios en blanco.
Una vez creado un objeto de Matlab, éste pasa a formar parte del espacio de
trabajo ocupando una porción la memoria. Por tanto, a veces, tras horas de trabajo
con Matlab, necesitaremos eliminar los objetos que ya no se utilicen. Para ello se emplea
el comando clear.
En las sentencias previas, aparece el signo ‘;’ al final de cada comando. Este sı́mbo-
lo sirve para separar unos comandos de otros. Por ejemplo, cuando escribimos var-
ios comandos en una sola lı́nea, estos deben aparecer separados por punto y coma.
Además, si escribimos un comando aislado (sin ‘;’) y pulsamos ENTER, Matlab pro-
porcionará siempre una salida en respuesta al comando:
>> a=[10;20;-15]
a =
10
20
-15
Las matrices (y vectores como caso particular de las mismas) se expresan en Matlab
empleando corchetes ([ ]); separando las filas por espacios o comas (,) y las columnas
por ‘;’. De este modo, se puede crear un objeto matriz del siguiente modo:
>> mat=[1 2 3; 4 5 6; 7 8 9]
5
mat =
1 2 3
4 5 6
7 8 9
>> rad=3.1415;
Los elementos de las matrices pueden ser√reales o complejos. En este último caso se
emplea la letra i para representar el valor −1. Como ejemplo crearemos el vector fila
v = [2 + 3i, −5i, 3].
>> mat(2,3)
ans =
6
Además, dentro de estos paréntesis podemos indicar variables u operaciones más com-
plejas, lo que da una gran potencia al desarrollo de algoritmos.
Una vez definidos los objetos con sus identificadores, podemos realizar operaciones
aritméticas entre ello con total simplicidad. Para las operaciones vectoriales y matri-
ciales, Matlab verificará la coherencia de las dimensiones de los operandos y si no hay
producirá error producirá un resultado con las dimensiones adecuadas.
6
4.5. Operaciones básicas con Matlab
La siguiente tabla ilustra las básicas aritméticas y lógicas que podemos realizar con
Matlab.
Expresión en Matlab Operación
+ Suma aritmética
- Resta aritmética o cambio de signo
* Multiplicación aritmética
/ División
^ Elevar un número a una potencia
< Relación "menor que"
> Relación "mayor que"
<= Relación "menor o igual que"
>= Relación "mayor o igual que"
== Relación "igual que"
~= Relación "distinto que"
& producto lógico (operación ‘‘y’’)
| suma lógica (operación .o")
~ negación (operación "no")
Cuadro 1: Operaciones aritméticas y lógicas de en Matlab.
>> 12*24.8
ans =
297.6000
Ası́ mismo se pueden emplear las operaciones dentro de otras expresiones más amplias,
logrando ası́ escribir expresiones matemáticas de cualquier complejidad.
>> x1=-b+sqrt(b^2-4*a*c)/(2*a);
Buena parte de las operaciones que se realizan con Matlab, son llamadas a funciones.
Las funciones procesan información, por lo que poseen datos de entrada y de salida,
7
que pueden ser matriciales. Los datos de entrada se especifican entre paréntesis, y si son
varios separados por comas. Por ejemplo, la siguiente función calcula la raı́z cuadrada
de su único valor de entrada, que es el vector fila [4, 2].
Las funciones son programas escritos por el usuario o incorporados en el paquete básico
de Matlab. Entre estas últimas destacan las siguientes funciones:
Nombre Función
sin Seno
sinh Seno hiperbólico
cos Coseno
cosh Coseno hiperbólico
tan Tangente
tanh Tangente hiperbólica
cot Cotangente
coth Cotangente hiperbólica
sec Secante
sech Secante hiperbólica
csc Cosecante
csch Cosecante hiperbólica
asin Arcoseno (inversa del seno)
asinh Inversa del seno hiperbólico
acos Arcocoseno (inversa del coseno)
acosh Inversa del coseno hiperbólico
atan Arcotangente (inversa de la tangente)
atan2 Arcotangente de cuatro cuadrantes
Cuadro 2: Funciones elementales de Matlab: Trigonometrı́a.
Nombre Función
exp Exponencial
log Logaritmo natural (base e)
log2 Logaritmo en base 2
log10 Logaritmo en base 10
sqrt Raı́z cuadrada
Cuadro 3: Funciones elementales de Matlab: Exponenciales.
8
Nombre Función
fix Redondear hacia cero
floor Redondear hacia menos infinito
ceil Redondear hacia más infinito
round Redondear hacia el entero más cercano
mod Módulo de la división entera
rem Resto de la división entera
Cuadro 4: Funciones elementales de Matlab: Ajuste y redondeo.
Nombre Función
inv Matriz inversa
det Determinante
eig Autovalores
’ Matriz traspuesta
eye Crear una matriz identidad dado el número de filas/columnas
zeros Crear una matriz de ceros dado el número de filas/columnas
ones Crear una matriz de unos dado el número de filas/columnas
length Longitud de un vector
size Dimensiones de una matriz
Cuadro 5: Funciones elementales de Matlab: Operaciones matriciales.
>> x=5
>> (x>=0)&(x<=10) % Intervalo [0,10]
ans =
1
>> (x>7)&(x<10) % Intervalo (7,10)
ans =
0
Las operaciones lógicas se emplearán sobre todo para implementar bifuraciones y bucles
en los programas Matlab.
9
Nombre Función
clear Elimina todas las variables del espacio de trabajo
clear x Elimina la variable x del espacio de trabajo
who Lista las variables del espacio de trabajo
Cuadro 6: Funciones elementales de Matlab: Espacio de trabajo.
>> a=1:10
a =
1 2 3 4 5 6 7 8 9 10
Por ejemplo, para generar todos los números entre 1 y 2 en incrementos de 0.2 es-
cribiremos
>> a=1:0.2:2
a =
1.0000 1.2000 1.4000 1.6000 1.8000 2.0000
Para acceder a la submatriz comprendida entre los elementos (2, 1) y (3, 2) bastará con
escribir
10
>> mat(2:3,1:2)
ans =
4 5
7 8
>> a(4:)
>> a(4:end)
Por otro lado, si lo que deseamos es obtener los 3 últimos elementos del vector a,
escribiremos
>> a((length(a)-2):end)
Matlab permite almacenar en el disco las variables del espacio de trabajo. De este
modo es posible parar una sesión de trabajo y continuar en otro momento sin volver a
repetir cálculos. La orden más común para almacenar datos es save, que puede usarse
de varias maneras. En la tabla siguiente se presenta un resumen.
11
Orden Operación realizada.
load Lee toda las variables del archivo de nombre
matlab.mat de la carpeta actual. Si alguna
de las variables del disco tiene nombre co-
incidente con otra que previamente existe en
Matlab se producirá la destrucción de la vari-
able existente para dejar su sitio a la variable
del disco.
load nombrearchivo Igual que en el caso anterior, pero leyendo
del archivo nombrearchivo.mat de la carpeta
actual.
load nombrearchivo x y z Igual que el anterior pero leyendo únicamente
las variables x, y y z.
Las posibilidades de Matlab a la hora de crear gráficos de todo tipo son vastı́simas.
Para tener una visión general de ellas se recomienda al lector un recorrido por la ayuda
en lı́nea partir del comando
En este punto veremos los pasos básicos para crear una gráfica a partir de una tabla
de valores (x, y). Concretamente, trazaremos la parábola de ecuación
y = 2x2 + 3x − 1
Toda gráfica de Matlab ha de ser creada a partir de una nube de puntos, que en el
caso bidimensional consiste en una serie de valores de las coordenadas x y otra serie
del mismo tamaño de valores de y. Cada pareja (x,y) formada a partir de ambas series
será un punto de la gráfica. Para ello crearemos dos vectores de igual tamaño n. El
primer vector será x, para las coordenadas de los puntos, a partir de una división
suficientemente fina del eje de abcisas:
>> x=-3:0.1:3;
12
se ha de crear un vector y de n componentes, según la fórmula
>> y=2x.^2+3x-1;
Obsérvese el ‘.’ antes de la exponenciación. Esto evita que el término x^2, al ser x un
vector, se calcule como el producto escalar de x por sı́ mismo. Finalmente, creados los
vectores, creamos la gráfica y la etiquetamos con los siguientes comandos:
30
25
20
15
Eje y
10
−5
−3 −2 −1 0 1 2 3
Eje x
13
5. Control System Toolbox
1
G1 (s) =
s + 0,5
3
G2 (s) = 2
s + 2s + 1
40
G3 (s) = 2
s + 5s + 40
Supongamos que deseamos calcular la función de transferencia en bucle cerrado de
dicho sistema, y a continuación trazar su diagrama de Bode. Lo primero que debemos
conocer es cómo definir una función de transferencia en el entorno Matlab.
14
>> Gbc=G1*G2/(1+G1*G2*G3)
Transfer function:
3s^5+22.5s^4+163.5s^3+331.5s^2+247.5s+60
----------------------------------------------------------------
s^8+10s^7+75.25s^6+262.3s^5+471.5s^4+594.5s^3+570.3s^2+321.3s+70
lo que nos muestra la estructura de la función de transferencia en bucle cerrado Gbc (s),
que podrá ser utilizada a partir de ahora en llamadas a funciones, como las que trazan
los diagramas de Bode (función bode) y Nyquist (función nyquist).
r(t) +
e u y(t)
-@
@ - G1 (s) - G2 (s) -
@
@
− 6m
G3 (s)
en este caso el resultado del cálculo serı́a igual al producto de las funciones G1 (s) y
G2 (s), que como sabemos, también se obtendrı́a, a partir de las definiciones anteriores,
15
escribiendo
>> G12=G1*G2
Por otra parte, para obtener las raı́ces de un polinomio definido en Matlab como un
vector, se emplea la función roots:
>> roots([1 2 -1 ])
ans =
-2.4142
0.4142
16
>> G1=tf([1],[1 0.1 0.5])
>> bode(G1);
>> margin(G1);
Bode Diagram
Gm = Inf dB (at Inf rad/sec) , Pm = 7.02 deg (at 1.22 rad/sec)
40
30
20
Magnitude (dB)
10
−10
−20
−30
−40
0
−45
Phase (deg)
−90
−135
−180
−1 0 1
10 10 10
Frequency (rad/sec)
>> pol=Gbc.den{1}
pol =
1.0000 10.0000 75.2500 262.2500 471.5000 594.5000 570.2500 321.2500 70.0000
>> roots(pol)
ans =
-2.5301 + 5.8437i
-2.5301 - 5.8437i
-2.3763
17
-0.0317 + 1.2049i
-0.0317 - 1.2049i
-1.0000 + 0.0000i
-1.0000 - 0.0000i
-0.5000
Al estar todas las raı́ces en el semiplano izquierdo, deducimos que el sistema en bucle
cerrado es estable. Otro modo de verificar esto es trazando el diagrama polo–cero de
Gbc , mediante la instrucción pzmap(Gbc). El resultado se muestra en la figura 5.
Pole−Zero Map 6
6
0.4 0.28 0.2 0.14 0.09 0.04
5
0.56 4
4
0.8 2
2
1
Imaginary Axis
−2
0.8 2
−4
0.56 4
5
0.4 0.28 0.2 0.14 0.09 0.04
−6
−3 −2.5 −2 −1.5 −1 −0.5 60
Real Axis
Además de las capacidades de simulación de las que está dotado Simulink, con-
viene destacar que contiene cómodas utilidades de visualización y almacenamiento de
resultados de simulación.
18
6.1. Uso de Simulink
En ella distinguimos dos partes: la izquierda contiene una visión en forma de árbol
de todos los Toolboxes instalados que contienen bloques Simulink. La amplitud de
este árbol dependerá de las opciones que hayamos activado al seleccionar Matlab.
De todos los nodos del árbol nos interesan, de momento, los denominados Simulink y
Control System Toolbox. Cabe mencionar además, por su interés, los bloques Real Time
Workshop destinados a generar automáticamente código de control para determinadas
plataformas Hardware comerciales.
Por último, cabe indicar que en la parte superior de la ventana de inicio de Simulink
hay varias herramientas como la búsqueda de un bloque determinado a partir de su
nombre, que nos pueden resultar bastante útiles.
19
6.2. El espacio de trabajo de Simulink
Una vez localizado el bloque Transfer Fcn arrastraremos dicho bloque hacia el
espacio de trabajo de Simulink. El arrastre de bloques se realiza seleccionando el icono
del bloque con el botón izquierdo del ratón, y manteniendo éste pulsado se desplazará el
cursor hasta la ventana del modelo.
Una vez insertados los bloques de las funciones de transferencia, les asignamos
nombres especı́ficos (G1,G2 y G3) editando el texto al pie de cada icono, y les damos
valores a dichas funciones, para que coincidan con los parámetros de las funciones
G1 (s), G2 (s) y G3 (s) definidas anteriormente.
Con este fin, haremos doble click sobre cada bloque de función de transferencia, y
20
Figura 8: Ubicación del bloque Transfer Fcn.
Una vez configuradas las tres funciones de transferencia las conectaremos entre
sı́ con arreglo a la estructura de interconexión de bloques de la figura 3. Para ello
empleamos las siguientes operaciones:
21
Figura 9: Bloques de función de transferencia en Simulink.
Operación Procedimiento.
Conectar bloques (I) Para conectar las salidas de un bloque a la entrada de
otro, hacer click con el botón izqdo. del ratón en el
bloque origen. Pulsar y mantener la tecla CTRL y hacer
de nuevo click sobre el bloque destino.
Conectar bloques (II) También se puede extraer un cable de señal haciendo
click en el saliente derecho del bloque origen y prolon-
gar la señal (pulsando y manteniendo el botón izquierdo
del ratón) hasta llegar a la parte izquierda del bloque
destino.
Bifurcar cables Un cable de señal (que lleva la salida de un bloque
hacia otro bloque), puede bifurcarse para distribuir la
señal a varios bloques pulsando con el botón derecho en
cualquier punto del cable.
Sumar o restar señales Las señales procedentes de salidas de los bloques se
pueden sumar o restar entre sı́ mediante el bloque
sumador, que se ubica fácilmente tecleando Sum en la
ventana de navegación de Simuink.
22
Tras una serie de operaciones de los tipos indicados en la tabla anterior, logramos
construir la estructura de realimentación de la figura 11. En esta figura hemos añadido
dos bloques nuevos: Step y Scope. Ambos pertenecen, respectivamente, a los nodos
Simulink/Sources y Simulink/Sinks que serán comentados en el siguiente apartado.
En nuestro ejemplo necesitamos una señal externa para generar una referencia a
seguir por el sistema controlado. Esta referencia debe ser, lógicamente, cambiante con
el tiempo. En nuestro caso emplearemos una señal de tipo escalón, que se implementa,
con sus parámetros especı́ficos, mediante el bloque Step. Bloques como éste, que sólo
tienen salidas y ninguna entrada, se localizan en el árbol de navegación de Simulink en
el nodo Simulink/Sources.
Por otro lado, existen bloques con entradas y sin ninguna salida: nodos sumidero.
Uno de ellos es el empleado en nuestro modelo para visualizar la salida del sistema:
Scope. Los bloques de este tipo se ubican en el árbol de navegación de Simulink en el
nodo Simulink/Sinks.
A modo de referencia, la tabla 7 muestra algunas fuentes de señal de uso común (no-
do Simulink/Sources), mientras que la tabla 8 muestra algunos de los bloques sumidero
(Simulink/Sinks) más comunes.
23
Elemento Función
Clock Marcas de tiempo de la simulación. Útil para trazar gráficas
con los resultados.
Sin Señal senoidal parametrizable.
Step Señal en escalón
Constant Señal de valor constante.
Signal generator Permite elegir entre un conjunto de señales predefinidas.
Random Number Generación de ruido blanco configurable.
From Workspace Señal generada a partir de una variable del espacio de trabajo
de Matlab.
Cuadro 7: Fuentes de señal en Simulink.
Elemento Función
Scope Gráfica 2D para visualizar las señales frente al tiempo durante
la simulación.
XY Graph Gráfica 2D para visualizar un gráfico X-Y creado a partir de
dos señales de entrada.
To Workspace Almacena las muestras de la señal de entrada en una variable
(vector) del espacio de trabajo de Matlab.
Cuadro 8: Sumideros de señal en Simulink.
24
Manual de Introducción
a
SIMULINK
© 2004
Capı́tulo 1
Ejemplo
1
2 CAPÍTULO 1. EJEMPLO
Saldrá por pantalla una ventana gráfica, como la de la Fig. 1.1, que con-
tiene todas las librerı́as que el entorno de “Simulink”bajo Matlab soporta.
En esta nueva ventana que aún no hemos dado nombre (‘untitled’) desar-
rollaremos el ejemplo. Lo primero que hacemos es darle un nombre adecuado.
Para ello, en el menu File de la nueva ventana elegimos File → Save. Nos
situamos en el directorio adecuado a través del menu desplegable, ponemos
un nombre al archivo, por ejemplo “masa guardamos el modelo. Ya tenemos
2
Observando la ecuación (1.2), puede verse que se necesita hacer las op-
eraciones de sumar y dividir. Para ello seleccionamos ‘Math Operations’ en
la ventana de la librerı́a y escogemos del mismo modo que antes los bloques
de ‘Sum’ y ‘Gain’. Para describir la ecuación diferencial se necesitará además
el bloque integrador ‘Integrator’ en la librerı́a ‘Continuous’. Ya se está en
disposición de describir la ecuación (1.2) utilizando bloques. Debemos unir
los bloques de forma adecuada para describir dicha ecuación (1.2). Haremos
el esquema como describe la Fig. 1.6. Para unir los bloques debemos pinchar
con el botón izquierdo del ratón en el bloque de origen y soltar en el bloque
de destino.
Como puede verse en la Fig. 1.6, se han editado los nombres de los blo-
ques poniéndoles nombres distintos a los originales. También se ha editado el
valor de algunos de los bloques. Daremos valores concretos a las constantes.
Supongamos que la masa es de un kg m = 1, que la constante de fricción
vale c = 0,8 y que la fuerza aplicada es 0.1 N (F = 0,1). Ası́ por ejemplo el
bloque ‘Gain’ denominado ‘c/m’ posee en su interior el valor correspondiente
a mc = 0,8, y el denominado ‘1/m’ tendrá valor 1. Estos valores se introducen
haciendo doble ‘click’ en los bloques y editando el campo correspondiente.
Por otro lado se ha escrito texto para hacer más fácil la lectura del modelo.
Estas cajas de texto se crean simplemente haciendo doble ‘click’ en el lugar
que se desee y editando el recuadro que aparece.
1.1. MODELADO DE UN SISTEMA DINÁMICO 7
.. .
F/m x x x
1 1
1 1
s s
F
1/m
Integrador Integrador
.
c*x /m
0.8
c/m
Para poder ver los resultados ponemos un bloque que nos muestre la
posición de la masa frente al tiempo. Seleccionamos dentro de la librerı́a
‘Sinks’ el bloque ‘Scope’. Lo añadimos al modelo de la forma habitual. Ya
tenemos el modelo completo. Los bloques deben estar como se muestra en la
Fig. 1.7.
.. .
F/m x x x
1 1 1 1
s s
F
1/m
Integrador Integrador Scope
.
c*x /m
0.8
c/m
En la Fig. 1.7 debe notarse que las variables de estado están perfecta-
mente definidas y accesibles en el diagrama de bloques. Ahora se está en
disposición de hacer una simulación del proceso. Para ello debemos definir
algunos parámetros esenciales. Los más importantes son las condiciones ini-
ciales de las variables de estado y el tiempo de simulación. Las condiciones
iniciales deben ponerse en los bloques integradores. Se hace doble ‘click’ en el-
los y se definen las mismas en la zona de edición correspondiente. Por ejemplo
ponemos el valor inicial de la velocidad a -1. En la Fig. 1.8 puede verse dónde
se define el parámetro después de haber hecho doble ‘click’ en el integrador
que nos da la velocidad.
8 CAPÍTULO 1. EJEMPLO
Supongamos que no sólo queremos ver el resultado sino que también quer-
emos guardar las variables en memoria para poder acceder a ellas. Buscamos
dentro de la librerı́a ‘Sinks’ el bloque ‘To Workspace’. Lo añadimos al dia-
grama anterior y le damos un nombre a la matriz donde queremos guardar
el valor de las variables, por ejemplo X. El resultado es el de la Fig. 1.13
.. .
F/m x x x
1 1
0.1 1
s s
F
1/m
Integrador Integrador
.
c*x /m Posición
0.8 y
velocidad
c/m X
To Workspace
0.2
−0.2
−0.4
−0.6
−0.8
−1
0 1 2 3 4 5 6 7 8 9 10
.
F x x
1.25 1
0.1
1.25s+1 s
F
Transfer Fcn Integrador
Posición
y
velocidad
X
To Workspace
Debe notarse que en este último esquema Fig. 1.15, la condición inicial
de la velocidad no está accesible. Si se desea tener en cuenta hay que hacerlo
a la hora de pasar las ecuaciones al dominio de Laplace.
Ya sabemos hacer un modelo de un sistema dinámico, tanto en el do-
minio del tiempo como en el de la frecuencia (Laplace). Ahora se describe
como hacer subsistemas. La idea de estos subsistemas es agrupar bloques con
algún criterio predefinido. Como ejemplo agruparemos los bloques del primer
ejemplo como un sólo bloque que sea el modelo del sistema. Tendrá como
entrada la fuerza aplicada y como salidas la posición y la velocidad del sis-
tema. Para conseguir esto debemos seleccionar todo aquello que queremos
que pertenezca al subsistema. La selección se hace con el botón izquierdo del
ratón, como en Windows, haciendo un recuadro con todo aquello que quer-
emos seleccionar. Todo esto con el botón pulsado. Después se suelta y nos
vamos al menu ‘Edit’ → ‘Create subsystem’, como en la Fig. 1.16
Una vez hecho esto tendremos la situación de la Fig. 1.17, donde todo lo
seleccionado anteriormente se ha metido dentro de un bloque.
Haciendo doble ‘click’ en el bloque se puede ver su contenido en otra
ventana como se muestra en la Fig. 1.17.
14 CAPÍTULO 1. EJEMPLO
i
II
¶Indice general
1. Lo b¶asico 1
1.1. Matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1.1. Deflnici¶on y asignaci¶on de variables . . . . . . . . . . . 1
1.1.2. Operando con matrices . . . . . . . . . . . . . . . . . . 2
1.1.3. Matrices especiales . . . . . . . . . . . . . . . . . . . . 3
1.1.4. Manipulaci¶on de matrices . . . . . . . . . . . . . . . . 5
1.1.5. Arreglos . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.2. Variables y Funciones . . . . . . . . . . . . . . . . . . . . . . . 8
1.2.1. Variables . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.2.2. Funciones . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.2.3. Algunas Variables y Funciones de utilidad . . . . . . . 9
1.3. Gr¶aflcos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.3.1. Figuras . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.3.2. Gr¶aflcos en 2D . . . . . . . . . . . . . . . . . . . . . . 12
2. Simulink 17
2.1. Diagramas de Bloques . . . . . . . . . . . . . . . . . . . . . . 17
2.2. Usando Simulink . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.2.1. Librer¶‡a “Continuos” . . . . . . . . . . . . . . . . . . . 19
2.2.2. Librer¶‡a “Discrete” . . . . . . . . . . . . . . . . . . . . 19
2.2.3. Librer¶‡as “Sources” y “Sinks” . . . . . . . . . . . . . . 20
2.2.4. Otras Librer¶‡as . . . . . . . . . . . . . . . . . . . . . . 21
A. Funciones Comunes 25
iii
IV ¶INDICE GENERAL
Cap¶ıtulo 1
Lo b¶
asico
1.1. Matrices
1.1.1. Definición y asignación de variables
Para introducir una matriz en Matlab s¶olo se debe introducir los n¶ ume-
ros de la matriz entre par¶entesis cuadrados ([ ]), las columnas se separan por
espacios y las fllas por punto y coma (;)1 . Por ejemplo:
>> A=[3 4 5 ; 3 2 7]
A =
3 4 5
3 2 7
1
2 Matrices
ans =
3 3
4 2
5 7
En la variable ans mostrada en el ejemplo anterior, Matlab guarda el re-
sultado de la u¶ltima operaci¶on ejecutada.
Las operaciones aritm¶eticas son igual que ne la mayor¶‡a de los lenguajes,
as¶‡ para sumar (o restar) s¶olo hay utilizar el signo + (o -), para multiplicar
se utiliza el asterisco (*) y para dividir por la derecha (izquierda) se utiliza
(/ (\)). 3 Por ejemplo:
>> B=[1 2 3; 4 5 6];
>> C=A+B
C =
4 6 8
7 7 13
>> D=C*A’
D =
76 80
114 126
Para potenciar una matriz se utiliza el s¶‡mbolo (ˆ), seguido del exponente
que se desea. Si se desea invertir una matriz se puede hacer de dos maneras:
elevando la matriz a -1 o utilizando la funci¶on inv:
2
En el caso de que se utilicen números complejos se obtiene la conjugada transpuesta
3
Obviamente para poder realizar estas operaciones es necesario que las dimensiones de
las matrices sean consistentes.
1.1.3 Matrices especiales 3
>> A=[2 2 ; 0 1]
A =
2 2
0 1
>> inv(A)
ans =
0.5000 -1.0000
0 1.0000
Operaci¶on S¶ımbolo
Multiplicaci¶on *
Divisi¶on por la derecha /
Divisi¶on por la izquierda \
Potenciaci¶on ˆ
Transposici¶on conjugada ’
>> A=ones(3,2)
A =
1 1
1 1
1 1
>> B=zeros(3,5)
B =
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
>> C=eye(3)
C =
1 0 0
0 1 0
0 0 1
>> C=eye(3,4)
C =
1 0 0 0
0 1 0 0
0 0 1 0
N¶otese que si se desea la matriz identidad de orden n s¶olo hay que introducir
n, pero si se desea una rectangular se utiliza igual que las funciones anteriores.
Otro tipo de matrices com¶ unmente utilizadas son los vectores, los cuales se
pueden deflnir como cualquier matriz. La importancia radica en que muchas
veces se utilizan para indexar alguna serie de elementos, para deflnirlos de
esta manera se utiliza (:), de la siguiente manera:
1.1.4 Manipulaci¶
on de matrices 5
n¶
umero inicial:paso:cota superior
Por ejemplo:
>> 1:4:19
ans =
1 5 9 13 17
>> A(1,1)
ans =
>> A(:,1)
ans =
2
0
>> A(2,:)
ans =
0 1
>> A(4)
6 Matrices
ans =
A =
1 6
3 8
5 9
3 9
>> A=0:1:10
A =
0 1 2 3 4 5 6 7 8 9 10
>> indice=1:2:11
indice =
4
Sin embargo, sólo se puede hacer si la estructura resultante sigue siendo una matriz
1.1.5 Arreglos 7
1 3 5 7 9 11
>> B=A(indice)
B =
0 2 4 6 8 10
obtiene los n¶
umeros que est¶an en las posiciones impares del vector A.
Muchas veces es u ¶til concatenar matrices, lo cual se puede utilizar utili-
zando los par¶entesis cuadrados ([ ]). Por ejemplo para concatenar horizontal-
mente:
>> B=[1 2 3; 4 5 6];
>> C=[1 ; 2];
>> [B C]
ans =
1 2 3 1
4 5 6 2
y para concatenar verticalmente:
>> B=1:1:4;
>> C=4:-1:1;
>> [B ; C]
ans =
1 2 3 4
4 3 2 1
Obviamente las dimensiones de las matrices deben ser consistentes con la
concatenaci¶on.
1.1.5. Arreglos
Los arreglos son matrices, pero poseen una aritm¶etica distinta en cuan-
to a la multiplicaci¶on y divisi¶on. Estas operaciones se ejecutan elemento a
8 Variables y Funciones
elemento, y para que sean consistentes los arreglos deben ser de las mismas
dimensiones.
Para diferenciar las operaciones matriciales de las operaciones de arreglos
los operadores van precedidos por un punto (.), como se muestra en el cuadro
1.2.
Operaci¶on S¶ımbolo
Multiplicaci¶on .*
Divisi¶on por la derecha ./
Divisi¶on por la izquierda .\
Potenciaci¶on .ˆ
Transposici¶on no conjugada .’
Por ejemplo:
ans =
>> Z=’hola’
Z =
hola
1.2.2. Funciones
Las funciones son, al igual que en la mayor¶‡a de los lenguajes, subrutinas
que facilitan el trabajo, por ejemplo la funci¶on mean calcula el promedio o
media de un set de datos:
>> A=1:1:4;
>> mean(A)
ans =
2.5000
>> X=0:0.1:1;
>> exp(-X)
ans =
10 Variables y Funciones
Nombre Descripci¶on
pi El n¶ umero m¶as famoso del mundo
i Unidad imaginaria
j Lo mismo que i, pero para los el¶ectricos
Inf Inflnito
NaN No es un n¶ umero
eps Precisi¶on relativa de punto flotante, 2−52
Nombre Descripci¶on
sin(X) Funci¶on seno de X
cos(X) Funci¶on coseno de X
tan(X) Funci¶on tangente de X
exp(X) Funci¶on exponencial de X
log(X) Funci¶on logaritmo natural de X
plot(X,Y) Gr¶aflca Y versus X
clear(A) Borra la variable A
det(A) Calcula el determinante de la matriz A
eig(A) Calcula los valores y vectores propios de la matriz
A
poly(A) Calcula los coeflcientes del polinomio caracter¶‡stico
de la matriz A
roots(coef) Calcula los ra¶‡ces del polinomio cuyos coeflcientes
vienen en coef
sum(X) Suma los elementos del vector X
length(X) Retorna el largo del vector X
size(A) Retorna las dimensiones de la matriz A
help funcion Entrega ayuda sobre la funci¶on funcion
lookfor palabra Retorna las funciones en las que aparece el string
palabra
Columns 1 through 7
Columns 8 through 11
1.3. Gráficos
Para graflcar en Matlab fundamentalmente se utiliza la funci¶on plot
mencionada anteriormente, sin embargo tambi¶en es posible graflcar en forma
escalonada, utilizando s¶olo l¶‡neas verticales, utilzando n¶
umeros complejos o
en 3D, entre muchas maneras de graflcar. A continuaci¶on se detallan las m¶as
utilizadas y los comandos m¶as u ¶tiles relacionados.
1.3.1. Figuras
Una flgura es una ventana en la cual se desplegan los gr¶aflcos obtenidos
mediante Matlab. Esto presenta varias ventajas las cuales se mostrar¶an m¶as
adelante.
Aunque, generalmente, las flguras se generan por defecto al crear un gr¶afl-
co, a veces es necesario pedir otra flgura a Matlab, para esto se utiliza el
comando figure, el cual genera otra flgura en la pantalla. El modo de utili-
zarlo es:
>> figure
Si se desea cerrar alguna flgura se utiliza la funci¶on close, seguida del
n¶
umero de la flgura. Si se quiere cerrar todas las flguras entonces se ejecuta:
>> close all
lo cual cierra todas las flguras existentes5 .
1.3.2. Gráficos en 2D
Como se menciona anteriormente se utiliza la funci¶on plot, tal como se
muestra en el siguiente ejemplo:
>> t=0:0.1:5;
>> plot(t,exp(-t))
lo cual produce como resultado la flg. 1.1.
Para que plot funcione ambos vectores deben tener el mismo largo. Si X
o Y es una matriz entonces el vector es graflcado versus las fllas o columnas
de la matriz, dependiendo de con cual se alinee.
5
De manera análoga clear all borra todas las variables
1.3.2 Gr¶
aflcos en 2D 13
0.9
0.8
0.7
0.6
0.5
0.4
0.3
0.2
0.1
0
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5
Adem¶as plot tiene m¶as opciones las cuales se pueden ver en la ayuda de
la funci¶on.
Una forma de graflcar com¶unmente usada es aquella en la cual se encuen-
tran dos gr¶aflcas en la misma flgura . Lo anterior se puede lograr de varias
maneras, dos de ellas son:
>> plot(t,exp(-t),t,sin(t))
>> plot(t,[exp(-t); sin(t)])
las cuales producen el mismo resultado (flg. 1.2). Sin embargo, hay otra
opci¶on la cual consiste en utilizar la funci¶on hold que retiene el gr¶aflco actual
y agrega el gr¶aflco deseado a la flgura actual. Para el ejemplo anterior:
>> plot(t,exp(-t))
>> hold on
>> plot(t,sin(t))
>> hold off
cuyo resultado se muestra en la flg. 1.3. La utilizaci¶on de hold off es para
soltar la flgura.
14 Gr¶
aflcos
0.8
0.6
0.4
0.2
−0.2
−0.4
−0.6
−0.8
−1
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5
0.8
0.6
0.4
0.2
−0.2
−0.4
−0.6
−0.8
−1
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5
>> plot(X,sin(X));
>> subplot(3,2,2)
>> plot(X,cos(X));
>> subplot(3,1,2)
>> plot(X,cos(X)+sin(X));
>> subplot(3,1,3)
>> plot(X,[cos(X);sin(X)]);
1
exponencial
seno
0.8
0.6
0.4
0.2
−0.2
−0.4
−0.6
−0.8
−1
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5
1 1
0.5 0.5
0 0
−0.5 −0.5
−1 −1
−4 −2 0 2 4 −4 −2 0 2 4
−1
−2
−4 −3 −2 −1 0 1 2 3 4
0.5
−0.5
−1
−4 −3 −2 −1 0 1 2 3 4
Simulink
17
18 Usando Simulink
trav¶es de ¶esta se obtiene la respuesta del sistema descrito por (2.1), la cual
se aprecia en la flg. 2.3.
0.35
0.3
0.25
0.2
0.15
0.1
0.05
0
0 1 2 3 4 5 6 7 8 9 10
Para conectar los bloques hay que situar el puntero del mouse sobre el
puerto de salida del primer bloque, con lo que el puntero deber¶‡a cambiar a
una cruz, y arrastrar el mouse hacia el puerto de entrada del siguiente bloque.
A continuaci¶on se detallan los bloques m¶as utilizados.
Fcn: Librer¶ıa “Functions & Tables”. Bloque para una expresi¶on general.
Usa “u” como el nombre de la variable de entrada. Ejemplo: sin(u[1]
* exp(2.3 * -u[2]))
MATLAB Fcn: Librer¶ıa “Functions & Tables”. Pasa los valores de entra-
da a una funci¶on de Matlab para evaluarla. La funci¶on debe retornar
un s¶olo argumento vectorial del largo de ‘Output width’. Ejemplos:
sin, sin(u), foo(u(1), u(2))
Funciones Comunes
25
26 ¶
APENDICE A. FUNCIONES COMUNES
NaN: Variable. No es un n¶
umero, usualmente aparece cuando hay una di-
visi¶on del tipo 0/0.
pi: Variable. El n¶
umero m¶as famoso del mundo.
27
poly: Funci¶on. Sintaxis poly(A). Calcula los coeflcientes del polinomio ca-
racter¶‡stico de la matriz A.
roots: Funci¶on. Sintaxis roots(coef). Calcula los ra¶‡ces del polinomio cu-
yos coeflcientes vienen en coef.
29
30 BIBLIOGRAF¶IA
¶Indice alfab¶
etico
\, 2 double, 8
’, 2
”, 8 eig, 10, 25
(), 5 eliminar elementos, 6
*, 2 eps, 10, 25
+, 2 exp, 10, 25
-, 2 expm, 25
., 8 eye, 3
/, 2
:, 4, 5 figure, 12
;, 1 funciones, 1
=, 1
help, 9, 10, 26
[], 1, 7
hold, 13
ˆ, 2
acos, 25 i, 10, 26
ans, 2 Inf, 10, 26
arreglos, 8 inv, 2, 26
asin, 25
j, 10, 26
atan, 25
atan2, 25 legend, 14
char, 8 length, 10, 26
clear, 10, 12, 25 librer¶‡a, 18
close, 12 continuos, 19
concatenar, 7 Derivative, 19
cos, 10, 25 Integrator, 19
ctrb, 25 Memory, 19
obsv, 26 State-Space, 19
Transfer-Fcn, 19
det, 10, 25 Transport Delay, 19
31
32 ¶INDICE ALFABETICO
¶
tan, 10, 27
tf, 27
tf2ss, 27
tf2zp, 28
var, 28
variables, 1
variables, 1
vectores, 4
zeros, 3
zp2ss, 28
zp2tf, 28
zpk, 28
Complementos de Procesado de Señal y Comunicaciones
Máster en Sistemas Multimedia
Introducción a
Matlab y Simulink
Javier Ramírez Pérez de Inestrosa
Dpto. Teoría de la Señal, Telemática y Comunicaciones
Universidad de Granada
Email: javierrp@ugr.es
Cálculo matemático
Desarrollo de algoritmos
Adquisición de datos
Modelado, simulación y prototipado
Análisis de datos y visualización
Gráficos
Desarrollo de aplicaciones e interfaces
gráficas de usuario (GUI)
Introducción a Matlab y Simulink
Javier Ramírez 3
Más sobre MatLab
2+3 ans = 5
7-5 ans = 2
Los resultados son los esperados.
34*212 ans = 7208
1234/5786 ans = 0.2173 Nótese que al resultado se le da el nombre ans.
2^5 ans = 32
a = sqrt(2) a = 1.4142 Se puede escoger el nombre de la variable.
ans = 30 36 42
g^2
66 81 96
Multiplica la matriz por ella misma.
102 126 150
ans = 1 4 9
g .^ 2 Eleva al cuadrado cada elemento de la
16 25 36
matriz.
49 64 81
El comando format
format compact
Controla el espaciado de líneas.
format long
Muestra los 15 dígitos que se utilizan en el cálculo.
format short
Muestra únicamente cinco dígitos.
“;” al final del comando.
No visualizar salida:
help format
Más información.
Concatenación
Generar nuevas matrices a partir de otras
creadas previamente
Por ejemplo:
Sea la matriz a:
>> a = [1 2; 3 4]
a =
1 2
3 4
Entrada Salida
[a, a, a] ans = 1 2 1 2 1 2
3 4 3 4 3 4
[a; a; a] ans = 1 2
3 4
1 2
3 4
1 2
3 4
[a, zeros(2); zeros(2), a'] ans = 1 2 0 0
3 4 0 0
0 0 1 3
0 0 2 4
Programación
Se pueden construir matrices mediante programación
for i=1:10,
for j=1:10,
t(i,j) = i/j;
end
end
+, -, *, y /
Definen operaciones con matrices.
Debemos distinguir:
“.*”:
Multiplicación componente a componente.
“*”
Multiplicación matricial.
Un escalar es un número.
>> whos
Name Size Bytes Class
clear
Borra variables del entorno.
a x =b
save sesion
Salva todas las variables en el archivo binario “sesion.mat”.
save fichero X
Salva sólo la variable X
load sesion
Recupera los datos previamente salvados
xlabel('Mes');
ylabel('Temperatura (°C)');
title('Temperaturas minimas en Granada y
Madrid');
legend('Granada','Madrid');
grid;
subplot(2,1,1);
plot(Mes, T_Gr, 'bo-');
xlabel('Mes');
ylabel('Temperatura (°C)');
title('Temperaturas minimas en Granada');
grid;
subplot(2,1,2);
plot(Mes, T_Ma, 'rv-');
xlabel('Mes');
ylabel('Temperatura (°C)');
title('Temperaturas minimas en Madrid');
grid;
view(-15,25) 0.4
0.2
0.1
-0.1
-0.2
-0.3
-0.4
-0.5
2
-1
1.5 2
0.5 1
-0.5 0
-2 -1.5 -1
-2
Ficheros de función
Permiten definir funciones propias.
Variables locales.
La información se pasa como parámetros.
Se pueden definir subfunciones.
Introducción a Matlab y Simulink
Javier Ramírez 33
Un ejemplo de función
function y = media (x)
% Valor medio de x.
% Para vectores, media(x) devuelve el valor medio.
% Para matrices, media(x) es un vector fila
% que contiene el valor medio de cada columna.
[m,n] = size(x);
if m == 1
m = n;
end
y = sum(x)/m;
nargin y nargout
Número de argumentos de entrada y salida con
los que se llama a la función.
Ejemplo:
function c = testarg1(a,b)
if (nargin == 1)
c = a.^2;
elseif (nargin == 2)
c = a + b;
end
Introducción a Matlab y Simulink
Javier Ramírez 35
Subfunciones
function [media,mediana] = estadistica(u) % Función principal
% ESTADISTICA Calcula la media y la
% mediana utilizando funciones internas.
n = length(u);
media = mean(u,n);
mediana = median(u,n);
true
Condición 1
Bloque 1
false false false
Condición Condición
true
Condición 2
true true
Sentencias Bloque 1 Bloque 2 Bloque 2
false
Bloque 3
if condición if condición1
sentencias bloque1
end elseif condición2
bloque2
elseif condición3
Ejemplo bloque3
else
if rem(a,2) == 0 bloque4
disp('a is par') end
b = a/2;
end
false
Condición Sentencias
true
Sentencias Condición true
false
Sentencia continue
n = 1;
Hace que se pase
while prod(1:n) < 1e100
inmediatamente a la
n = n + 1;
siguiente iteración
end
del bucle for o while
Communications Toolbox
y= filter(b,a,x);
Filtra la secuencia x con el filtro descrito por b y a.
[H,w] = freqz(b,a,N);
20
Calcula N puntos de la
Magnitude (dB)
respuesta en frecuencia del 10
-10
0 0.2 0.4 0.6 0.8 1
Normalized Frequency ( rad/sample)
Para el filtro: 0
Phase (degrees)
y(n)= 0.8·y(n-1) + x(n) -20
-40
B = FIR1(N,Wn,'high');
Filtro paso alta.
|H|
-40 N=64
H = zeros(NFFT,L);
-60
for i=1:L
B = FIR1(N(i),Wn,'bandpass'); % Diseño.
[H1,W]= freqz(B,1,NFFT); % Respuesta. -80
0 0.2 0.4 0.6 0.8 1
H(:,i)= H1;
w en unidades de
end
10
N=8
Fase de H (rads)
% Visualizacion de la respuesta en frecuencia.
subplot(2,1,1); 0 N=16
plot(W/pi,20*log10(abs(H))); N=32
xlabel('w en unidades de \pi'); -10 N=64
ylabel('|H|');
legend('N=8','N=16','N=32','N=64'); -20
grid;
subplot(2,1,2);
-30
0 0.2 0.4 0.6 0.8 1
plot(W/pi,unwrap(angle(H))); w en unidades de
xlabel('w en unidades de \pi');
ylabel('Fase de H (rads)');
legend('N=8','N=16','N=32','N=64');
grid;
1.5
Y = DECIMATE(X,R) 0.5
-0.5
Ejemplo: Decimación en un factor 4.
-1
t = 0:.00025:1; % Vector de tiempos
-1.5
x = sin(2*pi*30*t) + sin(2*pi*60*t);
-2
0 20 40 60 80 100 120
y = decimate(x,4);
Señal decimada
2
1.5
stem(x(1:120)); %Original
1
axis([0 120 -2 2])
0.5
title('Señal original')
0
figure -0.5
stem(y(1:30)); %Decimada -1
-2
0 5 10 15 20 25 30
1.5
Y = INTERP(X,R) 1
0.5
-0.5
y = interp(x,4); -2
0 5 10 15 20 25 30
figure 1
stem(y(1:120)); 0.5
title('Señal interpolada'); 0
-0.5
-1
-1.5
-2
0 20 40 60 80 100 120
pwelch
Fs = 1000; t = 0:1/Fs:.296;
% Una señal coseno de 200 Hz más ruido
x = cos(2*pi*t*200)+randn(size(t));
pwelch(x,[],[],[],Fs,'twosided');
% Ventana por defecto, solapamiento y NFFT.
-15 -18
-20
Power Spectral Density (dB/Hz)
-20
-24
-30
-26
-35
-28
-40
-30
-45
-32
-50 -34
0 100 200 300 400 500 600 700 800 900 0 100 200 300 400 500 600 700 800 900
Frequency (Hz) Frequency (Hz)
Método de covarianza
pcov(X,ORDER,NFFT,Fs)
randn('state',1);
x = randn(100,1);
y = filter(1,[1 1/2 1/3 1/4 1/5],x);
pcov(y,4,[],1000);
Método de covarianza modificado
pmcov(X,ORDER,NFFT,Fs)
randn('state',1);
x = randn(100,1);
y = filter(1,[1 1/2 1/3 1/4 1/5],x);
pmcov(y,4,[],1000);
-26 -26
Power Spectral Density (dB/Hz)
-30 -30
-32 -32
-34 -34
-36 -36
-38 -38
0 100 200 300 400 500 0 100 200 300 400 500
Frequency (Hz) Frequency (Hz)
-26 -26
Power Spectral Density (dB/Hz)
-30 -30
-32 -32
-34 -34
-36 -36
-38 -38
0 100 200 300 400 500 0 100 200 300 400 500
Frequency (Hz) Frequency (Hz)
N
xˆ (n) A(i 1) x(n i)
i 1
[A,E] = LPC(X,N)
Calcula:
Minimizando J= E{|e(n)|2}
Los coeficientes del predictor, A.
La varianza del error, E.
Funciones principales:
Generación de señales aleatorias
Análisis de errores
Codificación de la fuente (escalar, diferencial)
Codificación para el control de errores
(convolucional, codificación lineal de bloques)
Modulación y demodulación (analógica y digital)
Filtrado mediante filtros especiales
Aritmética en cuerpos de Galois
randint
Genera una matriz de números aleatorios enteros
uniformemente distribuidos.
out = randint; % Un solo valor [0,1]
out = randint(N); % Matriz cuadrada NN
out = randint(M,N); % Matriz MN
out = randint(M,N,rg); % Se especifica el rango.
0.8
0.6
0.4
0.2
Quadrature
-0.2
-0.4
-0.6
-0.8
-1
-1 -0.5 0 0.5 1
In-Phase
biterr
Calcula el número de bits erróneos y la tasa de error.
[number,ratio] = biterr(x,y);
[number,ratio] = biterr(x,y,k);
[number,ratio] = biterr(...,flg);
[number,ratio,individual] = biterr(...)
% Introducción de errores.
% Los errores pueden ser 1, 2, o 3 (no 0).
% Colocación de los errores
errorplace = (rand(100,100) > .9);
errorvalue = randint(100,100,[1,3]); % Valor error
errors = errorplace.*errorvalue;
y = rem(x+errors,4); % Señal y error sumadas mod 4
% Análisis de errores
format short
[num_bit,ratio_bit] = biterr(x,y,2)
[num_sym,ratio_sym] = symerr(x,y)
0.5
-0.5
-1
0 500 1000 1500 2000 2500 3000
0.5
-0.5
-1
0 0.5 1 1.5 2 2.5 3
4
x 10
8-PSK (Gray)
1
1
0.8
0.8
0.6
Magnitude
0.6
Magnitude
0.4
0.4
0.2
0.2
0
0
1
1
0.5 1
0.5 1
0 0.5
0 0.5
0
0 -0.5
-0.5 -0.5
-0.5
-1 -1
Fy -1 -1
Fx Filtro 55 Fy Fx Filtro 2020
0.8
0.6
Magnitude
colormap(jet(64));
mesh(f1,f2,Hd);
0.5
h = fwind1(Hd,hamming(21));
0
freqz2(h); 1
0.5 1
0 0.5
0
-0.5 -0.5
Fy -1 -1
Fx
3000
4000 10000
2000
2000 5000
1000
0 0 0
0 100 200 0 100 200 0 100 200
50 50 50
0 0 0
0 100 200 0 100 200 0 100 200
4000 10000
2000
2000 5000
0 0 0
0 50 100 150 200 250 0 50 100 150 200 0 50 100 150 200 250
0 0 0
0 50 100 150 200 250 0 50 100 150 200 250 0 50 100 150 200 250
15000
2000 2000
10000
1000 1000
5000
0 0 0
0 50 100 150 200 250 0 50 100 150 200 250 0 50 100 150 200 250
http://en.wikipedia.org/wiki/Iris_flower_data_set
503 = 150 muestras de flores Iris de tres especies
Iris setosa, Iris virginica, Iris versicolor
4 características de cada ejemplo:
Longitud y anchura de los pétalos y sépalos
Análisis discriminante:
class = classify(sample,training,group)
class = classify(sample,training,group,type)
class = classify(sample,training,group,type,prior)
knn:
Class = knnclassify(Sample, Training, Group)
Class = knnclassify(Sample, Training, Group, k)
Class = knnclassify(Sample, Training, Group, k, distance)
Class = knnclassify(Sample, Training, Group, k, distance, rule)
SL = meas(51:end,1); 3.2
SW = meas(51:end,2);
3
group = species(51:end);
SW
2.8
2.6
2.4
2.2
2
4.5 5 5.5 6 6.5 7 7.5 8
SL
h1 = gscatter(SL,SW,group,'rb','v^',[],'off');
set(h1,'LineWidth',2)
legend('Fisher versicolor','Fisher virginica','Location','NW')
3.6
3.4
3.2
SW
2.8
2.6
2.4
2.2
2
4.5 5 5.5 6 6.5 7 7.5 8
SL
1.2
3.5
1
0.8
3
0.6
0.4
2.5
0.2
0 2
1 1.5 2 2.5 3 3.5 4 4.5 5 5.5 4 4.5 5 5.5 6 6.5 7
http://www.ugr.es/~javierrp
$ %
!" "# $% "
!
" #
$ #
& '" $
%
% $ &
' $
$
(
)
(( ) * (( * , +
(( ) + )
(( ) , -
)
-
* + #
& )
(( ((
) )
- -
%
./ ./ , %
" /
- $ / ./ . /
0 1 -" $ 0 1 #
.
$
)
(( 2 ) 3! * + (( % ; ) 3! * +9
4-5 (( % ; ) 3!$*$+9
6 7 89 (( % ) 3!$*$+9< -< .
(( 2 ) 3!$*$+:4$-$5:6$7$89 (( % ) 3!:*:+9
*" # = "
(( ) * , +>= ?( *$+ * +
(( ) @ A ?(
(( ) @ A ?(
(( ) > !7B C ?(
3 # # 4
+" D "
(( ) 3! * +9 56 9?9 ?7
(( ) 34 - 59 56 @ 9?A ?8
(( ) %@ $ A
)
4 !+ *7 *6 !7 56 ; @ @?B7 7?9C 9?9: ?BC
(( 30$ 9 ) %@ $ A 56 -. -.
0)
4-5 56 - .
)
BBBBB 56 - .
,
' %
/ - $ / %.
4" ; *E +E"
( ) ( 7D)
(( ) 3B'!'!BB9 56 (( ) 3B'!'!BB9 56
(( 1 ) 56 $ (( 1 ) 56 $
(( ) @B"!> A 56 $ (( ) @B"!> A 56 $
(( @1$ A (( 2 ) @B"*> A 56 $
(( +@1$ $2A
( )
(( ) 3B'!'!BB9
(( 1 )
(( ) 3 @B"!> A : @B"!> A9
(( @1$ A
-" F ; "
/ $
)
(( ) 3! *9 56 ?9
(( ) 3! + -9 56 9?7 ?A
(( @ $ A 56
@ ,*AC@ G*,+ ,-A
(( 2 @ $ A 56
(( 3 $29 ) 2 @ $ A 56 * + * +
(( 2 @ $2A 56
/ )
(( . ) +B 56
(( 1 ) B"+ 56
(( 3 *$ *9 ) *@. $1 A 56
(( @ *$ *A 56
!C@ G*,!7 ,8BBA
" ! G
AE $ $ )
F
H 66 ) ;@I IA 56 $ *+
(( ) @ ,*AC@ G*,+> ,-A
(( ) ;@3! *9$ 3! + -9A 56 * + @ ,*AC@ G*,+ ,-A
@ ,*AC@ G*,+ ,-A (( * ) >
" $ F
& ' > )
(( ) 3! *9 56 ?9 " )
(( ) 3! + -9 56 9?7 ?A (( ) ;@3! *9$ 3! + -9A 56 ;@ ,*AC@ G*,+ ,-A
(( 2 @ $ A (( 2 @ A
H I > J I J I J I > J)
(( ) ;@ $ A K )
(( 3 $29 ) 2 @ A (( ) ;@ $ A
(( ) @ > ;@ @ A$ @2AAA> @2A (( ) @ " J'KA
(( ) @ A (( ) @ " J'KA
(( ); L@ $!$?!A 56
*B+ 25B2
5" "
(( @ A 56
(( @ A 56
L
(( 3 $1$ 9 ) @ A 56 2 2 2 2
22
(( 1 ) 1@ A 56
6" ; "
(( @ A 56 $
(( 3 $; 9 ) @ $+A 56 - .
- . ;7
(( 3 $; $.9 ) @ A 56
$ )
(( 1 ) 1@ A 56
(( ) *B> !B@ 1 A 56
(( 3M $D $. $. 9 ) @ A 56 MMM ( N OOO
M ) P
D )
. )Q Q -Q Q ; Q Q .
. )Q Q
(( / @ A 56 5
(( @I .IA 56 Q
(( / 56
(( ; 56 - 2 2.
(( / 56
(( / ;; 56
(( 0 @ A 56 Q "
6E *D / +
(( % .@ A 56 $
7" N "
(( @ A 56 &
(( ) @ $ $+A 56 2R;72
(( / 56 $ $
(( @ $ $3+ 49A 56 $ & - .
2R;72 2R;@2
(( 56 N (
(( 56 N ' * +
& ' - . #
O
!" L"
% R
N - .
$
/ $
&
" $ $ % R
N
"
" % R 2% R ! 1 2 -!
% R . &
)
66 R
L $
.) $
$
%
' '
&
' #
% (
% R- .)
) $
"
$ /
& % R
% R
% R)
' 0 0 1) / $ N
; " # & - .
E % % ) $ / )
#
)
E 1) /
& &
& / ) #
; F )/ E ) D
$ % $
# $
E ) E )
$ D %
P ?D )F E S ),
'
D %
' 0 " N N
E P )P F F )/ 2 2
" $
' D M ) S
) ;B
;E -
$ " & .
) N )S N
) S #
. /) L #
M ) % N
Q ' = R "
)/ $ S % )S
)S N
; ) S #
!) / / #
N
& !) / /
N
*" "
/
% )
+ '
' -
1
% *
' ,
0
/ ! &#
' #
) '
B. % )/
2 2
9. 0 )%
# "
2 2- .
7. 0 ) /
$
@. 0 )"
2T62
26T2 %
&
A. ; )%
/
&
8. ; 0 )% & #
> '
' #
2F 2 # -2F UF ! R2 2F U(
! R2 . ' #
:. 1 ) %
'
'
/
2 2 2 2 #
, -2F U% 2.
$
L $ & ) 2% RU% U%
0 2 2% RU% R U% 2 2% R ! 1 2
$ " $
N
+ ) % !
1
- 0
2%
+" % 2 "
$
@!A D #) 2% U/ 2
-K
'
> > $ .
# @*A
/ #
2% R 2 % R D # 2% 2
' @+A /
@4A
- .
N $ 2V2
$ 2H2
" 2% 2 '
2% 2 @-A D # #
@5A 2Q 2- ' #
.
# @6A 2 1 2 ( #
2 2
% N )
. #
!. L 2 2 N
OTO D & !
%
N % R )
V- . H- .
C
-. - . 9
@X W -.
D
)
(( ) ;@379$ 3! 4 89A
)7C@ G*,4 ,8A
(( @ A
(( @ A
, % R
& $
L $
*% +
OTO D & *
% $
% R
) -. ,
-.
- .; - .? - . F ( -. (
- .;(X 9- . ,
- .;,X - .> -.
-. -.
- .;- - .5 - ..>(
% R
- * +. $
-
# # . $
$
) Y Y
* +, +,* - . *
/
!) 0
* #) '
+ '!
'!
8 9
0 ! '#
8 8 *
* : 7
23 1
!)! ) 0 +
! " 4 5 6
# $ %$ & '(# (
! (#) '& (
# - 1
'
% R $ *F +- F .
)
Z - .;Z - .?Z - .
Z - .;9X(XP XP- .
Z - .;,X X - .
Z - .;- - .5 - ..>(
) Y
* +, +,* - . *
/
)!) )
+ #) )
* + '!
!
:
;!;
#
*
* : : 9
23 1
!)! ) 0 +
! " 4
# $ %$ & '(# ( 5 6
! (#) '& (
# - 1
3+5
3+4.5 ++5
6.5 6.5
OTO D & +
L N
% R ! N
N
/
, ,
% ? %
Y
) Y Y Y
7 5
* +, +,* - . *
/
)!) )
+ #) )
+ '!
# !
! 7 5
!
/ / / ; = ;!;
/1 #
=) / / ' ) /1 23 1
= > !)! ) 0 +
! " 4
1 9 # $ %$ & '(# ( 5 6
! (#) '& (
# - 1
! <
%
/ $
" $
&
-. BE " $
*% +
) Y Y Y Y
7 5
* +, +,* - . *
/
!) 0
#) '
+ '!
'!
> #
! 7 5
/ / / ;
= 0 ! '#
/1
*
=) / / ' ) /1 23 1 >
= > !)! ) 0 +
! "
# $ %$ & '(# 4 5 6
1 9 (
! (#) '&
(
# - 1
! <
- .
++5
*
OTO & !' # 2
, & !,D"FS[ #
DQP $ )
!"# $
%"&'
$ ( ) * " # (!" # )!"# *
/ $ )
!"#
%"&'
$ ( ) * "# !" # !"#
P )
-P 0 L 2
U =
2 ; A
B Q DQP
9 S- .
7 S- .
@ ( - .
@B D $
@9
@7 \ ('
A ( - % R.
AB D $
A9
A7 \ ('
OTO & *'
!
@
?
=
5
A
B
" )
5L ,, -.
-. ]
5L ,, )( ]
]
5 " $ 5 $ D ^
!- . " $ -.
) " )
- . ; ]X - . L - . ; ]XL - .
- . ; ( X - . ? X - .> ? - . L - . ; ( XP - . ? X XP - . ? L - .
- . ; ] X1- . L - . ; ] X0- .
-.;] X -. / - . ; ] XP - .
- . ; - . ? ^X 1- .> ? !X1- . / - . ; / - . ? ^X X0- . ? !X0- .
K &
DQP )
9: 43;:
$ ( ) * $ ( ) *
, % R -. -.
1- .
P )
-D $ 0 L 2
U = 2 ;
A
B Q DQP
9 D $
7 \ , -] ] .
@ % L -.
@B K '
@9 D
A N
@ '
AB D $
A9 K '
8 % L -. 1;B >
A -( A.
8B D $ '
89 K '
87 K '
OTO & +' O ;
, & !,D"FS[ #
DQP $ )
!"# $
%"&'
$ ( ) * " # (!" # )!"# *
/ $ )
!"#
%"&'
$ ( ) * "# !" # !"#
P )
-P 2
U = 2 ; A
B Q DQP
9 P S- .
7 K S- .
@ D $ ! - . - .
;A > S- .
A K - .
S- . -4 "Q,PKQ3 /
! P .
8 M, * +O
: K -. S- .
];B
-.
V- . ? H- .
] S- .
Y
C K -. ]; A
W K
S- . -" .
OTO & 4' E R
% N $ 9
B EEE $
;E B
% ) -K $ 9.
/- .
Y
L-. ]X] X ?( 0- .
?
SB- .; S9- .;
X ?( ^X X 9?-!X ?^X( .X ?-( X!?] X] .
" )
) _E@ % ) _ A`
'
" -. '
% )
/- .
Y
\- . ? L- . ]X] X ?( 0- .
?
(- . SB- .; S9- .;
X ?( ^X X 9?-!X ?^X( .X ?-( X!?] X] .
Y
]
[- .;
X ?B
P )
-D $ 0 L 2
U = 2 ;
A
B Q DQP
9 \ , -] ] .
7 ( N L
N )
_E9 WEa
_B %
@ D $ % R
A % -.
AB K
A9 K
A7 K 1- . '
8 % 9 EEE -.
' $
SIMULINK – MATLAB
CONTENIDO
1. ELEMENTOS BÁSICOS
2. EL MOTOR DC
3. SUBSISTEMAS
4. ECUACIONES DIFERENCIALES
5. SIMULACIÓN DE SISTEMAS
INTRODUCCIÓN
1
Un modelo es un conjunto de bloques que representa un sistema y como archivo
tiene extensión *.mdl
1. ELEMENTOS BÁSICOS
Los elementos básicos son líneas y bloques. Los bloques están agrupados en:
Sources, Links, Discrete, Continuos, Math, etc., tal como aparecen en la ventana
anterior. Cada bloque tiene entradas y salida para realizar su interconexión. Por
ejemplo, haga clic en Discrete y luego clic en Discrete Transfer Fcn y arrastre el
bloque a la ventana en blanco. Si quiere modificar la función de transferencia del
bloque haga doble clic en él y digite los coeficientes del numerador y denominador
en la nueva ventana que aparece. Para la función 1/(z 2 +2z +4) con tiempo de
muestreo de 1 seg, quedaría:
2
Lo primero es arrastrar los bloques a la página en blanco de forma que, Step es
la función paso o escalón que se obtiene de Sources, Scope es el osciloscopio
que se obtiene de Sinks, Transfer Fcn se obtiene de Continuos, Sum y Gain se
obtienen de Math. Modifique los bloques dando doble clic sobre cada uno de ellos
para cambiar sus parámetros o valores e interconéctelos.
Por último se debe simular el sistema. Para ello se configura la señal de entrada,
en este caso la función paso. Dar doble clic y asignar los siguientes parámetros:
Step time=0, Inicial value=0, Final value=1, Sample time=0. Para simular el
3
iniciación del paso. Para observar mejor la respuesta se usa el botón Autoscale
4
(1) Leyes de Newton
5
2.2 MODELADO DEL MOTOR EN VELOCIDAD
6
Kt = 0.01;
R = 1;
L = 0.5;
Se ejecuta este archivo y se simula el modelo para una entrada de paso unitario
de valor V = 0.01, con los siguientes parámetros de simulación: Stop time = 3 sg.
Arranque la simulación y observe la salida (velocidad del motor).
Como segundo paso se debe obtener el modelo lineal de Matlab del motor. Para
esto, borre el bloque Scope y cámbielo por Out obtenido de la librería de
Signals&Systems. Haga lo mismo para Step cambiándolo por In de esta misma
librería. Los bloques In y Out definen la entrada y salida del sistema que le
gustaría extraer. Salve este modelo. El sistema quedará así:
7
% OBTENER EL MODELO LINEAL DEL SISTEMA
[num, den] = linmod('MotorDcVel')
Gps = tf(num, den)
La respuesta es :
3. SUBSISTEMAS
8
% CONTROL DE UN MOTOR DC
[num, den]=linmod('ControlMotor')
Glazo_abierto = tf(num, den)
Respuesta:
% CONTROL DE UN MOTOR DC
[num, den]=linmod('ControlMotor')
Glazo_cerrado= tf(num, den)
Respuesta:
9
3.3 SISTEMA DISCRETO
DIAGRAMA EN SIMULINK
PROGRAMA MATLAB
Respuesta:
10
4. SOLUCIÓN DE ECUACIONES DIFERENCIALES
Ejemplo:
d2y dy
2
3 6 y 4t y' '3 y'6 y 4t y' ' 4t 3 y '6 y
dt dt
Diagrama Simulink:
Respuestas:
11
Ejemplo:
12
5. SIMULACIÓN DE SISTEMAS
13
Ejemplo: Resolver la ecuación y’’ + y = e t, y’(0) = 0, y(0) =3
>> t = 0:0.001:0.999;
>> t = t’;
>> x = exp(t)
Al ejecutarse Simulink toma los datos entregados por Matlab. No olvidar colocar
condición inicial y(0) = 3 en el integrador.
Ejemplo:
Resolver la ecuación: f(t) = Mx’’ + Bx’ + Kx, M=1, B=1, K= 10, F(t) = 5
14
Diagrama Simulink:
En Matlab:
>> plot(t,y)
5.3 EJERCICIOS
Ejercicio1:
15
Si la entrada es una señal senoidal, encontrar las salidas referidas a vC y iL.
Ejercicio2:
dh
A q(t ) K h
dt
Diagrama Simulink:
16
EJERCICIO3: LA BOLA MAGNÉTICA
Ecuaciones:
d 2h i 2 di
(1) m mg (2) L V iR
dt 2 h dt
Valores:
Diagrama simulink:
17
Controlador:
zeros=[-11.5+7.9i, -11.5-7.9i]
polos=[0 -1000]
ganancia=-3.3057e+004
Planta:
18
19
EJERCICIO4: TANQUE DE AGUA
dVol dh
A bV a h
dt dt
Diagrama simulink:
20
Controlador:
Planta:
21
Ecuaciones:
Condiciones iniciales:
22
23
EJERCICIO6: PÉNDULO SIMPLE
Ecuación:
Valores:
24
Diagrama simulink:
25
EJEMPLO: SISTEMA MECANICO
Parámetros:
Ecuaciones dinámicas:
dv1
f (t ) m1 k1 (v1 v2)dt (v1 v2)b1
dt
dv2
0 m2 k1 (v2 v1)dt (v2 v1)b1 k 2 v2dt b2v2
dt
Ecuaciones de Laplace:
K1
F ( s) m1sV1 (V 1 V 2) (V 1 V 2)b1
s
k1 k2
0 m2sV 2 (V 2 V 1) (V 2 V 1)b1 V 2 b2V 2
s s
26
Diagrama simulink:
27
Concentración de la entrada: ci(t)
Para t= 0; ci(0)=1.25 lbmol/pie3
Volumen de la masa reaccionante: V= 5 litros
Flujo de entrada: F= 1 lt/min
Ecuación dinámica:
dc(t )
V Fci (t ) Fc (t ) KVc (t )
dt
dc(t )
V Fci (t ) ( F KV )c(t )
dt
V dc(t ) F
c(t ) ci (t )
F KV dt F KV
Constante de tiempo:
V
F KV
F
Ke
F KV
28
Programa en Matlab:
% Programa principal
F=1;
V=5;
K=0.2;
ci0=1.25;
c0=solve('F*ci0-F*c0-K*V*c0=0');
c0=eval(c0)
%Constante de tiempo
tau=V/(F+K*V)
% tau=2.5 minutos
%Ganancia en estado estacionario
Ke=F/(F+K*V)
% Ke=0.5
29
global R K tau X r A w Rango Inicio
Rango=input('Tiempo de simulacion=');
Inicio=input('Condiciones iniciales=');
N=input('ESCRIBA 1=PASO, 2=RAMPA, 3=SENO: ');
disp(' ')
switch N
case 1
X=input('Valor del paso=');
[t,y]=ode45('pplineal',Rango,Inicio);
plot(t,y)
case 2
r=input('valor pendiente de la rampa=');
[t,y]=ode45('rplineal',Rango,Inicio);
plot(t,r*t,t,y/K,'r')
case 3
A=input('Amplitud del seno=');
w=input('Frecuencia del seno=');
[t,y]=ode45('splineal',Rango,Inicio);
disp('Amplitud del perfil de la respuesta')
K*A/sqrt(1+(w*tau)^2)
disp('Fase de la respuesta respecto a la entrada')
atan(-w*tau)
plot(t,A*sin(w*t),t,y,'r')
end
30
Programa en Simulink:
32
pause
n=1;
while n==1
T=input('Entre tiempo: ')
delta=input('Entre valor de delta: ')
i=find(t<=(T+delta)&t>=(T-delta));
tiempo=t(i)
voltaje_salida=eo(i)
n=input('Entre 1 para seguir y 0 para parar: ')
end
33
INTRODUCCION A SIMULINK
Para acceder a la librería de Simulink se debe abrir inicialmente la ventana principal de Matlab
(Matlab Command Window). En esta se puede ejecutar el comando “simulink” o hacer clic en
el símbolo correspondiente en la barra de herramientas en la parte superior de esta ventana.
Al hacer esto aparecerá el listado de las librerías correspondientes a simulink, donde se podrá
tener acceso a todos los bloques que brinda esta herramienta. Para abrir una nueva hoja de
trabajo se deberá acceder a través de: File à New à Model, o hacer clic en el símbolo de “hoja
nueva”.
La librería “Simulink” contiene los bloques necesarios para simular un sistema mediante técnicas
convencionales, las demás librerías son herramientas adicionales que se utilizan para aplicaciones
específicas de control avanzado. En la Figura 2 se muestra el contenido de la librería Simulink.
Figura 2. Librería Simulink.
En la figura 3 se pueden observar los bloques mas utilizados en la simulación de procesos. Estos
se encuentran en hacer clic en el signo (+) de cada librería. Pueden ser utilizados al hacer clic sobre ellos
y arrastrándolos sobre la hoja de trabajo. Igualmente en la tabla 1 se pueden observar una descripción
mas detalladas de algunas de estas funciones.
Integrador Integra una señal en función del Contin. Valor inicial desde el
tiempo cual se va a integrar
Retardo de transporte Introduce un retardo en el tiempo en Contin. Valor del retardo (Debe
el cual aparece la señal. ser un número positivo)
- Los bloques pueden ser movidos al arrastrase con el botón izquierdo del mouse y pueden ser
copiados al hacer clic sobre ellos con el botón izquierdo del mouse y arrastrando la copia creada.
- Los bloques se deben unir mediante flechas. Esto se logra haciendo clic en la flecha de salida
del bloque deseado y conectándola (sin soltar el botón), a la flecha del bloque que se desea unir.
- Para que las modificaciones en el programa hagan efecto este deberá ser grabado después de
realizar los cambios.
- Al hacer clic con el botón derecho sobre una señal, se podrá obtener una “línea” de esta señal
para llevarla o conectarla a un bloque deseado.
- Al barrer el mouse sobre un grupo de bloques se podrán mover estos a la vez y copiarlos en
grupo.
- El “save format” de los “workspace” debe ser colocado en “array” para poder “graficar” las
variables deseadas posteriormente.
a) Simular la siguiente ecuación diferencial y encontrar su respuesta ante una entrada escalón.
d ( x) − 60
+ 5 exp * X (t ) = 1 Donde, X0 = 0 en T=500
dt T
Solución:
d ( x) − 60
= 1 − 5 exp * X (t ) (1)
dt T
Luego, se debe establecer qué valores en la ecuación son constantes y cuáles son función del
tiempo, en este caso, la conversión X depende del tiempo, pero la temperatura T es constante.
El primer término del lado derecho de la ecuación (1) se puede representar como un escalón
unitario o como una entrada constante.
Se debe colocar igualmente un bloque de reloj para que el simulador contabilice el tiempo.
Todas las señales que se deseen guardar o ser posteriormente llamadas para graficar, deben ser
alimentadas a un bloque workspace (Save format : Array)
Haciendo clic en cada bloque se pueden cambiar sus parámetros y sus nombres. En este caso se
colocan los siguientes:
Matlab Function
Entrada Escalón (T) Integrador Matlab Function (1/T)
Exp(E/KT)
Step Time = 0
Valor Inicial = 500 Inicial Value = 0 Fuction = 1/u Fuction = exp
Valor Final = 500
De esta forma tenemos:
Step Time = 4
Valor Inicial = 500
Valor Final = 1000
Para que el simulador acepte el cambio, el archivo debe ser guardado (no debe aparecer un
“asterisco” al lado del nombre del programa en la parte superior de la ventana). Después de simular
y graficar, se obtiene:
Figura 8. Respuesta del sistema de la ecuación diferencial ante entrada escalón.
dT
= A(T − To1) * Fo − B(T − Ta) A = 0.08 B = 0.05
dt
dTa
= C (Ta − To 2) * Fp + D(Ta − T ) C = 0.5 D = 0.01
dt
Solución:
c) Dada la siguiente función de trasferencia obtenga la respuesta del sistema a lazo abierto ante
una entrada escalón.
1
FT =
s + 4s + 2
2
Solución:
- Armar el modelo.
Función de Parámetros
Entrada Escalón
Trasferencia Simulación
Step Time = 0
Numerador = [1]
Valor Inicial = 0 Stop Time = 20
Denominador = [1 4 2]
Valor Final = 1
- Después de Simular y Graficar usando: Plot(T,X) se obtiene,
d) Compare la respuesta a lazo cerrado obtenida para la función de transferencia del ejemplo
anterior con la respuesta obtenida al aumentar 5 veces la ganancia y con la respuesta obtenida al
usar un controlador de función de transferencia:
1
Gc1 = K 1 + Donde, K = 1 y Ti = 0.5
Ti
Solución:
Virginia Mazzone
Control Automático 1
http://iaci.unq.edu.ar/caut1
Automatización y Control Industrial
Universidad Nacional de Quilmes
Marzo 2002
Índice General Introducción a M ATLAB y S IMULINK - 1
Índice General
1 Introducción a M ATLAB 1
1.1 Conversión de una función transferencia . . . . . . . . . . . . . . . . . . . . . 1
1.2 Raı́ces de un polinomio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.3 Desarrollo en fracciones simples . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.4 Función transferencia a lazo cerrado . . . . . . . . . . . . . . . . . . . . . . . . 6
1.5 Respuesta al impulso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.6 Respuesta al escalón . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.7 Gráficos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2 Introducción a S IMULINK 14
2.1 Acceso y descripción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.2 Función transferencia a lazo cerrado . . . . . . . . . . . . . . . . . . . . . . . . 16
2.3 Respuesta al Escalón . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.4 Utilización de parámetros ya definidos . . . . . . . . . . . . . . . . . . . . . . . 19
1 Introducción a M ATLAB
Este apunte es una introducción elemental a M ATLAB, destinado a conocer y practicar al-
gunas de las operaciones básicas con funciones de transferencia. Los comandos que uti-
lizaremos son los que figuran en la Tabla 1. Para mayor información sobre un comando
en particular puede ejecutarse help topic o simplemente help ’comando’, desde la
ventana de comando de M ATLAB.
5s + 20
G (s) = ,
s2 + 4s + 20
si sacamos el 5 factor común del numerador y factorizamos el denominador utilizando sus
raı́ces, nos queda de la forma
5(s + 4)
G (s) = .
(s + 2 − 4 j)(s + 2 + 4 j)
Índice General Introducción a M ATLAB y S IMULINK - 2
Para llevar a cabo lo mismo con M ATLAB, debemos ingresar los polinomios numerador
y denominador, en forma de vectores de la siguiente manera:
num=[5 20];
den=[1 4 20];
Observemos que para definir el vector lo hacemos colocando entre corchetes los coefi-
cientes de cada término, ordenados de mayor orden al menor. Para separar las columnas
del vector lo hacemos con un espacio, o también podrı́amos utilizar coma. El punto y coma
final es para que el resultado de lo ejecutado por M ATLAB no salga por pantalla.
Si ahora ingresamos:
[z,p,k]=tf2zp(num,den)
Obtenemos:
z=-4
p=[-2+4j -2-4j]
k=5
Dado que toda función transferencia dada por un cociente de polinomios se puede escribir
de la forma
∏ m ( s − zi )
G (s) = k ni=1 con m ≤ n,
∏i =1 ( s − pi )
podemos armar fácilmente nuestra función transferencia, haciendo
5(s + 4)
G (s) = .
(s + 2 + 4 j)(s + 2 − 4 j)
[num,den]=zp2tf(z,p,k);
num=[5 20]
den=[1 4 20]
G=tf(num,den);
G=zpk(z,p,k);
Índice General Introducción a M ATLAB y S IMULINK - 4
P = s4 + 4s3 + 4s2 + s + 20
r=roots(p);
En lugar de hacer la operación en dos pasos, podemos hacerlo solo en uno; si tipeamos
r=roots([1 4 4 1 20]) obtenemos el mismo resultado Las cuatro raı́ces del polinomio
anterior que surgen de M ATLAB son: −2.6445 ± 1.2595 j y 0.6545 ± 1.3742 j.
Si el caso es al revés, es decir, tengo las raı́ces y quiero conocer el polinomio, el comando
poly es el que se utilizaremos. Siguiendo con el mismo ejemplo, supongamos que lo que
tenemos son las raı́ces p1,2 = −2.6445 ± 1.2595 j y p3,4 = 0.6545 ± 1.3742 j. Entonces el
polinomio al que le corresponden esas raı́ces es:
P=poly([p1,p2,p3,p4]);
16s + 16 1
G (s) = y que R(s) =
(s + 2)(s + 4) s
Índice General Introducción a M ATLAB y S IMULINK - 5
Como las raı́ces del denominador sor reales y distintas, el método de desarrollo en frac-
ciones simples nos permite escribir a G (s) × R(s) de la siguiente manera:
16s + 16 A B C
= + +
s(s + 2)(s + 4) s s+2 s+4
donde p es el polo para el cual se está calculado el residuo. Veamos como serı́a en este
ejemplo:
16s + 16 16(0) + 16
A = lim(s) = =2
s→0 s(s + 2)(s + 4) (0 + 2)(0 + 4)
16s + 16 16(−2) + 16
B = lim (s + 2) = =4
s→−2 s(s + 2)(s + 4) (−2)(−2 + 4)
16s + 16 16(−4) + 16
C = lim (s + 4) = = −6
s→−4 s(s + 2)(s + 4) (−4)(−4 + 2)
Con estos residuos, queda determinada la salida como: c(t) = 2 + 4e−2t − 6e−4t
En general, estos cálculos pueden tornarse muy complicados de realizar ’a mano’. Veamos
como se simplifican utilizando la función M ATLAB residue. Ingresemos nuevamente los
polinomios numerador y denominador de la misma forma como lo venimos haciendo hasta
ahora. Ingresemos ahora la sentencia:
[res,p]=residue(num,den);
Esta función nos devuelve dos parámetros vectoriales: en la variable res aparecen los
residuos correspondientes a los polos que figuran en la variable p, es decir, el primer resid-
uo corresponde al primer polo y ası́ sucesivamente.
Si la función transferencia resulta ser propia, es decir que el grado del numerador es igual
al del denominador, podemos añadir una parámetro más al argumento del lado izquierdo,
que lo podemos llamar k. Veamos como serı́a esto mediante otro ejemplo:
Ejemplo 4. Supongamos que queremos hallar f (t) siendo:
2s3 + 5s2 + 3s + 6
F (s) = ⇒ f (t) = L−1 { F (s)}
s3 + 6s2 + 11s + 6
Índice General Introducción a M ATLAB y S IMULINK - 6
Si aplicamos el comando:
[res,p,k]=residue(num,den);
[num,den]=residue(res,p,k);
R(-
s) lE(s) - V (s) Y (s)-
G1 (s) - l - G2 (s)
− 6 −6
H2 (s)
H1 (s)
40s + 800
G (s) =
s3 + 22s2 + 180s + 800
En M ATLAB la función transferencia a lazo cerrado se puede calcular de dos formas:
Para calcular la función transferencia a lazo cerrado G (s) sigamos los siguientes pasos:
numg1=0.4; deng1=1;
numg2=100; deng2=[1 2 0];
numh2=[1 0]; denh2=[1 20];
Índice General Introducción a M ATLAB y S IMULINK - 7
[numvc,denvc]=feedback(numg2,deng2,numh2,denh2,-1);
[numec,denec]=series(numg1,deng1,numvc,denvc);
[num, den]=cloop(numec,denec,-1);
Veremos que este comando devuelve el gráfico de la Figura 2 Como podemos ver, solo
nos muestra los primeros 6 segundos de la respuesta. Si quisiéramos que nos mostrara 12
segundos, debemos definir un vector de tiempo. Para ello ingresemos, por ejemplo,
t=0:0.1:12;
El vector t tendrá como primer elemento el 0 y como último al 12. Cada elemento estará a
una distancia de 0.1 de su consecutivo. Si ahora introducimos este parámetro en el coman-
do impulse(num,den,t), el gráfico mostrará los primeros 12 segundos de la respuesta
al impulso.
Notemos que este comando no fue asignado a ninguna variable; podrı́amos asignarle
un vector, es decir y=impulse(num,den,t), y ası́ tendrı́amos los valores de la salida
de la respuesta al impulso en dicho vector. Podrı́amos también graficar este vector con el
comando plot(t,y), comando que veremos en la sección 1.7.
Índice General Introducción a M ATLAB y S IMULINK - 8
Impulse Response
From: U(1)
0.25
0.2
0.15
Amplitude
To: Y(1)
0.1
0.05
0
0 1 2 3 4 5 6
Time (sec.)
Step Response
From: U(1)
1.6
1.4
1.2
1
Amplitude
To: Y(1)
0.8
0.6
0.4
0.2
0
0 5 10 15
Time (sec.)
Si ahora queremos la respuesta a una entrada rampa unitaria, M ATLAB no posee ningún
comando que lo resuelva. Por lo que veremos cómo con el comando step podemos obtener
una rampa. Si seguimos con el ejemplo anterior y excitamos al sistema con r(t) = t, es decir
que R(s) = s12 , tenemos lo siguiente:
4 1 4 1
Y (s) = ⇒ Y ( s ) =
s2 + 0.8s + 4 s2 s3 + 0.8S2 + 4s s
1.7 Gráficos
Como vimos en secciones anteriores los comandos step e impulse grafican las respuestas
al escalón y al impulso respectivamente, pero ahora vamos a introducir algo más general.
Para graficar cualquier función en general utilizaremos el comando plot, que sólo necesita
definir el vector a graficar en la forma básica
plot(vector);
Se obtiene un gráfico donde el eje de abscisas será la posición del elemento del vector y la
ordenada el valor que tiene el vector en dicha posición. En el ejemplo 6, guardamos en el
vector y los valores de la salida de la respuesta al impulso. Si ahora ingresamos plot(y),
en lugar de tener segundos en el eje de abscisas tendremos la cantidad de elementos de ese
vector. Si ingresamos plot(t,y), ahora el eje de abscisas corresponderá al vector tempo-
ral ya definido e irá desde t = 0 a t = 12, que es como lo tenı́amos definido. Grafiquemos
Índice General Introducción a M ATLAB y S IMULINK - 10
Step Response
From: U(1)
25
20
15
Amplitude
To: Y(1)
10
0
0 5 10 15 20 25
Time (sec.)
title(’Respuesta al Impulso’);
xlabel(’Tiempo(seg.)’);
ylabel(’Salida c(t)’);
Notemos que el texto que queremos que aparezca está escrito entre comillas simples.
Los comandos anteriores, pueden ser también utilizados con step y impulse, aunque
cuando son utilizados en estos comandos, el tı́tulo y el nombre de los ejes que trae la fun-
ción por defecto también aparecen. Otros comandos que pueden ser útiles a la hora de
trabajar con gráficos son grid y text, que se utilizan para agregar una grilla y agregar
texto respectivamente. El comando text se utiliza de la misma forma que que title, es
decir, el texto que aparecerá será el que se encuentra escrito entre las comillas simples , pero
antes debemos ingresar las coordenadas ( x, y) donde queremos que aparezca el texto. El
comando grid, se usa sin parámetros. Veamos el siguiente ejemplo:
Ejemplo 8. Supongamos que tenemos la función transferencia de la Figura 1, que ya la cal-
culamos con M ATLAB en el Ejemplo 2.2. Abramos un archivo nuevo e ingresemos lo sigu-
iente:
Índice General Introducción a M ATLAB y S IMULINK - 11
0.25
0.2
0.15
0.1
0.05
0
0 2 4 6 8 10 12
num=[40 800];
den[1 22 180 800];
t=0:0.01:2;
y=step(num,den,t);
plot(t,y);
title(’Respuesta al escalon unitario’);
xlabel(’Tiempo (seg.)’);
ylabel(’Salida del sistema’);
text(0.5,1.1,’maximo valor’);
grid;
Respuesta al escalón
1.4
1.2
maximo valor
1
Salida del sistema
0.8
0.6
0.4
0.2
0
0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2
Tiempo (seg.)
Luego de ejecutar estas lı́neas veremos que en la figura que resulta, aparecen 3 gráficas
en el mismo color, e imposible de identificar cual corresponde a cada una porque ambas se
encuentran graficadas con el mismo tipo de linea y el mismo color. Para ello veamos un
parámetro del tipo string que podemos agregar al comando plot para especificaciones del
estilo del gráfico. Los parámetros que figuran en la Tabla 2 son para elegir el color de la
lı́nea, los que se encuentran en la Tabla 3 son para elegir el estilo de la lı́nea y los que se
encuentran el la Tabla 4 son para elegir el tipo de marca que aparecerá sobre los puntos del
vector graficado.
Espec. Color
r rojo
b azul (por defecto)
w blanco
g verde
c cian
m magneto
y amarillos
k negro
Ahora especifiquemos cada uno de los plot con un estilo diferente, por ejemplo, en
lugar del comando plot(t,y) escribamos:
plot(t,y1,’-.rx’);
plot(t,y2,’--mo’);
plot(t,y3,’:bs’);
Índice General Introducción a M ATLAB y S IMULINK - 13
Si corremos nuevamente el archivo veremos que hay diferencia entre una función y
la otra, pero seguimos sin saber cuál corresponde a qué función. Para ello utilicemos el
comando legend, que pone la leyenda que queramos a cada gráfico. Es decir, escribamos
como última linea:
legend(’sin(t)’, ’sin(t-pi/2)’,’sin(t-pi)’);
Ahora si observamos el gráfico deberı́a ser como el de la Figura 7.
También podrı́amos querer cada gráfico en una figura diferente. Para ello debemos
ejecutar el comando figure(2) antes de graficar por segunda vez y figure(3) antes
del último gráfico. Estas sentencias se usan sin el comando de hold on - hold off y
lo que hacen es abrir una nueva figura para cada gráfico. Otra opción válida para M ATLAB,
por ejemplo, es que las tres funciones aparezcan en una sola figura pero las tres graficadas
en forma independiente. Para ello utilicemos subplot(m,n,p), que dividirá a la figura
en m filas y n columnas, pero crea una figura en la posición p. Ingresemos lo siguiente para
ver como funciona:
1
sin(t)
sin(t−pi/2)
0.8 sin(t−pi)
0.6
0.4
0.2
−0.2
−0.4
−0.6
−0.8
−1
0 1 2 3 4 5 6 7
title(’sin(t-pi)’);
Notemos que con el sı́mbolo %, comentamos texto dentro del archivo. Si ejecutamos
nuevamente el programa, obtenemos lo que se observa en la Figura 8
Con respecto a gráficos, M ATLAB posee muchas otras opciones, como graficar en es-
cala logarı́tmica, con loglog, semilogx y semilogy, gráficos en tres dimensiones,
plot3, gráficos de barras, bar, etc. También permite con el comando print, guardar
el gráfico en un archivo de extensión, por ejemplopostscript o .jpg, o también lo podemos
imprimir con el mismo comando indicando el nombre de la impresora.
No nos olvidemos que M ATLAB cuenta con una ayuda a la cual podemos recurrir en ca-
so de no recordar como se utiliza un comando. Si investigamos un poco el help, podemos
encontrar funciones que resuelven muchas otras cosas interesantes. Invito a que se metan
a conocerlas, como ası́ también a que conozcan las distintas demostraciones que pueden
encontrar si tipean: demo.
2 Introducción a S IMULINK
Hasta ahora vimos que M ATLAB dispone de un entorno de programación con lı́neas de
órdenes, ahora veremos como se puede suplementar utilizando un interfaz de usuario
gráfica llamada S IMULINK. Este entorno nos permite describir gráficamente un sistema
dibujando su diagrama en bloques, que resulta muy conveniente para la simulación y
análisis de sistemas dinámicos.
sin(t)
1
0.5
−0.5
−1
0 1 2 3 4 5 6 7
sin(t−pi/2)
1
0.5
−0.5
−1
0 1 2 3 4 5 6 7
sin(t−pi)
1
0.5
−0.5
−1
0 1 2 3 4 5 6 7
con las librerı́as disponibles; otra es desde la barra de menú File elegir la opción New Model,
de esta forma se abren no sólo las librerı́as sino también el entorno donde vamos a trabajar;
por último, existe un botón de acceso directo a las librerı́as tanto en el entorno de trabajo
de M ATLAB como en el de S IMULINK.
Una vez abiertas las librerı́as, lo que encontraremos depende de la versión de MATLAB
que se encuentre instalada. Nos vamos a referir a la versión 5.3. Dentro de la librerı́a
Simulink se encuentran los elementos que vamos a utilizar organizados en sublibrerı́as de
acuerdo con su comportamiento. Las sublibrerı́as que aparecen son:
• Nonlinear
Con un doble click sobre la librerı́a podemos visualizar los elementos que posee. Por
ejemplo si ingresamos a Continous, entre los elementos disponibles utilizaremos los sigu-
ientes:
du
Derivative: bloque derivador, es decir dt
.
Índice General Introducción a M ATLAB y S IMULINK - 16
Zero-pole: bloque para expresar al sistema con ceros, polos y una ganancia.
100
1 .4 1
s2+2s
In1 Out1
Gain Transfer Fcn
s
s+20
Transfer Fcn1
2. Para insertar otro bloque igual no es necesario realizar el ı́tem anterior nuevamente,
podemos seleccionar el bloque anterior, haciendo un click con el botón derecho del
mouse, copiar el bloque y pegarlo donde queramos. Esto mismo se puede hacer sim-
plemente arrastrando el objeto seleccionado con el botón derecho del mouse. De la
misma forma que antes, ingresamos los parámetros de esta función de transferencia.
Para girar el bloque, para que quede mejor orientado para hacer la realimentación,
tenemos que seleccionar el objeto, ir a Format de la barra de menú, y seleccionar Flip
Block o simplemente con las teclas ctr-f.
+−. Otra propiedad que podemos modificar es la forma del icono. Notemos que
cuando hacemos un doble click en cualquier objeto, encontramos una pequeña ayuda
en la parte superior de la ventana, ésto nos es útil para saber con que datos hay que
completar cada campo. Para el bloque de la ganancia, solo ingresamos el valor que
corresponde 0.4.
4. Para unir los bloques solo tenemos que hacer un click en la salida de un bloque y
arrastra el mouse hasta la entrada de otro, cuando soltamos, si la conección está
bien hecha, marcará una flecha negra, en caso de estar uniendo con un nodo, de-
beremos ver un cuadradito negro. Para borrar cualquier elemento, simplemente lo
seleccionamos y con la tecla DEL se elimina.
5. Por último nos falta solo indicar cuál es la entrada y cual es la salida, esto lo hacemos
para poder sacar la transferencia a lazo cerrado, de otra forma no lo pondrı́amos. La
necesidad de marcar la entrada y la salida es para que MATLAB sepa desde donde has-
ta donde vamos a querer la transferencia. Estos bloques los encontramos en Signals &
Systems, se llaman ”In1” e ”Out1”.
[A,B,C,D]=linmod(’Functtrans’);
[num,den]=ss2tf(A,B,C,D);
num=[40 800]
den=[1 22 180 800]
100
.4
s2+2s
Step Gain Transfer Fcn Scope
s
s+20
Transfer Fcn1
1.4
1.2
0.8
0.6
0.4
0.2
0
0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2
Si hacemos doble click sobre el bloque “Scope”, veremos la salida del sistema como
en la Figura 11. Este bloque también posee algunas propiedades que podemos modificar,
entre ellas están los valores de los ejes, el tı́tulo y la escala. Cuenta también con Zoom
para visualizar alguna zona en detalle. Otra propiedad es la posibilidad de asignarle los
datos que posee a una variable. Luego desde la ventana de comandos podemos visualizar
los valores o graficarlos dado que SIMULINK guarda también en una variable el vector
temporal que utiliza en la simulación, dicha variable se llama tout.
Si en lugar de la respuesta al escalón unitario queremos la respuesta al impulso, dado
que SIMULINK no posee un bloque generador de impulsos, debemos generarlo nosotros
como resta de dos escalones.
Curso 2010/2011
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 1/215
Contenidos
1 Introducción
2 Programación con Matlab
3 Optimización del código de programación
4 Gráficas en dos y tres dimensiones
5 Programación orientada a objetos
6 Simulación en Matlab y Simulink
7 GUIDE: Interface gráfico de matlab
8 Funciones para tratamiento de datos
9 Funciones para álgebra de matrices
10 Filtros y análisis en frecuencia
13 Bibliografı́a
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 2/215
Contenidos
1 Introducción
2 Programación con Matlab
3 Optimización del código de programación
4 Gráficas en dos y tres dimensiones
5 Programación orientada a objetos
6 Simulación en Matlab y Simulink
7 GUIDE: Interface gráfico de matlab
8 Funciones para tratamiento de datos
9 Funciones para álgebra de matrices
10 Filtros y análisis en frecuencia
13 Bibliografı́a
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 3/215
¿Qué es MATLAB?
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 4/215
Formas de introducir matrices en MATLAB
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 5/215
obteniendo
ans =
16 5 9 4
3 10 6 15
2 11 7 14
13 8 12 1
ans =
34
34
34
34
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 7/215
Se obtiene
ans =
16
10
7
1
obteniéndose
ans =
34
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 8/215
Trabajando con matrices
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 9/215
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 10/215
Trabajando con matrices
X =
16 3 2 13 0
5 10 11 8 0
9 6 7 12 0
4 15 14 1 17
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 11/215
El operador :
es
100 93 86 79 72 65 58 51
y
0: pi /4: pi
es
0 0.7854 1.5708 2.3562 3.1416
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 12/215
El operador :
los dos puntos : (sin otros números) significan todas las filas y end
se refier a la última columna.
Pregunta: ¿Qué esta calculando la siguiente expresión?
sum (A( end , : ) )
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 13/215
La función magic
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 14/215
Expresiones
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 15/215
Variables
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 16/215
Números
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 17/215
Operadores
+ Suma
- Resta
* Producto
/ División
\ División por la izquierda
(se explicará)
^ Potencia
’ Transposición y conjugación compleja
( ) Orden de evaluación
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 18/215
Funciones
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 19/215
Funciones
a = a b s (3+4 i )
a =
5
z = s q r t ( b e s s e l k ( 4 / 3 , rho−i ) )
z =
0.3730+ 0 . 3 2 1 4 i
huge = e x p ( l o g ( r e a l m a x ) )
huge =
1 . 7 9 7 7 e +308
t o o b i g = p i ∗ huge
toobig =
Inf
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 21/215
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 22/215
Funciones para crear matrices
Ejemplos
Z = zeros (2 ,4)
Z =
0 0 0 0
0 0 0 0
F = 5∗ o n e s ( 3 , 3 )
F =
5 5 5
5 5 5
5 5 5
R = randn (4 ,4)
R =
1.0668 0.2944 −0.6918 −1.4410
0.0593 −1.3362 0.8580 0.5711
−0.0956 0.7143 1.2540 −0.3999
−0.8323 1.6236 −1.5937 0.6900
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 23/215
El comando load
El comando
l o a d magik . d a t
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 24/215
Ficheros m
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 25/215
Concatenación
Comprobar que las columnas de esta matriz suman todas lo mismo, pero
no ocurre lo mismo con sus filas.
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 26/215
Borrado de filas y columnas
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 27/215
El comando format
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 28/215
El comando format
f o r m a t bank
1.33 0.00
format r a t
4/3 1/810045
format hex
3 ff5555555555555 3 eb4b6231abfd271
Para dividir expresiones que no caben en una única lı́nea, se usan tres
puntos ...
s = 1 −1/2 + 1/3 −1/4 + 1/5 − 1/6 + 1/7 . . .
− 1/8 + 1/9 − 1/10 + 1/11 − 1 / 1 2 ;
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 29/215
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 30/215
Gráficos
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 31/215
Gráficos
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 32/215
Gráficos
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 33/215
Ayuda en MATLAB
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 34/215
El comando help
MAGIC Magic s q u a r e .
MAGIC(N) i s an N−by−N m a t r i x c o n s t r u c t e d from
t h e i n t e g e r s 1 t h r o u g h Nˆ2 w i t h e q u a l row ,
column , and d i a g o n a l sums .
P r o d u c e s v a l i d magic s q u a r e s f o r N =
1 ,3 ,4 ,5....
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 35/215
Matrix a n a l y s i s .
norm − M a t r i x o r v e c t o r norm .
normest − E s t i m a t e t h e m a t r i x 2−norm
...
matlab / g e n e r a l
matlab / ops
...
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 36/215
La ventana de ayuda
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 37/215
El comando lookfor
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 38/215
El escritorio de ayuda (help desk)
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 39/215
El Entorno de MATLAB
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 41/215
La trayectoria de búsqueda
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 42/215
Manipulación de Ficheros
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 43/215
El comando diary
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 44/215
Ejecución de programas externos
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 45/215
Ejercicios 1
Fichero Aejer1.m : Las siguientes expresiones describen las
tensiones principales de contacto en las direcciones x, y y z que
aparecen entre dos esferas que se presionan entre sı́ con una fuerza
F.
" #
2 −1
z a z
σx = σy = −pmáx 1 − tan−1 (1 − v1 ) − 0,5 1 + 2
a z a
−pmáx
σz =
1 + z 2 /a2
siendo
1/3
3F (1 − v12 )/E1 + (1 − v22 )/E2
a =
8 1/d1 + 1/d2
3F
pmáx =
2πa2
vj son los coeficientes de Poisson, Ej los módulos de Young de
cada esfera y dj son los diámetros de las dos esferas.
Escribir las ecuaciones en notación de MATLAB y evaluarlas para
los siguientes valores: v1 = v2 = 0,3, E1 = E2 = 3 · 107 , d1 = 1,5,
d2 = 2,75, F = 100 lb. y z = 0,01 in.
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 46/215
Ejercicio 2
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 47/215
Ejercicio 3
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 49/215
Ejercicio 5
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 50/215
Ejercicio 6
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 51/215
Ejercicio 7
H = X (X T X )−1 X T
Sea
17 31 5
6 5 4
X =
19 28 9
12 11 10
Calcular la diagonal de H.
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 52/215
Ejercicio 8
2 Diente de sierra
∞
1 1X1
f (τ ) = + sin(2kπτ ), −1 ≤ τ ≤ 1
2 π n
k=1
3 Diente de sierra
∞
1 1X1
f (τ ) = − sin(2kπτ ), −1 ≤ τ ≤ 1
2 π n
k=1
4 Onda triangular
∞
π 4X 1
f (τ ) = − cos((2k − 1)πτ ), −1 ≤ τ ≤ 1
2 π (2k − 1)2
k=1
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 53/215
Ejercicio 9
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 54/215
Ejercicio 10
2 Astroide (0 ≤ φ ≤ 2π)
x = 4 cos3 φ
y = 4 sin3 φ
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 55/215
Ejercicio 11
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 56/215
Contenidos
1 Introducción
2 Programación con Matlab
3 Optimización del código de programación
4 Gráficas en dos y tres dimensiones
5 Programación orientada a objetos
6 Simulación en Matlab y Simulink
7 GUIDE: Interface gráfico de matlab
8 Funciones para tratamiento de datos
9 Funciones para álgebra de matrices
10 Filtros y análisis en frecuencia
13 Bibliografı́a
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 57/215
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 58/215
Introducción a entornos de trabajo (II)
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 59/215
Tipos de variables:
Clase Ejemplo Descripción
array [1,2;3,4]; 5+6i Datos virtual ordenado por ı́ndices
cuyos componentes son datos del
mismo tipo.
char ’Hola’ Array de caracteres (cada carácter
tiene 16 bits).
celda {17, ’hola’, eye(2)} Dato virtual ordenado por ı́ndices
cuyos componentes son arrays de dis-
tinto tipo.
struct a.dia=1; a.mes=’julio’ Dato virtual para almacenar datos
por campos (estructura). Cada cam-
po es un array o celda.
objeto tf(1,[1,1]) Datos definido por el usuario con base
a una estructura y con funciones aso-
ciadas.
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 60/215
Tipos de datos (II)
Operadores:
Oper. aritméticos Oper. de relación
+ Suma. > Menor que
- Resta. > Mayor que
.* Multiplicación. <= Menor que o igual a
./ División derecha. >= Mayor que o igual a
.\ División izquierda. == Igual a
: Operador dos puntos. = No igual a
.^ Potencia.
.’ Transpuesta.
’ Conjugada transpuesta.
* Multiplicación de matrices. Operadores lógicos.
/ División derecha de matrices. & Y
\ División izquierda de matrices. | OR
^ Potencia de matrices. ~ NO
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 61/215
...
Operaciones lógicas en el workspace o Ascript1.m:
>> a = [ 1 , 2 , 3 ] ; b = [ 1 , 0 , 3 ] ; >> a&b
>> a==b ...
... >> ˜ a
>> a | b ...
...
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 62/215
Tipo de datos (IV): Valores especiales
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 63/215
En el workspace:
>> 3+2 >> a= 5+3∗ i >> a= 0/0
... ... ...
>> p i ∗3 >> a= i ∗(4+3∗ i ) >> a= NaN∗3
... ... ...
>> r e a l m a x >> a= 3/0 >> a= 3∗ I n f
... ... ...
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 64/215
Sentencias de control.
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 65/215
if n < 0
% Si n negativo error .
if s e n t l ó g 1 ,
d i s p ( ’ Entrada debe se p o s i t i v a ’ ) ;
% bloque 1
e l s e i f rem ( n , 2 ) == 0
e l s e i f s e n t l ó g 2
% Si es par se d i v i d e entre 2.
,
A = n /2;
% bloque 2
else
else
% Si es impar se incrementa y d i v i d e
% bloque 3
.
end
A = ( n+1) / 2 ;
end
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 66/215
Sentencia de control switch, case y otherwise.
s w i t c h input num
switch expression
c a s e { −1 , −2, −3}
case value1
d i s p ( ’−1 ó −2 ó −3 ’ ) ;
% bloque 1
case 0
case value2
disp ( ’ cero ’ ) ;
% b l o q u e −2
c a s e { 1 , 2 , 3}
. . .
d i s p ( ’ 1 ó 2 ó 3 ’ ) ;
otherwise
otherwise
% b l o q u e −n
disp ( ’ otro valor ’ ) ;
end
end
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 67/215
n = 1;
w h i l e e x p r e s i ó n
w h i l e p r o d ( 1 : n ) < 1 e100 ,
% bloque
n = n + 1;
end
end
f o r ı́ n d i c e= i n i c i o : p a s o : f i n , for i i = 2:6 ,
% bloque x ( i i ) = 2∗ x ( i i −1) ;
end end
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 68/215
Sentencia de control: break, try-catch y return
Sentencia break:
Sirve para salir de forma automática del último bucle while o for abierto
sin tener en cuenta la condición o ı́ndice de salida.
Sentencia de control try, catch:
Formulación general,
try bloque-1 catch bloque-2 end
Ejecuta el bloque-1 mientras no haya un error. Si se produce un error en
bloque-1 se ejecuta bloque-2.
Sentencia return:
Se sale de la función en la que se trabaja.
Si se llega al final de la función (*.m), Matlab sale de ella
automáticamente.
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 69/215
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 70/215
Funciones en matlab (II): Variables de entrada
Variables de entrada-salida:
Libertad en su número. La variable nargin y nargout indican su número.
Variables locales por defecto sin tipo determinado.
Ejemplo: a, b y c pueden ser double o array myfile2.m.
function c = myfile2 (a , b , c)
% Output : c . I n p u t : a , b y c
i f n a r g i n <2 ,
error ( ’c = myfile (a , b , [ c ]) ’ ) ;
e l s e i f n a r g i n ==2,
c= s q r t ( a .ˆ2+ b . ˆ 2 ) ;
else
c= s q r t ( a .ˆ2+ b .ˆ2+ c . ˆ 2 ) ;
end
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 71/215
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 72/215
Funciones en matlab (IV): Variables globales y estáticas
Variable estática:
>> P= 1 0 ; z= m y f i l e ( 3 ) ; % r e p e t i r
Variable global:
>> g l o b a l P ; P=10; z= m y f i l e ( 3 ) ; % r e p e t i r
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 73/215
f u n c t i o n z= f u n ( x , y )
z=s q r t ( x .ˆ2+ y . ˆ 2 ) ;
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 74/215
Funciones en matlab (VI):Evaluación de cadenas eval() y feval()
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 75/215
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 76/215
Funciones save y load.
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 77/215
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 78/215
Funciones de librerı́a entrada/salida de lenguaje C (II)
>> f i c = f o p e n ( ’ f i c h . d a t ’ , ’ r ’ ) ; % Abre f i c h e r o p a r a
lectura .
>> f c l o s e ( f i c ) ; % C i e r r a f i c h e r o ’ f i c h . dat ’ .
>> f c l o s e ( ’ a l l ’ ) ; % C i e r r a t o d o s l o s f i c h e r o s .
Principales usos:
Ficheros de texto con formato
Ficheros binarios para guardar o extraer matrices en su forma vectorial.
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 79/215
Ejemplo Ascript9.m:
>> a= r a n d ( 3 , 3 )
>> f i c h= f o p e n ( ’ d a t o s . t x t ’ , ’w ’ ) ; % G u a r d a r en t e x t o
>> f p r i n t f ( f i c h , ’ %.2 f %.2 f %.2 f \n ’ , a ) ;
>> fclose ( fich ) ;
>> f i c h= f o p e n ( ’ d a t o s . t x t ’ , ’ r ’ ) ; % R e c u p e r a r de f i c h e r o
texto
>> b= f s c a n f ( f i c h , ’ %f ’ )
>> f c l o s e ( f i c h ) ;
>> f i c h= f o p e n ( ’ d a t o s . t x t ’ , ’w ’ ) ; % G u a r d a r en b i n á r i o ,
f o r m a t o r e a l ∗4
>> f w r i t e ( f i c h , a , ’ r e a l ∗4 ’ ) ;
>> f c l o s e ( f i c h ) ;
>> f i c h= f o p e n ( ’ d a t o s . t x t ’ , ’ r ’ ) ; % R e c u p e r a r en b i n á r i o
>> b= f r e a d ( f i c h , i n f , ’ r e a l ∗4 ’ )
>> f c l o s e ( f i c h ) ;
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 80/215
Prácticas de funciones y sentencias de control (I).
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 81/215
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 82/215
Contenidos
1 Introducción
2 Programación con Matlab
3 Optimización del código de programación
4 Gráficas en dos y tres dimensiones
5 Programación orientada a objetos
6 Simulación en Matlab y Simulink
7 GUIDE: Interface gráfico de matlab
8 Funciones para tratamiento de datos
9 Funciones para álgebra de matrices
10 Filtros y análisis en frecuencia
13 Bibliografı́a
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 83/215
Composición de arrays,
>> b= [ a ( : , 1 ) , [ 5 , 7 ] ’ ] % P r i m e r a columna de a y [ 5 , 7 ]
v e c t o r columna .
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 84/215
Optimización de programas: Indexado de arrays y celdas (II)
Borrado de matrices,
>> b ( : , 1 ) = [ ] ; % B o r r a d o de l a p r i m e r a columna .
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 85/215
Sumatorio de función, y = 10
P
n=0 sin(n) ∗ n.
>> n= [ 0 : 1 0 ] ’ ; y= sum ( s i n ( n ) . ∗ n ) ;
Función de dos dimensiones en varios puntos,
y (i, j) = i 2 + j 2 + i ∗ j, i ∈ [0, 5], j ∈ [0, 7],
>> i i =0:5; j j = [ 0 : 7 ] ’ ;
>> s i i= s i z e ( i i ,2) ; s j j= s i z e ( jj ,1) ;
>> i i = r ep ma t ( i i , [ s j j , 1 ] ) ; j j = r e p m a t ( j j , [ 1 , s i i ] ) ;
>> [ i i , j j ]= m e s h g r i d ( i i , j j ) ; % e q u i v a l e n t e
>> y= i i .ˆ2+ j j .ˆ2+ i i . ∗ j j ;
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 86/215
Optimización del código de programas (II)
>> i i = 0 : 5 ; n = [ 1 : 1 0 ] ;
>> y= n∗ o n e s ( s i z e ( n ) ) ’ ∗ i i .ˆ2+ i i ;
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 87/215
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 88/215
Matrices tri-dimensionales (II)
Eliminación de dimensiones,
>> b= s q u e e z e ( a ( : , 1 , 1 ) ) ; % Se o b t i e n e un v e c t o r dim
(2∗1)
>> b= s q u e e z e ( a ( 1 , : , 1 ) ) ; % Se o b t i e n e un v e c t o r dim
(1∗2)
>> b= s q u e e z e ( a ( 1 , 1 , : ) ) ; % Se o b t i e n e un v e c t o r dim
(2∗1)
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 89/215
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 90/215
Funciones para estructuras y celdas (I)
Función Descripción
getfield() Muestra los campos de la estructura.
isfield() Verdadero si un campo de la estructura.
isstruct() Verdadero si es una estructura.
rmfield() Borra el campo marcado de la estructura.
setfield() Cambia los contenidos de campo.
struct() Crea o convierte en una matriz de estructuras.
struct2cell() Convierte una matriz de estructuras en celdas.
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 91/215
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 92/215
Funciones para estructuras y celdas (III)
Función Descripción
cell() Crea una matriz de celda.
cell2struct() Convierte celdas en estructuras.
celldisp() Muestra el contenido de la celda.
cellfun() Aplica una celda función a matriz.
cellplot() Muestra una gráfica de la celda.
iscell() Verdadero en caso de que sea celda.
num2cell() Conversión de matriz numérica en celda.
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 93/215
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 94/215
Prácticas con matrices, celdas, estructuras y ficheros
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 95/215
Contenidos
1 Introducción
2 Programación con Matlab
3 Optimización del código de programación
4 Gráficas en dos y tres dimensiones
5 Programación orientada a objetos
6 Simulación en Matlab y Simulink
7 GUIDE: Interface gráfico de matlab
8 Funciones para tratamiento de datos
9 Funciones para álgebra de matrices
10 Filtros y análisis en frecuencia
13 Bibliografı́a
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 96/215
Funciones para gráficas en dos dimensiones (I)
Función Comentario
figure Crea una figura
subplot Crea varios ejes en la misma figura
hold Superpone diferentes plots
plot Plot lineal
loglog Plot logarı́tmico
semilogx, semilogy Plot semilogarı́tmico en eje x e y
xlim, ylim , zlim Márgenes en cada uno de los ejes
tit, xlabel, ylabel Texto en tı́tulo y ejes
legend, text, gtext Añadir texto en figura
ginput Marcar posición en figura
grid, box Mallado y caja en figura
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 97/215
Función Comentario
bar, bar3, bar3h Gráficas de barras
errorbar Gráficas con barras que marcan el error
compass Gráficas en forma de compás
ezplot, ezpolar Gráfica sencillas de funciones
fplot Gráficas de funciones
hist, pareto Histograma y carta de pareto
pie, pie3 Pastel de dos o tres dimensiones
stem, stairts Gráficas con impulsos y escaleras
scatter, plotmatrix Gráficas de dispersión de datos y matrices
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 98/215
Ejemplos con gráficos de dos dimensiones, Escript1.m (I)
Barras:
>> x= − 2 . 9 : 0 . 2 : 2 . 9 ; b a r ( x , e x p (−x . ∗ x ) ) ;
>> b a r h ( x , e x p (−x . ∗ x ) ) ;
>> y= r o u n d ( r a n d ( 5 , 3 ) ∗ 1 0 ) ;
>> bar ( y , ’ group ’ ) ; bar ( y , ’ s t a c k ’ ) ;
Histogramas:
>> y= r a n d n ( 1 e4 , 1 ) ; hist (y) ; hist (y ,20) ;
Pasteles:
>> x = [ 1 , 3 , 0 . 5 , 2 . 5 , 2 ] ; p i e ( x ) ;
Escaleras:
>> x= − 3 : 0 . 1 : 3 ; s t a i r s ( x , e x p (−x . ˆ 2 ) ) ;
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 99/215
Puntos:
>> y=r a n d n ( 5 0 , 1 ) ; stem ( y ) ;
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 100/215
Gráficas para funciones y complementos (I), Escript2.m.
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 101/215
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 102/215
Funciones para gráficas en tres dimensiones.
Función Comentario
plot3 Plot lineal en tres dimensiones
mesh, meshc, meshz Plot de mallados en tres dimensiones
surf, surfc, surfl Plot de superfiecie en tres dimensiones
meshgrid, ndgrid Preparación de datos para gráficas de superficie
hidden Ocultar lı́neas y superficies ocultas
contour, contour3 Curvas de nivel
trimesh, trisurf Plot de mallado triangular
scatter3, stem3 Diagramas de dispersión y impulsos en 3 dimensiones
slice Gráficos de volumen
surfnorm Normales de las superficies
quiver3 Puntos y normales en vectores
patch Parches de superficies
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 103/215
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 104/215
Ejemplos de gráficas en tres dimensiones, Escript3.m (II)
Contornos:
>> [ X , Y]= m e s h g r i d ( − 2 : . 2 : 2 , − 2 : . 2 : 3 ) ; Z= X . ∗ e x p (−X.ˆ2 −Y
.ˆ2) ;
>> c o n t o u r (X , Y , Z ) ; f i g u r e ; c o n t o u r (X , Y , Z , 5 0 ) ;
>> f i g u r e ; c o n t o u r f (X , Y , Z ) ;
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 105/215
Rotación de la figura:
>> h= s u r f ( p e a k s ( 2 0 ) ) ; r o t a t e ( h , [ 1 , 0 , 0 ] , 1 5 ) ;
>> v i e w ( [ 1 0 , 1 0 ] ) ;
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 106/215
Prácticas funciones para gráficas
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 107/215
Contenidos
1 Introducción
2 Programación con Matlab
3 Optimización del código de programación
4 Gráficas en dos y tres dimensiones
5 Programación orientada a objetos
6 Simulación en Matlab y Simulink
7 GUIDE: Interface gráfico de matlab
8 Funciones para tratamiento de datos
9 Funciones para álgebra de matrices
10 Filtros y análisis en frecuencia
13 Bibliografı́a
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 108/215
Definición de clase y objeto
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 109/215
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 110/215
Funciones método principales (II)
Obtención de información:
General: Método get(), muestra propiedades del objeto.
>> g e t (P)
Por ı́ndices: Método B=subref(A,S)
>> P . num{1} % A=P , S ( 1 ) . t y p e = ’ . ’ , S ( 1 ) . t y p e = ’ { } ’ ,
>> %S ( 1 ) . s u b s ={ ’num ’ } , S ( 2 ) . s u b s ={1}
Introducción de información:
General: Método set(), cambia propiedades del objeto.
>> s e t (P , ’ num ’ , [ 1 , 2 ] )
Por ı́ndices: Método A= subsasign(A,S,B)
>> P . num{1}= 1 % A=P , S ( 1 ) . t y p e = ’ . ’ , S ( 2 ) . t y p e = ’{} ’
>> %S ( 1 ) . s u b s ={ ’num ’ } , S ( 2 ) . s u b s ={1} , B=1
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 111/215
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 112/215
Redefinición de operadores (II)
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 113/215
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 114/215
Prioridades y ejemplos
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 115/215
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 116/215
Ejemplo: Una clase de polinomios (II)
Método constructor,
f u n c t i o n p = polynom ( a )
% polynom C o n s t r u c t o r de l a c l a s e polynom .
% p = polynom ( v ) c r e a un p o l i n o m i o de un v e c t o r .
% Los c o e f i c i e n t e e s t á n en o r d e n d e c r e c i e n t e
% de l a s p o t e n c i a s de x .
if n a r g i n == 0
p.c = [];
p = c l a s s ( p , ’ polynom ’ ) ;
e l s e i f i s a ( a , ’ polynom ’ )
p = a;
else
p.c = a (:) . ’;
p = c l a s s ( p , ’ polynom ’ ) ;
end
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 117/215
Método display:
function display (p)
% polynom \ d i s p l a y . Comando v e n t a n a p a r a v e r e l o b j e t o .
disp ( int2str (p . c) ) ;
Método double:
function c = double (p)
% polynom \ d o u b l e . C o n v i e r t e polynom a un v e c t o r d o u b l e .
% c = d o u b l e ( p ) . C o n v i e r t e un p o l i n o m i o en v e c t o r .
c = p.c;
Operador +:
function r = plus (p , q)
% polynom \ p l u s . D e f i n e p + q p a r a p o l i n o m i o s .
p = polynom ( p ) ; q = polynom ( q ) ;
k = length (q . c) − length (p . c) ;
r = polynom ( [ z e r o s ( 1 , k ) p . c ] + [ z e r o s (1 , − k ) q . c ] ) ;
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 118/215
Ejemplo: Una clase de polinomios (IV)
Operador -:
f u n c t i o n r = minus ( p , q )
% polynom \ minus . I m p l e m e n t a p − q e n t r e p o l i n o m i o s .
p = polynom ( p ) ; q = polynom ( q ) ;
k = length (q . c) − length (p . c) ;
r = polynom ( [ z e r o s ( 1 , k ) p . c ] − [ z e r o s (1 , − k ) q . c ] ) ;
Operador *:
f u n c t i o n r = mtimes ( p , q )
% polynom \ mtimes . I m p l e m e n t a p ∗ q e n t r e p o l i n o m i o s .
p = polynom ( p ) ;
q = polynom ( q ) ;
r = polynom ( c o n v ( p . c , q . c ) ) ;
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 119/215
Muchas veces se desea crear una nueva clase con las mismas propiedades
y funciones métodos que otra ya existente a la que se añaden nuevas
propiedades y funciones método.
Esto se puede conseguir añadiendo un objeto de la clase existente
ClasePadre en la definición de la nueva clase.
Los objetos de la nueva clase serán ObjetoHijo, y los de la clase
existente ObjetoPadre.
Un ObjetoHijo puede acceder a todos las funciones método de la
ClasePadre que no estén definidos en su clase.
La forma de definir un objeto hijo es la siguiente:
O b j e t o H i j o= c l a s s ( O b j e t o H i j o , ’ C l a s e H i j o ’ , O b j e t o P a d r e ) ;
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 120/215
Clases derivadas: Herencia (II)
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 122/215
Clases derivadas: Herencia (IV)
Ejemplos en el workspace:
>> p= f u n c i o n % O b j e t o f u n c i o n n u l o
>> p1= f u n c i o n ( ’ z e t a ’ , [ 1 , 2 , 3 ] )
>> % O b j e t o f u n c i o n con nombre y p a r á m e t r o s .
>> p2= f u n c i o n ( ’ e t a ’ , [ 2 , 3 , 4 ] )
>> p3= p1+p2
>> % Se u s a un método d e l p a d r e . E l r e s u l t a d o en un
o b j e t o polynom .
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 123/215
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 124/215
Clases agregadas (I)
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 125/215
Ejemplos en el workspace:
>> g= t r a n s f e r ; % Objeto nulo
>> g= t r a n s f e r ( [ 1 , 2 , 3 ] ) % O b j e t o con num y den= 1 .
>> p= polynom ( [ 1 , 2 , 3 ] ) % O b j e t o polynom
>> g= t r a n s f e r ( [ 1 , 2 , 3 ] , [ 3 , 4 , 5 ] ) ; % O b j e t o con num y den
>> g= t r a n s f e r ( p , [ 1 , 2 , 3 ] ) ; % O b j e t o con num y den
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 127/215
s w i t c h s . type ,
case ’ . ’ ,
s w i t c h s . subs ,
c a s e ’ num ’ ,
b= c h a r ( a . num ) ; % p o l i n o m i o num
c a s e ’ den ’ ,
b= c h a r ( a . den ) ; % p o l i n o m i o den
otherwise
e r r o r ( ’ Campos : num , den ’ ) ;
end
case ’ () ’ ,
ind = s . subs { : } ;
b= a . num ( i n d ) . / a . den ( i n d ) ; % V a l o r en x
otherwise
e r r o r ( ’ Dar campo o v a l o r de x en p ( x ) ’ )
end
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 128/215
Clases agregadas (V)
f u n c t i o n r = minus ( p , q )
% t r a n s f e r \ minus . D e f i n e p − q p a r a t r a n s f e r .
p = transfer (p) ;
q = transfer (q) ;
r . num= p . num∗q . den − p . den ∗q . num ;
r . den= p . den ∗q . den ;
r= c l a s s ( r , ’ t r a n s f e r ’ ) ;
f u n c t i o n r = mtimes ( p , q )
% t r a n s f e r \ mtime . D e f i n e p ∗ q p a r a t r a n s f e r .
p = transfer (p) ;
q = transfer (q) ;
r . num= p . num∗q . num ;
r . den= p . den ∗q . den ;
r= c l a s s ( r , ’ t r a n s f e r ’ ) ;
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 129/215
Ejemplos en el workspace:
>> g1= t r a n s f e r ( [ 1 , 2 , 3 ] , [ 2 , 3 , 4 ] )
>> g2= t r a n s f e r ( [ 1 , 4 , 3 ] ) % den=1
>> g3= g1+g2 ; % O b j e t o t r a n s f e r
>> g3= g1 / g2 % O b j e t o t r a n s f e r
>> g3 . num % Cadena de c a r a c t e r e s
>> g3 ( 1 0 ) % V a l o r de c o c i e n t e en x=10
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 130/215
Prácticas de la programación orientada a objeto
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 131/215
Contenidos
1 Introducción
2 Programación con Matlab
3 Optimización del código de programación
4 Gráficas en dos y tres dimensiones
5 Programación orientada a objetos
6 Simulación en Matlab y Simulink
7 GUIDE: Interface gráfico de matlab
8 Funciones para tratamiento de datos
9 Funciones para álgebra de matrices
10 Filtros y análisis en frecuencia
13 Bibliografı́a
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 132/215
Definición de sistema continuos.
y (t) = F (u(t)).
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 133/215
Sistema lineal:
Si u(t) → y (t), entonces αu(t) → αy (t).
Si {u1 (t), u2 (t)} → {y1 (t), y2 (t)}, entonces
{u1 (t) + u2 (t)} → {y1 (t) + y2 (t)}.
Un sistema lineal se rige por una ecuación diferencial lineal,
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 134/215
Definición de sistema muestreados.
Y (z) z n + a1 z n−1 + . . . + a0
= .
U(z) bn z n + bn−1 z n−1 + . . . + b0
Un sistema, en general puede estar compuesto por partes continuas,
muestreadas, lineales y no lineales.
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 135/215
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 136/215
Simulación con Matlab
y1 = y , y2 = y 0 , . . . , yn = y (n−1) ,
y por tanto
y10
y2
y20 y3
= .
.. ..
. .
yn0 f (t, y1 , y2 , . . . , yn )
Condiciones iniciales: Valores iniciales de
T
y1 (t0 ), . . . , yn (t0 ) .
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 137/215
Esta función será llamada por el programa ODE en los sucesivo puntos t
para obtener la derivada.
La entrada se debe poner en función de t.
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 138/215
Clasificación de ODEs y formulación
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 139/215
Ejemplos:
Número de datos de salida:
>> o p t i o n= o d e s e t ( ’ R e f i n e ’ , 4 ) ; % p o r d e f e c t o .
Jacobiano del ODE en función jacpol.m:
>> o p t i o n= o d e s e t ( ’ J a c o b i a n ’ , @ j a c p o l ) ;
Se precisa una función de la forma,
f u n c t i o n j a c= j a c p o l ( t , y )
jac = [0 , 1 , 0;
−2∗y ( 1 ) ∗ y ( 2 ) , 1−y ( 1 ) ˆ 2 , (1− y ( 1 ) ˆ 2 ) ∗ y ( 2 ) ;
0, 0, 0];
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 140/215
Ecuaciones diferenciales con valores de frontera (I)
El problema puede ser planteado por las ecuaciones como para a < t < b,
y 0 = f (t, y , p)
g (y (a), y (b), p) = 0
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 141/215
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 142/215
Ecuaciones diferenciales en derivadas parciales (I)
u(x, t0 ) = u0 (x).
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 143/215
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 144/215
Ecuaciones diferenciales en derivadas parciales (III)
f u n c t i o n [ c , f , s ]= F ( x , t , u , dxdu )
c= p i ˆ 2 ; f= dxdu ; s =0;
f u n c t i o n u0= i n i t ( x )
u0= s i n ( p i ∗ x ) ;
f u n c t i o n [ p l , q l , pr , q r ]= f r o n t ( x l , u l , x r , ur , t )
p l=u l ; q l =0; p r= p i ∗ e x p (− t ) ; q r= 1 ;
>> m= 0 ; x= l i n s p a c e ( 0 , 1 , 2 0 ) ; t= l i n s p a c e ( 0 , 2 , 5 ) ;
>> s o l= pd ep e (m, @F , @ i n i t , @ f r o n t , x , t ) ;
>> u= s o l ( : , : , 1 ) ;
>> figure ; surf (x , t , u) ;
>> f i g u r e ; p l o t ( x , u ( end , : ) ) ;
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 145/215
x 0 = σ(y − x)
y 0 = x(r − z) − y
z 0 = xy − bz
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 146/215
Simulink: Tabla de bloques propios
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 147/215
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 148/215
Simulink: Simulación de sistemas desde matlab
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 149/215
1 1 1
1 1
s+1 s s
In1 Relay Out1
Transfer Fcn Integrator1 Integrator
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 150/215
Contenidos
1 Introducción
2 Programación con Matlab
3 Optimización del código de programación
4 Gráficas en dos y tres dimensiones
5 Programación orientada a objetos
6 Simulación en Matlab y Simulink
7 GUIDE: Interface gráfico de matlab
8 Funciones para tratamiento de datos
9 Funciones para álgebra de matrices
10 Filtros y análisis en frecuencia
13 Bibliografı́a
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 151/215
2500
2000
1500
1000
500
-500
0.97 0.98 0.99 1 1.01 1.02 1.03 1.04
5
x 10
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 152/215
GUIDE: Interface gráfico de matlab (II)
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 153/215
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 154/215
GUIDE: Ejercicios propuestos
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 155/215
Contenidos
1 Introducción
2 Programación con Matlab
3 Optimización del código de programación
4 Gráficas en dos y tres dimensiones
5 Programación orientada a objetos
6 Simulación en Matlab y Simulink
7 GUIDE: Interface gráfico de matlab
8 Funciones para tratamiento de datos
9 Funciones para álgebra de matrices
10 Filtros y análisis en frecuencia
13 Bibliografı́a
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 156/215
Funciones matemáticas básicas (I)
Función Comentario
abs Valor absoluto
acos, acosh Arco coseno y arco coseno hiperbólico
acot, acoth Arco cotangente y arco cotangente hiperbólico
acsc, acsch Arco cosecante y arco cosecante hiperbólico
angle Argumento
asec, asech Arco secante y arco secante hiperbólico
asin, asinh Arco seno y arco seno hiperbólico
atan, atanh Arco tangente y arco tangente hiperbólico
atan2 Arco tangente en el cuarto cuadrante
ceil Redondeo al entero más próximo
complex Forma un número complejo
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 157/215
Función Comentario
conj Complejo conjugado
cos,cosh Coseno y coseno hiperbólico
cot,coth Cotangente y cotangente hiperbólica
csc,csch Cosecante y cosecante hiperbólica
exp Exponencial
fix Elimina la parte decimal
floor Mayor entero menor o igual que un real dado
gcd Máximo común divisor
imag Parte imaginaria de un número complejo
lcm Máximo común múltiplo
log Logaritmo neperiano
log2 Logaritmo base 2
log10 Logaritmo base 10
mod Módulo
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 158/215
Funciones matemáticas básicas (III)
Función Comentario
nchoosek Coeficiente binomial
real Parte real de un número complejo
rem Resto de la división
round Redondeo al entero más cercano
sec,sech Secante y secante hiperbólica
sign Signo
sin,sinh Seno y seno hiperbólico
sqrt Raı́z cuadrada
tan,tanh Tangente y tangente hiperbólica
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 159/215
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 160/215
Funciones de transformación de coordenadas
Función Comentario
cart2pol,pol2cart Transforma cartesianas a polares (cilı́ndricas 3D)
cart2sph,sph2cart Transforma cartesianas a esféricas
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 161/215
Función Comentario
max Máximo de vector
mean Media
median Mediana
min Máximo
perms Permuta las filas de una matriz
sort Datos ordenados
sortrows Ordena filas de una matriz
std Desviación estandar.
var Varianza
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 162/215
Funciones estadı́sticas básicas (II)
Función Comentario
corr Correlación entre variables
cov Matriz de covarianzas
corrcoef Matriz de correlaciones
xcorr Correlación cruzada entre variables
xcov Covarianzas cruzadas entre variables
cumprod Producto acumulativo
cumsum Suma acumulativa
cumtrapz Integración acumulativa trapezoidal
diff Función diferencial y aproximación acumulativa
find Busca datos en vectores
hist,histc Histograma y contaje de histograma
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 163/215
Generamos dos series de 1000 números cada una que se almacenan en los
vectores x e y. Estos vectores representan un conjunto de medidas
obtenidas de muestrear dos variables aleatorias X e Y.
>> r a n d n ( ’ s e e d ’ , 1 ) ;
>> x = r a n d n ( 1 0 0 0 , 1 ) ;
>> y = r a n d n ( 1 0 0 0 , 1 ) ;
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 164/215
Ejemplo funciones básicas estadı́stica DStat1.m (II)
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 165/215
Para obtener la posición o ı́ndice del mayor o menor valor dentro del
vector x, se puede utilizar el comando max o min con argumentos de
salida.
>> [ a i ] = max ( x )
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 166/215
Ejemplo funciones básicas estadı́stica DStat1.m (IV)
Tanto xs, como x(i) contienen los valores ordenados de menor a mayor,
para ver los que van de la posición 201 a 210 se hace:
>> [ x s ( 2 0 1 : 2 1 0 ) x ( i ( 2 0 1 : 2 1 0 ) ) ]
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 168/215
Contenidos
1 Introducción
2 Programación con Matlab
3 Optimización del código de programación
4 Gráficas en dos y tres dimensiones
5 Programación orientada a objetos
6 Simulación en Matlab y Simulink
7 GUIDE: Interface gráfico de matlab
8 Funciones para tratamiento de datos
9 Funciones para álgebra de matrices
10 Filtros y análisis en frecuencia
13 Bibliografı́a
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 169/215
Función Comentario
expm Exponencial de una matriz e A
logm Logaritmo neperiano de una matriz
sqrtm Raı́z cuadrada de una matriz
funm Cualquier función matemática aplicada a una matriz
transpose, ()’ Transpuesta de una matriz
inv Inversa de una matriz
det Determinante de una matriz
rank Rango de una matriz
trace Traza de una matriz
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 170/215
Funciones básicas de álgebra matricial (II)
Función Comentario
eig Valores propios de una matriz
svd Valores singulares de una matriz
cond Número de condición de una matriz
rcond Recı́proco del número de condición (estimado)
norm Norma de una matriz
null Base ortonormal del núcleo de una matriz
orth Base ortonormal de la imagen de una matriz
subspace Ángulo entre los subespacios de dos matrices
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 171/215
Calculamos su traspuesta
>> A ’
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 172/215
Ejemplo de Matlab de funciones de álgebra de matrices DAlg1.m (II)
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 173/215
Calculamos 2 elevado a B
>> 2ˆB
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 174/215
Ejemplo de Matlab de funciones de álgebra de matrices DAlg2.m (II)
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 175/215
Descomposición de matrices
Función Comentario
[V,D]=eig(A) AV = VD, D diagonal
[T,B]=balance(A) TB = AT , eig(A) ≈ eig(B)
[U,T]=schur(A) UT = AU, U 0 U = I , T triangular superior
[L,U,P]=lu(A) PA = LU, P permutación, L triangular inferior,
U triangular superior
R=chol(A) R 0 R = A para A definida positiva, R triangular superior
[Q,R,P]=qr(A) AP = QR, P permutación, Q ortogonal,
R triangular superior
[V,J]=jordan(A) AV = VJ, J matriz de Jordan
pinv Pseudoinversa de una matriz
poly Polinomio caracterı́stico de una matriz
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 176/215
Ejemplo de descomposición de matrices DAlg3.m (I)
Comprobamos la descomposición:
>> A∗V−V∗D
Comprobamos la descomposición
>> [ B T\A∗T ]
>> e i g (A)
>> e i g (B)
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 177/215
Comprobamos la descomposición
>> [ U∗T∗U ’ A ]
>> U∗U ’
Calculamos la descomposición QR de A
>> [ Q, R , E]= q r (A)
Comprobamos la descomposición
>> [Q∗R A∗E ]
>> Q∗Q’
Calculamos la descomposición LU de A
>> [ L , U , P]= l u (A)
Comprobamos la descomposición
>> [ L∗U P∗A ]
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 178/215
Ejemplo de descomposición de matrices DAlg3.m (III)
Comprobamos la descomposición
>> [ U∗S∗V ’ A ]
>> U’ ∗ U
>> V∗V ’
Comprobamos la descomposición
>> [ R ’ ∗ R AA ]
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 179/215
Función Comentario
X=A/B Resuelve XA = B
X=A\B Resuelve AX = B por mı́nimos cuadrados
X=lsqnonneg(A,b) Solución de mı́nimos cuadrados de Ax = b, x ≥ 0
X=linsolve(A,B) Resuelve AX = B, A matriz cuadrada, B matriz
r=roots(p) Raı́ces de un polinomio p
p=poly(r) Polinomio de raı́ces v
x=fzero(fun,x0) Calcula un cero de la función fun próximo a x0
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 180/215
Ejemplo solución de sistemas DAlg4.m (I)
x + 2y + 3z = 3
2x + 3y + z = 1
x + y + 5z = 5
La solución es:
>> X=A\b
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 181/215
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 182/215
Ejercicios de álgebra de matrices
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 183/215
Contenidos
1 Introducción
2 Programación con Matlab
3 Optimización del código de programación
4 Gráficas en dos y tres dimensiones
5 Programación orientada a objetos
6 Simulación en Matlab y Simulink
7 GUIDE: Interface gráfico de matlab
8 Funciones para tratamiento de datos
9 Funciones para álgebra de matrices
10 Filtros y análisis en frecuencia
13 Bibliografı́a
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 184/215
Funciones de relación y filtros.
Función Comentario
cov Varianza de un vector
corrcoef Coeficientes de correlación (normalizados)
conv Convolución de datos, producto de polinomios
diff Diferencias entre elementos de un vector
gradient Derivadas parciales numéricas de una matriz
del2 Laplaciano discreto de una matriz
filter Filtro FIR y IIR de datos
ltitr Respuesta lineal
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 185/215
Varianza de un vector
>> l o a d c o u n t . d a t
>> a= c o v ( c o u n t ( : , 1 ) ) ;
Coeficiente de correlación:
>> b= c o r r c o e f ( c o u n t ) ;
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 186/215
Prácticas con funciones de relación y filtros, Bscript2.m (II)
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 187/215
Análisis en frecuencia
Función Comentario
fft Transformada de Fourier discreta
fft2 Transformada de Fourier en dos dimensiones
ifft Inversa transformada de Fourier
ifft2 Inversa transformada de Fourier en dos dimensiones
abs Magnitud
angle Ángulo
fftshift Mueve el retraso cero al centro del espectro
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 188/215
Prácticas de análisis en frecuencia,Bscript3.m
Toma de datos:
>> l o a d s u n s p o t . d a t ;
>> y e a r= s u n s p o t ( : , 1 ) ; w o l f e r= s u n s p o t ( : , 2 ) ;
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 189/215
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 190/215
Contenidos
1 Introducción
2 Programación con Matlab
3 Optimización del código de programación
4 Gráficas en dos y tres dimensiones
5 Programación orientada a objetos
6 Simulación en Matlab y Simulink
7 GUIDE: Interface gráfico de matlab
8 Funciones para tratamiento de datos
9 Funciones para álgebra de matrices
10 Filtros y análisis en frecuencia
13 Bibliografı́a
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 191/215
Función Comentario
conv Producto de polinomios
deconv División de polinomios
poly Definición de polinomios por raı́ces
polyder Derivada de polinomios
polyfit Interpola por mı́nimos cuadrados
polyval Valor polinomio en un punto
polyvalm Valor polinomio con matrices
residue Fracciones parciales
roots Raı́ces de un polinomio
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 192/215
Prácticas con funciones de polinomios, Cscript1.m (I)
Polinomio caracterı́stico:
>> A = [ 1 . 2 3 − 0 . 9 ; 5 1 . 7 5 6 ; 9 0 1 ] ;
>> p o l y (A)
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 193/215
Residuos de un polinomio:
>> b = [−4 8 ] ; a = [ 1 6 8 ] ;
>> [ r , p , k ] = r e s i d u e ( b , a )
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 194/215
Prácticas regresiones basadas mı́nimos cuadrados, Cscript2.m (I)
Solución: a = inv (X 0 ∗ X ) ∗ X 0 ∗ y
Regresión exponencial: y = a(0) + a(1) ∗ exp(−t) + a(2) ∗ t ∗ exp(−t):
>> X = [ o n e s ( s i z e ( t ) ) e xp (− t ) t . ∗ e x p (− t ) ] ; a = X\ y ;
>> t h a t = ( 0 : 0 . 1 : 2 . 5 ) ’ ;
>> y h a t = [ o n e s ( s i z e ( t h a t ) ) e x p (− t h a t ) t h a t . ∗ e x p (− t h a t )
]∗ a ;
>> f i g u r e ; p l o t ( t h a t , y h a t , ’− ’ , t , y , ’ o ’ ) , g r i d on ;
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 195/215
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 196/215
Ejercicios de polinómios y regresión
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 197/215
Función Comentario
interp1 Interpolación en una dimensión
inter2, inter3 Interpolación en dos y tres dimensiones
interpft Interpolación una dimensión fft.
mkpp Compone un spline a partir de propiedades
spline Genera splines cubicos
pchip Genera splines cúbico de Hermite
ppval Valor de un spline en puntos
unmkpp Propiedades de un spline
mmppint, mmppder Spline integral y derivada
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 198/215
Prácticas con funciones para interpolar datos
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 199/215
Datos:
>> x= 0 : 1 2 ; y= t a n ( p i ∗ x / 2 5 ) ;
>> x i= l i n s p a c e ( 0 , 1 2 , 1 0 0 ) ;
Interpola datos:
>> yp= s p l i n e ( x , y , x i ) ;
>> p l o t ( x , y , ’ o ’ , x i , yp ) ;
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 200/215
Prácticas splines, Cscript3.m (II)
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 201/215
Función Comentario
meshgrid Mallado de dos o tres dimensiones
ndgrid Mallado de dimensión n
surf, mesh Dibuja superficies y mallados
slide Dibuja cortes dentro de un volumen
griddata Interpolación una superficie
griddata3 Interpolación una hipersuperficie, datos orden 3
griddatan Interpolación una hipersuperficie, datos orden n
interpn Interpolación en n dimensiones
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 202/215
Prácticas para interpolar superficies e hiperplanos, Cscript5.m
Z real e interpolada:
>> Z = X2 . ∗ e x p (−X1 . ˆ 2 −X2 . ˆ 2 ) ;
>> Z i = g r i d d a t a ( X1 , X2 , Z , Xi1 , X i 2 )
>> s u b p l o t ( 2 , 1 , 1 ) ; mesh ( X1 , X2 , Z ) ;
>> s u b p l o t ( 2 , 1 , 2 ) ; mesh ( Xi1 , Xi2 , Z i ) ;
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 203/215
Tiempo = [0, 1, 2, 3, 4, 5]
Temperaturas = [0, 20, 60, 68, 77, 110]
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 204/215
Contenidos
1 Introducción
2 Programación con Matlab
3 Optimización del código de programación
4 Gráficas en dos y tres dimensiones
5 Programación orientada a objetos
6 Simulación en Matlab y Simulink
7 GUIDE: Interface gráfico de matlab
8 Funciones para tratamiento de datos
9 Funciones para álgebra de matrices
10 Filtros y análisis en frecuencia
13 Bibliografı́a
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 205/215
Función Comentario
fplot Dibuja la función
fminbnd Minimiza función con una variable con restricciones
fminsearch Minimiza función con varias variables
fzero Encuentra el cero en función con una variable
optimset, optimget Parámetros de resolución
quad Integración numérica, Simpson
quadl Integración numérica, Lobatto
dblquad Integración numérica, doble integral
triplequad integración numérica, triple integral
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 206/215
Prácticas funciones de optimización, Dscript1.m (I)
Parámetros de la optimización:
>> h e l p o p t i m s e t
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 207/215
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 208/215
Prácticas funciones de optimización, Dscript1.m (III)
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 209/215
Integral simple:
>> quad ( humps , −1, 2 ) %I n t e g r a c i ó n s i m p l e
>> q u a d l ( humps , −1, 2 ) %I n t e g r a c i ó n , mayor e x a c t i t u d
Integral doble:
>> o u t= @( x , y ) y ∗ s i n ( x ) + x ∗ c o s ( y ) ;
>> xmin= p i ; xmax= 2∗ p i ; ymin= 0 ; ymax= p i ;
>> r e s u l t = d b l q u a d ( out , xmin , xmax , ymin , ymax )
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 210/215
Optimización con restricciones: Funciones peso
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 211/215
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 212/215
Prácticas con funciones de optimización (II)
xdata = [3,6, 7,7, 9,3, 4,1, 8,6, 2,8, 1,3, 7,9, 10,0, 5,4]
ydata = [16,5, 150,6, 263,1, 24,7, 208,5, 9,9, 2,7, 163,9, 325,0, 54,3]
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 213/215
Contenidos
1 Introducción
2 Programación con Matlab
3 Optimización del código de programación
4 Gráficas en dos y tres dimensiones
5 Programación orientada a objetos
6 Simulación en Matlab y Simulink
7 GUIDE: Interface gráfico de matlab
8 Funciones para tratamiento de datos
9 Funciones para álgebra de matrices
10 Filtros y análisis en frecuencia
13 Bibliografı́a
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 214/215
Bibliografı́a
A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programación en Matlab y Simulink Curso 2010/2011 215/215