Compare commits

...

2 Commits

Author SHA1 Message Date
471544f1ad feat: Add simulink part of lab 3 2024-04-10 11:41:47 +02:00
ad6117ca8d fix: X variable of Lab03 2024-04-10 09:14:41 +02:00
4 changed files with 1345 additions and 8 deletions

28
.gitattributes vendored Normal file
View File

@@ -0,0 +1,28 @@
* text=auto
*.fig binary
*.mat binary
*.mdl binary diff merge=mlAutoMerge
*.mdlp binary
*.mex* binary
*.mlapp binary
*.mldatx binary
*.mlproj binary
*.mlx binary
*.p binary
*.sfx binary
*.sldd binary
*.slreqx binary merge=mlAutoMerge
*.slmx binary merge=mlAutoMerge
*.sltx binary
*.slxc binary
*.slx binary merge=mlAutoMerge
*.slxp binary
## Other common binary file types
*.docx binary
*.exe binary
*.jpg binary
*.pdf binary
*.png binary
*.xlsx binary

14
Lab03.m
View File

@@ -13,7 +13,7 @@ Ib = 15;
syms G beta I gamma r syms G beta I gamma r
f = [-p1*(G-Gb)-beta*G+gamma/VG, -n*I + r/V1, -p2*beta + p3*(I-Ib)]; f = [-p1*(G-Gb)-beta*G+gamma/VG, -n*I + r/V1, -p2*beta + p3*(I-Ib)];
g = G; g = G;
x = [G, beta, I]; x = [G, I, beta];
u = [r gamma]; u = [r gamma];
%% Calcolo punto di equilibrio %% Calcolo punto di equilibrio
@@ -28,7 +28,7 @@ I_eq = r_eq/(n*V1);
beta_eq = p3/p2 .* (I_eq - Ib); beta_eq = p3/p2 .* (I_eq - Ib);
G_eq = (gamma_eq/VG + p1*Gb)/(p1+beta_eq); G_eq = (gamma_eq/VG + p1*Gb)/(p1+beta_eq);
X_eq = [ G_eq I_eq beta_eq ]; x_eq = [ G_eq I_eq beta_eq ];
% Osserviamo che G_eq corrisponde al valore corretto di glicemia (81) % Osserviamo che G_eq corrisponde al valore corretto di glicemia (81)
%%% Soluzione con solver simbolico %%% Soluzione con solver simbolico
@@ -36,7 +36,7 @@ X_eq = [ G_eq I_eq beta_eq ];
% simbolico per risolvere il sistema di equazioni % simbolico per risolvere il sistema di equazioni
[G_eq, I_eq, beta_eq] = solve(subs(f,u,u_eq)==[0 0 0]); [G_eq, I_eq, beta_eq] = solve(subs(f,u,u_eq)==[0 0 0]);
% Il comando double calcola il valore delle frazioni % Il comando double calcola il valore delle frazioni
X_eq = double([ G_eq I_eq beta_eq ]) x_eq = double([ G_eq I_eq beta_eq ])
% Il risultato calcolato da MATLAB è identico a quello trovato a mano % Il risultato calcolato da MATLAB è identico a quello trovato a mano
@@ -50,13 +50,13 @@ X_eq = double([ G_eq I_eq beta_eq ])
% corrispondente valore nel punto di equilibrio % corrispondente valore nel punto di equilibrio
A = jacobian(f,x); A = jacobian(f,x);
A = double(subs(A,x,X_eq)); A = double(subs(A,x,x_eq));
B = jacobian(f,u); B = jacobian(f,u);
B = double(subs(B,u,u_eq)); B = double(subs(B,u,u_eq));
C = jacobian(g,x); C = jacobian(g,x);
C = double(subs(C,x,X_eq)); C = double(subs(C,x,x_eq));
D = jacobian(g,u); D = jacobian(g,u);
D = double(subs(D,u,u_eq)); D = double(subs(D,u,u_eq));
@@ -67,10 +67,10 @@ W = minreal(zpk(inv(s*eye(size(A))-A)));
%%% Stabilità interna %%% Stabilità interna
E = real(eig(A)) E = real(eig(A))
% Il sistema è instabile in quanto è presente un autovalore maggiore di zero % Il sistema è stabile perché tutti gli autovalori sono negativi
%%% Stabilità BIBO %%% Stabilità BIBO
H = C*W*B; H = C*W*B;
p = pole(H) p = pole(H)
% Il sistema non è stabile BIBO in quanto è presente un polo positivo % Il sistema + stabile BIBO in quanto tutti i poli sono negativi

BIN
Lab03.slx Normal file

Binary file not shown.

1309
Sim_pasto_50g.mdl Normal file

File diff suppressed because it is too large Load Diff