57 lines
1.2 KiB
Matlab
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)'; |