Documentos de Académico
Documentos de Profesional
Documentos de Cultura
INDUSTRIAL
EJERCICIOS OPTIMIZACIÓN
ALUMNO:
MARCELO ALEJANDRO ALVAREZ LUNA
FECHA:
15 – 02 – 2019
Contenido
1. Identificación de un sistema dinámico discreto de 2º orden. ........................................................ 1
2. Identificación de un sistema dinámico continuo ............................................................................ 6
3. Diseñar un modelo de predicción de k+3 para el ejercicio 1 .......................................................... 8
4. Diseñar un PID para un proceso continuo utilizando optimización. ............................................ 11
EJERCICIOS OPTIMIZACIÓN
- Crear un modelo de fdt discreta estable. Hacer experimento con step y añadir ruido de medida
Utilizar toolbox para identificar los parámetros
0.15(𝑧 − 0.3)
𝑔𝑧 =
(𝑧 − 0.9)(𝑧 − 0.6)
FDT discreta propuesta en polos y ceros
0.15𝑧 − 0.045
𝑔𝑧 =
𝑧 2 − 1.5𝑧 + 0.54
FDT discreta propuesta polinomial
Se ha obtenido la respuesta frente al escalón unitario y se ha agregado ruido para conseguir una salida
próxima a la realidad:
1
Una vez obtenido los valores del sistema dinámico de segundo orden se procede a realizar la función
objetivo la cual ayudará realizar la identificación.
Se debe realizar la llamada a la función fminunc propia del toolbox de optimización (Optimtool) de Matlab
de la siguiente manera:
thz=fminunc(@Jzrecta_step,[-1,1,1,0]); %[c,d,a,b]
a∗𝑧+b
𝑔𝑧 =
𝑧2 +c∗𝑧+d
Al ejecutar el algoritmo de optimización regresa el vector thz con los parámetros a,b,c y d los cuales serán
utilizados para formar la función de transferencia de la siguiente manera:
gzh=tf(thz(end/2+1:end),[1,thz(1:end/2)],1);
yzh=step(gzh,length(yz)-1);
figure
plot([yz,yzh],'x')
legend('Datos del experimento','FDT identificada');
0.038495(𝑧 − 4.327)
𝑔𝑧 =
(𝑧 − 0.9066)(𝑧 − 0.1664)
FDT discreta identificada en polos y ceros
0.038495𝑧 + 0.1666
𝑧=
𝑧 2 − 1.073𝑧 + 0.1508
FDT discreta identificada polinomial
Para el presente caso se ha obtenido el valor de la función de coste la cual es J=0.0051 siendo este un
valor muy pequeño por lo que se puede concluir que la identificación ha sido exitosa con los valores
experimentales.
En la Figura 2 se ha graficado los datos del experimento versus la función de transferencia identificada
mediante la función fminunc.
2
Figura 2 Datos experimentales vs FDT identificada
3
De igual manera se puede generar la señal pseudoaleatoria utilizando la función idinput propia del Matlab
que nos devolverá un vector según los parámetros que se ingresen.
Una vez que se ha obtenido la señal pseudoaleatoria se procede a evaluar la función de transferencia
frente a esta señal.
%Función de transferencia
z=tf('z',1);
gz=0.15*(z-0.3)/((z-0.9)*(z-0.6));
[nz,dz]=tfdata(gz,'v');
yz=dlsim(nz,dz,xz); %respuesta ante pseudoaleatoria
ym=max(yz);
yz=yz+0.1*ym*(rand(size(yz))-0.5); %Añade ruido aleatorio a la salida
figure
plot([xz',yz],'x'); %Visualización experimento
legend('PRBS','Respuesta del sistema');
4
Con los valores obtenidos frente a la señal pseudoaleatoria se procede a evaluar el algoritmo de
minimización:
0.14685(𝑧 − 0.2917)
𝑔𝑧 =
(𝑧 − 0.8981)(𝑧 − 0.6121)
FDT discreta identificada en polos y ceros
0.1468𝑧 − 0.04283
𝑧=
𝑧 2 − 1.51𝑧 + 0.5497
FDT discreta identificada polinomial
Se debe tener en cuenta que el valor de la función de coste obtenida ha sido J=2.8208e-04 siendo este un
valor de error mucho mas pequeño que el obtenido al utilizar como entrada al sistema el escalón unitario,
por ende se puede concluir que la entrada pseudoaleatoria nos da como resultado una mejor
identificación, esto se puede corroborar igualmente en la Figura 5 donde se ha evaluado frente al escalón
unitario la respuesta del sistema original y el sistema identificado, siendo estas muy parecidas.
5
2. Identificación de un sistema dinámico continuo
5
𝑔𝑠 =
𝑠2
+ 1.5𝑠 + 4.5
FDT continua propuesta
Se ha obtenido la respuesta frente al escalón unitario y se ha agregado ruido para conseguir una salida
próxima a la realidad:
Una vez obtenido los valores del sistema dinámico de segundo orden se procede a realizar la función
objetivo la cual ayudará realizar la identificación.
Código Jsrecta_recta:
function J=Jsrecta_step(th)
% Función de coste para ajuste a una recta.
% Los parámetros de la recta se pasan en th
% Los datos del eperimento se pasan mediante var globales
global xs ys t fcoste
N=length(ys);
gs=tf(th(1),[1,th(2:end)]);
ysh=step(gs,t);
e=ys-ysh;
J=e'*e/N;
fcoste=J;
Se debe realizar la llamada a la función fminunc propia del toolbox de optimización (Optimtool) de Matlab
de la siguiente manera:
ths=fminunc(@Jsrecta_step,[1,1,1]); %[a,b,c]
6
Los parámetros a, b y c se encuentran parametrizados de la siguiente manera en la función de
transferencia del modelo continuo:
a
𝑔𝑠 =
𝑠2 +b∗𝑠+c
4.945
𝑔𝑠 =
𝑠 2 + 1.491𝑠 + 4.449
FDT continua identificada
Para el presente caso se ha obtenido el valor de la función de coste la cual es J=0.0017 siendo este un
valor muy pequeño por lo que se puede concluir que la identificación ha sido exitosa con los valores
experimentales.
En la Figura 7 se ha graficado los datos del experimento versus la función de transferencia identificada
mediante la función fminunc.
Con los valores obtenidos frente a la señal pseudoaleatoria se procede a evaluar el algoritmo de
minimización:
7
ysh=lsim(gs,xs,t);
e=ys-ysh;
J=e'*e/N;
fcoste=J;
5.049
𝑔𝑠 =
𝑠2
+ 1.513𝑠 + 4.519
FDT continua identificada
Se debe tener en cuenta que el valor de la función de coste obtenida ha sido J=1.3663e-06 siendo este un
valor de error mucho mas pequeño que el obtenido al utilizar como entrada al sistema el escalón unitario,
por ende se puede concluir que la entrada pseudoaleatoria nos da como resultado una mejor
identificación, esto se puede corroborar igualmente en la Figura 8 donde se ha evaluado frente al escalón
unitario la respuesta del sistema original y el sistema identificado, siendo estas muy parecidas.
Se debe considerar para este tipo de modelos de predicción que las entradas para identificar cada uno de
los instantes desplazados sean diferentes de esta manera se podrá corroborar la correcta identificación
del sistema.
8
Figura 9 Entradas pseudoaleatorias para identificar el sistema
Se ha evaluado el sistema frente a la entrada pseudoaleatoria xz1 y se le ha agregado ruido aleatorio para
tener una salida cercana a la realidad.
Para el modelo de predicción de k+3 se debe considerar que la primera predicción 𝑦𝑘+1 utiliza la
información disponible hasta el instante k y las entradas que se aplicarán en el futuro, de hecho para la
predicción k+1 solo se necesita información que esta disponible en el instante k.
Se ha usado la matriz de regresores para identificar el instante 𝑦𝑘+1 de la siguiente manera:
%% Matriz de regresores y minimización
R1=[-yz(2:end-1), -yz(1:end-2), xz2(2:end-1), xz2(1:end-2)];
Y1= yz(3:end);
th1=R1\Y1;
yzk1=R1*th1;
9
Una vez que se ha obtenido el primer modelo de predicción se hará uso de la función fminunc para seguir
con el instante 𝑦𝑘+2
function J=Jprediccion2(th)
global xz3 yz N yzk1 fcoste2
yjk2 = th(1)*yzk1(1:end) + th(2)*yz(2:end-1) + th(3)*xz3(3:end) + th(4)*xz3(2:end-1);
e=yz(3:end)-yjk2 ; %Error
J=e'*e/(length(yz)-2);
fcoste2 = J;
Al utilizar diferentes entradas para los modelos de predicción y obtener salidas muy parecidas se puede
visualizar que el algoritmo está cumpliendo su función (Figura 11), cabe destacar que el error irá
aumentando mientras se desee predecir instantes mas alejados del original (Figura 12).
10
4. Diseñar un PID para un proceso continuo utilizando optimización.
- Comenzar definiendo una función objetivo para la respuesta del sistema en bucle cerrado (una
posibilidad es utilizar un modelo de referencia)
Para el presente ejercicio se ha utilizado la siguiente función de transferencia que será el modelo de la
planta a ser controlada:
1.249
𝑔𝑝 =
𝑠2 + 0.9844𝑠 + 1.249
2
𝑔𝑚 =
𝑠2 + 0.9844𝑠 + 2
Como se puede observar en la Figura 13 lo que se busca es que el comportamiento de la planta en lazo
cerrado siga al modelo de referencia.
1
𝑃𝐼𝐷 = 𝑘𝑝 (1 + + 𝑇𝑑 ∗ 𝑠)
𝑇𝑖 ∗ 𝑠
𝑘𝑝
𝑃𝐼𝐷 = 𝑘𝑝 + + 𝑘𝑝 ∗ 𝑇𝑑 ∗ 𝑠
𝑇𝑖 ∗ 𝑠
𝑘𝑖
𝑃𝐼𝐷 = 𝑘𝑝 + + 𝑘𝑑 ∗ 𝑠
𝑠
𝑘𝑑 ∗ 𝑠 2 + 𝑘𝑝 ∗ 𝑠 + 𝑘𝑖
𝑃𝐼𝐷 =
𝑠
11
Al igual que en los apartados anteriores y para obtener una mejor identificación de los parámetros del
controlador se ha utilizado una señal pseudoaleatoria como señal de entrada a los sistemas.
Con los valores obtenidos frente a la señal pseudoaleatoria se procede a evaluar el algoritmo de
minimización:
function J=parametroscontrolador(th)
global xs ym yp t gp
s=tf('s');
gc=tf(th(1:end/1),[1 0]);
gt=feedback(series(gc,gp),1);
ysh=lsim(gt,xs,t);
e=ym-ysh;
J=e'*e/length(xs);
Como se puede observar en la Figura 14 el controlador obtenido intenta seguir al modelo de referencia,
si bien es cierto no se ajusta totalmente al modelo requerido evita que el sistema tenga un sobre impulso
demasiado grande y logra llegar a la referencia establecida.
12