Esercizio MATLAB FSDI Parte: BodeNyquist
num = conv([1 -10],[1 +3])
num = conv([-40/3], num);
denom = conv([1 10],[1 0.2 0.01]);
denom = conv(denom, [1 4 400]);
sys = tf(num, denom);
start(sys);
Start.m
function ex1 = start(sys)
plotDiag(sys); % Disegno i diagrammi di Bode e Nyquist
isu = calculate_isu(sys); % Calcolo l'isu del sistema
stable = ~calcStab(isu); % Controllo se il sistema è stabile
if (stable)
disp("Il sistema è stabile");
end
reach = calcReach(isu);
if (reach)
disp("Il sistema è raggiungibile");
end
obs = calcObs(isu);
if (obs)
disp("Il sistema è osservabile");
end
end
function isu = calculate_isu(sys)
isu = ss(sys);
end
function reach = calcReach(sys)
matrix_size = size(sys.A);
reachabilityMatrix = zeros(matrix_size);
reach = true;
for k = 1:matrix_size
reachabilityMatrix(:,k) = ((sys.A)^(k-1)) * sys.B;
end
if (det(reachabilityMatrix) == 0)
reach = false;
end
end
function stability = calcStab(sys)
y = eig(sys.A);
k = 1;
found_positive_real = false;
while (k < length(y) && ~found_positive_real)
if (real(y(k)) > 0)
found_positive_real = true;
end
k = k + 1;
end
stability = found_positive_real;
end
function osservability = calcObs(sys)
matrix_size = size(sys.A);
osservability_matrix = zeros(matrix_size);
osservability = true;
for k = 1:matrix_size
osservability_matrix(:,k) = sys.C * ((sys.A)^(k-1));
end
if (det(osservability_matrix) == 0)
osservability = false;
end
end
function plot_diagrams = plotDiag(sys)
figure(1);
title "Bode Diagram";
bode(sys);
grid;
figure(2);
title "Nyquist Diagram";
nyquist(sys);
grid;
end
II Parte
sysResp.m
num = [1 -1 -11];
denom = conv([1 1],[1 2]);
fdt = tf(num, denom);
t = 0:0.1:10;
u = exp(-5*t) - cos(10*t) - 2;
lsim(fdt, u, t)
III Parte
ex_3.m
h = 0:0.5:5
for k = 1:length(h)
A = [h(k)-2 +1; 0 h(k)-1];
[isStable, isInstable, isAstable] = calcStab(A);
disp("Per il valore h = " + h(k));
if (isStable)
disp("Il sistema è stabile");
elseif (isAstable)
disp("Il sistema è Asintoticamente Stabile");
else
disp("Il sistema è instabile");
end
end
function [stab, instab, Astab] = calcStab(A)
autovettori = eig(A);
k = 1;
stable = false;
AsintoticallyStable = true;
Instable = false;
while (k < length(autovettori) & ~Instable)
if (real(autovettori(k)) > 0)
stable = false;
endif
-
Taratura PID, esercizio con codice MATLAB
-
Esercizio trasformata
-
Esercizio elettrostatica
-
Esercizio cinematica