martedì 21 gennaio 2014

Codice utile Matlab

CONTROLLO OTTIMO INTEGRALE


CASO CONTINUO:
qi = 500;
n = length(A);

Ai = [A zeros(n,1); C 0];
Bi = [B; 0];
Qi = [C'*Q*C zeros(n,1); zeros(1,n) qi];
[Si,Ei,Ki] = care(Ai,Bi,Qi,R);
K = Ki(1:n);
H = Ki(n+1);

CASO DISCRETO:
qi = 500;
n = length(A);
Ts = 0.1; % Ts è l'intervallo di campionamento.
Ai = [A zeros(n,1); Ts*C 1];
Bi = [B; 0];
Qi = [C'*Q*C zeros(n,1); zeros(1,n) qi];
[Si,Ei,Ki] = dare(Ai,Bi,Qi,R);
K = Ki(1:n);
H = Ki(n+1);

STIMA DEL SISTEMA
Ts = time(2)-time(1); %Calcolo del periodo di campionamento
Q1 = [];
Q2 = [];
n = 2; %ordine del sistema
for i=0:length(y)-(n+1)
    Q1=[Q1; y(i+n:-1:i+1)'];
    Q2=[Q2; u(i+n:-1:i+1)'];
end
Q = [Q1, Q2];
y1 = y(n+1:end);

alpha = pinv(Q)*y1;

A1 = [1 -alpha(1:n)'];
B1 = [alpha(n+1:2*n)'];

G1 = tf(B1,A1,Ts)

Nessun commento:

Posta un commento