Files
Laboratori-controlli-automa…/Lab05.m
2024-05-28 17:33:09 +02:00

57 lines
1.2 KiB
Matlab

%% Setup variabili
A = [0 1; -3 -4];
B = [0 ; 1];
C = [2 1];
D = 0;
%% Punto 1-2
lambda_k = [-0.7 -0.8];
lambda_o = [-10 -11];
% Controllo raggiungibilità
M_R = ctrb(A,B);
rank(M_R)
% Rango 2: completamente raggiungibile
% Controllo osservabilità
M_O = obsv(A,C);
rank(M_O)
% Rango 2: completamente osservabile
% Calcolo K
K = place(A,B,lambda_k);
% Calcolo L
L = place(A',C',lambda_o)';
% Calcolo alpha
alpha = inv(-C*((A-B*K)\B));
%% Punto 3
% (Su simulink) Si osserva che l'uscita del sistema tende ad 1
%% Punto 4
lambda_k_4 = [-10 -12];
K_4 = place(A,B,lambda_k_4);
alpha_4 = inv(-C*((A-B*K_4)\B));
% Si osserva che con autovalori troppo elevati il sistema converge lo stesso, ma
% all'inizio si osserva un transitorio con valori troppo grandi (più sono grandi gli autovalori, più
% l'errore cresce)
% Con questa tecnica non riesco a controllare il sistema velocemente per
% via dello zero nella H(s)
minreal(zpk(ss(A,B,C,D)))
%% Punto 5
% Nota: ripristinare gli autovalori del punto 1.
epsilon = 10.^(-2/20);
B_reale = B.*epsilon;
% Osserviamo che il sistema "reale" (con la perturbazione) è instabile.
%% Punto 6
lambda_o_6 = [-1000 -1100];
L_6 = place(A',C',lambda_o_6)';
%% Punto 7
lambda_o_7 = [-1000 -2];
L_7 = place(A',C',lambda_o_7)';