% Esercitazione Fondamenti di Automatica
% 
% Sistema Massa-Molla-Smorzatore
% Richiama il file: mms_sim.m (Matlab 4.xx) 
%                 o mms_sim.dml (Matlab 5.xx)
%
% (ultima modifica 19/03/99)
%
% 1-) EVOLUZIONE LIBERA 
%     caso smorzamento elevato (due aut. reali distinti)
%     caso smorzamento basso (coppia aut. c.c.)
%     caso smorzamento nullo (coppia aut. immaginari puri)
% 2-) EVOLUZIONE FORZATA (risposta indiciale)
%     caso smorzamento elevato (due aut. reali distinti)
%     caso smorzamento basso (coppia aut. c.c.)
%     caso smorzamento nullo (coppia aut. immaginari puri)
% 3-) EVOLUZIONE LIBERA + FORZATA AL GRADINO
%     per diverse condizioni iniziali

clc
clear all
close all

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%    EVOLUZIONE LIBERA      %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

g=0;  % moltiplica l'ingresso a gradino nello schema Simulink

echo on
% Evoluzione libera
% Caso smorzamento elevato (due aut. reali distinti)

echo off

m = 3;
k = 12;
mu = 15;

A = [0, 1; -k/m, -mu/m];
autovalori = eig(A)
B = [0; 1/m];
C = [1, 0];        % l'uscita corrisponde alla posizione relativa del carrello

% Condizione iniziale

x0 = [0.1; 0];

mms_sim

echo on

% LANCIARE LA SIMULAZIONE DALLO SCHEMA SIMULINK

echo off
pause

t1=t;
y1=yout;

tt=0:0.1:10;
plot(t1,0.1*exp(-t1),'r',t1,0.1*exp(-4*t1),'b',t1,y1,'y'),grid
title('Confronto tra uscita e andamenti relativi ai modi naturali')
pause

clc
echo on
% Evoluzione libera
% Caso smorzamento basso (coppia aut. c.c.), varia solo lo smorzamento

echo off

m = 3;
k = 12;
mu = 5;
A = [0, 1; -k/m, -mu/m];
autovalori = eig(A)
B = [0; 1/m];
C = [1, 0];

% Condizione iniziale

x0 = [0.1; 0];

mms_sim

echo on

% LANCIARE LA SIMULAZIONE DALLO SCHEMA SIMULINK

echo off
pause

clc
echo on
% Evoluzione libera
% Caso smorzamento nullo (coppia aut. immaginari puri)

echo off

m = 3;
k = 12;
mu = 0;
A = [0, 1; -k/m, -mu/m];
autovalori = eig(A)
B = [0; 1/m];
C = [1, 0];

% Condizione iniziale

x0 = [0.1; 0];

mms_sim

echo on

% LANCIARE LA SIMULAZIONE DALLO SCHEMA SIMULINK

echo off
pause

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%    EVOLUZIONE FORZATA     %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

clc
clear all
close all

g =1; % moltiplica l'ingresso a gradino nello schema Simulink

echo on
% Risposta indiciale
% Caso smorzamento elevato (due aut. reali distinti)

echo off

m = 3;
k = 12;
mu = 15;
A = [0, 1; -k/m, -mu/m];
autovalori = eig(A)
B = [0; 1/m];
C = [1, 0];
x0 = [0; 0];

mms_sim

echo on

% LANCIARE LA SIMULAZIONE DALLO SCHEMA SIMULINK

echo off
pause

t1=t;
y1=yout;

clc
echo on
% Risposta indiciale
% Caso smorzamento basso (coppia aut. c.c.)

echo off

m = 3;
k = 12;
mu = 5;
A = [0, 1; -k/m, -mu/m];
autovalori = eig(A)
B = [0; 1/m];
C = [1, 0];
x0 = [0; 0];

mms_sim

echo on

% LANCIARE LA SIMULAZIONE DALLO SCHEMA SIMULINK

echo off
pause

t2=t;
y2=yout;

clc
echo on
% Risposta indiciale
% Caso smorzamento nullo (coppia aut. immaginari puri)

echo off

m = 3;
k = 12;
mu = 0;
A = [0, 1; -k/m, -mu/m];
autovalori = eig(A)
B = [0; 1/m];
C = [1, 0];
x0 = [0; 0];

mms_sim

echo on

% LANCIARE LA SIMULAZIONE DALLO SCHEMA SIMULINK

echo off
pause

plot(t1,y1,t2,y2), grid
title('Risposte indiciali nei casi di stabilità asintotica')

pause

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%             Risposta in uscita del sistema              %
%               Massa-Molla-Smorzatore                    %
% con ingresso a gradino e condizioni iniziali non nulle  %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% caso smorzamento elevato (due aut. reali distinti)
% al variare di x0 


clc
close all
clear all

% Valori numerici dei parametri

m = 3;
k = 2;
mu = 5;

% Matrici del sistema

A = [0, 1; -k/m, -mu/m];

echo on
% Evoluzione in uscita corrispondente
% ad un ingresso a gradino unitario
% e condizioni iniziali diverse

echo off

autovalori= eig(A)

B = [0; 1/m];
C = [1, 0];

t=0:0.01:15;

u=1+0*t;     % Ingressso a gradino unitario

% Calcolo del guadagno del sistema

Guadagno = dcgain(A,B,C,0)

% Diverse condizioni iniziali

x01 = [0.1; -0.1];
x02 = [0.0; 0.1];
x03 = [-0.05; -0.2];

% Calcolo delle evoluzioni corrispondenti

[y1,x1]=LSIM(A,B,C,0,u,t,x01);
[y2,x2]=LSIM(A,B,C,0,u,t,x02);
[y3,x3]=LSIM(A,B,C,0,u,t,x03);


plot(t,y1,t,y2,t,y3), grid
title('Risposta in uscita ingresso a gradino al variare di x0')


