%% Modelado de sistemas inciertos como modelos politópicos para control planificación de ganancia
% ©2020, Antonio Sala Piqueras, Universitat Politécnica de València. Todos los derechos reservados.
% Presentación en vídeo: http://personales.upv.es/asala/YT/V/modelgs.html
% Este código funcionó correctamente con Matlab R2020a, Sedumi1.3, YalmipR20200116 (via tbxmanager)
% Objetivo:
% Revisar cómo un modelo con parámetros inciertos puede considerarse como un sistema politópico y cómo calcular los coeficientes de interpolación en planificación de ganancia.
%% Ejemplo de modelado

Abase = [-1.2  -0.5  1.2   0; ...
    -1.1   -0.9    0.8   -0.2;...
    -0.6    0.7   -1.2   -0.6;...
    -1.1   -0.4   -0.4   -1.6];
Amul1 =... %lo que multiplica a theta_1
    [0    -1     0     0;...
    0     0     0     0;...
    0     1     0     0;...
    0     0     0     0];
Amul2 =... %lo que multiplica a theta_2
    [0     0     0     0;...
    0     0     0     0;...
    -1    -1     1     0;...
    0     0     1     0];
Amul3 = ... %lo que multiplica a theta_3
    [-1     0     0     1;...
    1    -1     1    -1;...
    0     0     0     0;...
    0     0     1     1];

syms theta_1 theta_2 theta_3 real
Asym=vpa(Abase+Amul1*theta_1+Amul2*theta_2+Amul3*theta_3,3)
Bbase=[2.5    0.3   -1.4   -1.3]';
Bmul1=[ -0.4  0  -2.2  -1.4]';%lo que multiplica a theta_1
Bmul2=[1.3  2.1  0.7  -0.3]';%lo que multiplica a theta_2
Bmul3=[-0.4 -0.4  0.3  -0.7]';%lo que multiplica a theta_3
Bsym=vpa(Bbase+Bmul1*theta_1+Bmul2*theta_2+Bmul3*theta_3,3)

% Supondremos que \theta_1(x,t), \theta_2(x,t) o \theta_3(x,t) son bien no linealidades o bien parámetros que varían en los rangos conocidos siguientes:

th1_rango=[-.2 .2]; th2_rango=[-.5 .5]; th3_rango=[-0.3 0.3];

% Ejemplo: \theta_1(x)=0.2\sin(x_1-x_2^2), \theta_2(x)=e^{-x_3^2}-0.5, \theta_3(t) una variable externa que influye de forma "producto por estados" en el proceso, medible (si influyera "aditivamente" sería una entrada de tipo "perturbación").
%
% Calculemos los 8 modelos vértice:

conta=0;
for k1=1:2
  for k2=1:2
     for k3=1:2
        conta=conta+1;
        A{conta}=Abase+Amul1*th1_rango(k1)+Amul2*th2_rango(k2)+Amul3*th3_rango(k3);
        B{conta}=Bbase+Bmul1*th1_rango(k1)+Bmul2*th2_rango(k2)+Bmul3*th3_rango(k3);
     end
  end
end
r=length(A); N=size(A{1},1);

% Fórmula de los interpoladores h_i a partir de parámetros conocidos:
% Si conociésemos el valor de los tres parámetros \theta_1, \theta_2 y \theta_3, se podrían calcular de forma muy sencilla los interpoladores \alpha_{k_1}, \beta_{k_2}, \gamma_{k_3} con k_1\in\{1,2\}, k_2\in\{1,2\}, k_3\in\{1,2\} tal que:
% \theta_1=\alpha_{1}*(-0.2)+\alpha_{2}*(0.2), \alpha_1+\alpha_2=1;
% \theta_2=\beta_{1}*(-0.5)+\beta_{2}*(0.5), \beta_1+\beta_2=1;
% \theta_3=\gamma_{1}*(-0.3)+\gamma_{2}*(0.3), \gamma_1+\gamma_2=1.
% Con ellos, siguiendo el mismo orden que en el bucle "for k1 ... for k2 ... for k3" de arriba, se puede probar que los interpoladores del modelo politópico son:
% h_1=\alpha_1\beta_1\gamma_1, h_2=\alpha_1\beta_1\gamma_2, h_3=\alpha_1\beta_2\gamma_1, h_4=\alpha_1\beta_2\gamma_2,
% h_5=\alpha_2\beta_1\gamma_1, h_6=\alpha_2\beta_1\gamma_2, h_7=\alpha_2\beta_2\gamma_1, h_8=\alpha_2\beta_2\gamma_2
% En efecto... usando la symbolic toolbox con b_1=2.5-0.4\theta_1+1.3\theta_2-0.4\theta_3, resulta:

syms alpha_1 alpha_2 beta_1 beta_2 gamma_1 gamma_2 real
th1=alpha_1*th1_rango(1)+alpha_2*th1_rango(2);
th2=beta_1*th2_rango(1)+beta_2*th2_rango(2);
th3=gamma_1*th3_rango(1)+gamma_2*th3_rango(2);
b1=2.5-0.4*th1+1.3*th2-0.4*th3
tambienb1=(alpha_1+alpha_2)*(beta_1+beta_2)*(gamma_1+gamma_2)*2.5 ...
      -0.4*th1*(beta_1+beta_2)*(gamma_1+gamma_2)+1.3*(alpha_1+alpha_2)*th2*(gamma_1+gamma_2) ...
      -0.4*(alpha_1+alpha_2)*(beta_1+beta_2)*th3;
vpa(expand(tambienb1))

% que coincide con los vértices de ese elemento de B calculados en el triple "for" anidado:

[B{1}(1) B{2}(1) B{3}(1) B{4}(1) B{5}(1) B{6}(1) B{7}(1) B{8}(1)]

% Se plantean, pues, dos posibilidades con este modelo:
% 1) que los parámetros sean desconocidos y, por tanto, el controlador no pueda depender de ellos u=-Fx, control robusto.
% 2) que los parámetros sean conocidos y, por tanto, se puedan calcular los \alpha, \beta, \gamma  y consecuentemente los h, y que  se pueda hacer un controlador u=-\left(\sum_{i=1}^8 h_i(t)\cdot F_i\right)\cdot  x, que se conoce como control con planificación de ganancia, dado que como  h depende de los \theta se puede interpretar el control como u=-F(\theta_1,\theta_2,\theta_3)x.
%
% *Nota: también existen posibilidades intermedias, donde algún parámetro sea conocido y otros no, que por brevedad/simplicidad no se abordan aquí.
%