SlideShare a Scribd company logo
1 of 13
Download to read offline
Simulazione e analisi di un sistema lineare in MATLAB
Alessio Sechi
Università degli Studi di Roma "Tor Vergata"
alessio.sechi@students.uniroma2.eu
Abstract
Questo articolo presenta una simulazione di un sistema lineare utilizzando il software MATLAB. Il
sistema in oggetto è descritto da un'equazione differenziale lineare. Attraverso l'utilizzo di tecniche di
integrazione numerica, siamo stati in grado di ottenere e analizzare l'andamento delle variabili di stato
nel tempo. I risultati della simulazione mostrano come il sistema raggiunga uno stato stazionario nel
tempo, fornendo così una valutazione della sua stabilità. Il presente studio rappresenta un esempio di
come MATLAB possa essere utilizzato per simulare e analizzare sistemi lineari in diversi contesti.
Introduzione
La simulazione e l'analisi dei sistemi lineari sono ampiamente utilizzate nei campi dell'ingegneria, della
matematica applicata e della scienza dei controlli. In questo articolo, presentiamo una simulazione di un
sistema lineare utilizzando il noto software MATLAB. Il sistema in oggetto è descritto dalle equazioni
differenziali:
ẋ = Ax + Bu
y = Cx + Du
ove x rappresenta il vettore delle variabili di stato, u è il vettore d’ingresso e y è il vettore di uscita del
sistema. Le matrici A, B, C e D definiscono i parametri del sistema lineare.
L'obiettivo di questa simulazione è analizzare il comportamento del sistema in due differenti scenari:
• nel primo scenario, esamineremo il sistema partendo da uno stato iniziale non nullo, in
particolare, x0 = [1 0 1]′, ma con un ingresso identicamente nullo. Questo ci permetterà di
valutare il comportamento intrinseco del sistema e come le variabili di stato evolvono nel tempo
senza l'influenza di ingressi esterni;
• nel secondo scenario, investigheremo il sistema partendo da uno stato iniziale nullo, ma con un
ingresso variabile rappresentato da u(t) = [2 sin(3t) 1]′. Questo ci consentirà di osservare
l'effetto dell'ingresso variabile sulle variabili di stato e sull'uscita del sistema nel corso del
tempo.
La simulazione verrà condotta mediante l'utilizzo della funzione di integrazione numerica ode23, che
permette di ottenere una soluzione approssimata delle equazioni differenziali del sistema.
Attraverso questa analisi, intendiamo fornire una migliore comprensione del comportamento dei sistemi
lineari in diverse condizioni iniziali e di ingresso, e dimostrare l'utilità di MATLAB come strumento di
simulazione e analisi per tali sistemi.
Metodologia
Per simulare il sistema lineare descritto nelle equazioni differenziali sopra, abbiamo utilizzato la
funzione di integrazione numerica ode23. Questa funzione è appositamente progettata per risolvere
equazioni differenziali ordinarie (ODE) non rigide.
Il metodo ode23 utilizza un algoritmo a passo variabile (la lunghezza dei passi utilizzati per
approssimare la soluzione varia durante il processo di integrazione) basato su una combinazione di
metodi di ordine 2 e ordine 3 (combina due ordini di accuratezza). Questa strategia offre una buona
efficienza computazionale per ODE non rigide come quelle del nostro sistema lineare.
Abbiamo parametrizzato l’intervallo temporale di integrazione utilizzando le variabili t0 e tf, i cui
valori possono essere opportunamente assegnati.
Per il primo scenario, in cui lo stato iniziale x0 è non nullo, abbiamo impostato l'ingresso come una
funzione costante u(t) = 0. Ciò ci ha permesso di ottenere una simulazione del sistema nel tempo senza
alcun contributo dall'ingresso esterno.
Per il secondo scenario, in cui lo stato iniziale x0 è nullo e l'ingresso u è definito come u(t) =
[2 sin(3t) 1]′. Questo ci ha consentito di simulare il sistema con un ingresso variabile nel tempo.
Abbiamo utilizzato una funzione inline per definire l'ingresso u all'interno della chiamata della funzione
anonima passata a ode23.
Durante la simulazione, ode23 ha calcolato l'evoluzione delle variabili di stato x e, successivamente,
abbiamo calcolato l'uscita y.
Infine, abbiamo generato i grafici, in funzione del tempo, delle variabili di stato x, dell'ingresso u,
dell'uscita y, della relazione y1 rispetto a y2, e una rappresentazione tridimensionale dell'uscita y rispetto
al tempo.
Attraverso questa metodologia, siamo stati in grado di analizzare in dettaglio il comportamento del
sistema lineare nei due scenari specificati e ottenere una migliore comprensione delle sue dinamiche nel
tempo.
Matrici di coefficienti del sistema
A = [
−0.5 0 1
0 −2 0.2
0 −0.2 −2
] ; B = [
1 0
0 0
−1 1
]
C = [
1 0 0
0 1 −1
] ; D = [
0 0
0 0
]
Codice implementativo
%% Simulazione strutturata del sistema
%% Pulizia
clear all;
close all;
clc;
%% Scelta del caso di cui si vuole vedere la risposta del sistema
global scelta;
scelta = input('Inserisci 1 per simulare il primo caso o 2 per simulare il secondo caso: ');
while scelta ~= 1 && scelta ~= 2
disp('Input non valido. Devi inserire solo 1 o 2.');
scelta = input('Reinserisci 1 o 2: ');
end
%% Parametri e condizioni iniziali
if scelta == 1
x_0 = [1 0 1]';
elseif scelta == 2
x_0 = [0; 0; 0];
end
t0 = 0;
tf = 15;
%% Matrici del sistema
A=[-0.5 0 1; 0 -2 0.2; 0 -0.2 -2];
B=[1 0; 0 0; -1 1];
C=[1 0 0; 0 1 -1];
D=[0 0; 0 0];
%% Calcolo della soluzione
% Funzioni anonime
u = @(t,x) ingresso(t,x);
f = @(t,x) dinamica(t,x,u,A,B);
sol = ode23(f,[t0 tf],x_0);
%% Raffinamento e calcolo dell'uscita
% ode23 in generale da soluzioni con punti abbastanza sparsi, quindi
occorre raffinare la soluzione
Npunti = 300;
tempi = linspace(t0,tf,Npunti);
xFine = deval(sol,tempi);
% Calcolo di un valore dell'uscita per conoscere il numero di righe della matrice y
tt0 = tempi(1);
xx0 = xFine(:,1);
uu0 = u(tt0,xx0);
yTest = h(tt0,xx0,uu0,C,D);
Nuscite = size(yTest,1);
% Calcolo di un valore dell'ingresso per conoscere il numero di righe della matrice u
uTest = ingresso(tt0,xx0);
Ningressi = size(uTest,1);
% Calcolo dell'uscita y e dell'ingresso u
yFine = zeros(Nuscite,Npunti);
u_values = zeros(Ningressi,Npunti);
for hh = 1:Npunti
tt = tempi(hh);
xx = xFine(:,hh);
uu = u(tt,xx);
u_values(:,hh) = u(tt,xx);
yFine(:,hh) = h(tt,xx,uu,C,D);
end
%% Visualizzazione
% Visualizzazione grafico di x rispetto al tempo
figure(1);
plot(tempi,xFine);
xlabel("t");
ylabel("x");
title("Stato x vs tempo t");
% Visualizzazione grafico di u rispetto al tempo
figure(2);
plot(tempi,u_values);
xlabel("t");
ylabel("u");
title("Ingresso u vs Tempo t");
% Visualizzazione grafico di y rispetto al tempo
figure(3);
plot(tempi,yFine);
xlabel("t");
ylabel("y");
title("Uscita y vs Tempo t");
% Visualizzazione grafico di y1 rispetto a y2
figure(4);
plot(yFine(1,:),yFine(2,:));
xlabel("y_1");
ylabel("y_2");
title("y_1 vs y_2");
% Visualizzazione grafico di y rispetto al tempo in 3D
figure(5);
plot3(tempi,yFine(1,:),yFine(2,:));
xlabel("t");
ylabel("y_1");
zlabel("y_2");
title("Uscita y vs Tempo t");
%% Funzioni
% Dinamica del sistema
function dxdt=dinamica(t,x,u,A,B)
u = ingresso(t,x);
dxdt = A*x+B*u;
end
% Ingresso del sistema
function u=ingresso(t,x)
global scelta;
if scelta == 1
u = [0;0];
elseif scelta == 2
u = [2*sin(3*t); 1];
end
end
% Uscita del sistema
function y=h(t,x,u,C,D)
y = C*x+D*u;
end
Di seguito sono presentate alcune righe di codice che richiedono una breve spiegazione.
u = @(t,x) ingresso(t,x);
• u è il nome della variabile che contiene la funzione anonima;
• @ indica che si sta definendo una funzione anonima;
• t e x sono gli argomenti della funzione.
La funzione anonima u prende due valori, t e x, e restituisce il valore della funzione ingresso valutata
in t e x.
Le funzioni anonime sono funzioni definite in modo breve e conciso senza assegnare loro un nome.
Queste funzioni sono definite in linea (inline) e possono essere passate come argomenti ad altre funzioni
o salvate in variabili.
sol = ode23(f,[t0 tf],x_0);
• f è la funzione anonima definita in precedenza;
• [t0 tf] è l'intervallo temporale di integrazione;
• x_0 è il vettore delle condizioni iniziali che indicano i valori delle variabili al tempo iniziale t0.
tempi = linspace(t0,tf,Npunti);
La funzione linspace restituisce un vettore di Npunti equispaziati tra t0 e tf.
xFine = deval(sol,tempi);
• sol è la struttura contenente i risultati della soluzione delle equazioni differenziali;
• tempi è il vettore descritto sopra.
La funzione deval svolge l'interpolazione tra i punti temporali della soluzione sol per calcolare i valori
delle soluzioni nei tempi specificati in tempi. L'interpolazione permette di ottenere una stima precisa
delle soluzioni nei punti desiderati anche se questi tempi non corrispondono esattamente ai tempi discreti
usati durante la risoluzione numerica delle ODE.
xx0 = xFine(:,1);
La variabile xx0 viene impostata uguale alla prima colonna del vettore xFine. Questo rappresenta lo
stato iniziale delle variabili incognite del sistema.
uu0 = u(tt0,xx0);
uu0 contiene il valore dell'ingresso u nel primo istante di tempo e nella configurazione iniziale del
sistema.
Nuscite = size(yTest,1);
Nuscite contiene il numero di righe della matrice yTest.
Grafici
Seguono i grafici, relativi a ciascuna tipologia, con il primo grafico correlato al primo scenario e il
secondo al secondo scenario.
Grafici di x rispetto al tempo
Grafici di u rispetto al tempo
Grafici di y rispetto al tempo
Grafici di y1 rispetto a y2
Grafici di y rispetto al tempo in 3D
Validazione incrociata attraverso Simulink
Simulink è un ambiente di sviluppo grafico e interattivo che fa parte del pacchetto di software MATLAB.
L'obiettivo principale della simulazione con Simulink è stato quello di verificare e convalidare la
correttezza e l'accuratezza dei grafici ottenuti nel progetto MATLAB. La simulazione ha fornito
un'opportunità per testare il comportamento del sistema modellato in un ambiente più dinamico e
realistico, consentendo di osservare come le componenti del sistema interagiscono tra loro nel tempo.
Modello del primo scenario
Modello del secondo scenario
Grafici risultanti per ogni scenario
Si mostrano di seguito i grafici di x, u e y rispetto al tempo, mostrati dallo stesso oscilloscopio.
Grafici di y1 rispetto a y2
Grafici di y rispetto al tempo in 3D
Dopo aver eseguito le simulazioni in MATLAB e Simulink, abbiamo analizzato attentamente i grafici
generati, osservando il comportamento dei segnali e verificando la sovrapposizione delle curve. Infine,
abbiamo determinato la concordanza dei risultati.
Discussioni
L'analisi dei risultati ottenuti dalla simulazione del sistema lineare ci ha fornito interessanti osservazioni
riguardo al comportamento del sistema in diverse condizioni iniziali e con diversi tipi di ingresso.
Nel primo scenario, in cui lo stato iniziale era non nullo e l'ingresso era nullo, abbiamo osservato che il
sistema ha raggiunto uno stato stazionario senza l'influenza di un ingresso esterno. Questo
comportamento era atteso poiché, in assenza di un ingresso, il sistema tende a conservare il suo stato
iniziale o raggiungere uno stato di equilibrio stabile. La simulazione ha confermato questa proprietà dei
sistemi lineari e dimostrato la stabilità del sistema nella condizione iniziale fornita.
Nel secondo scenario, in cui lo stato iniziale era nullo e l'ingresso era variabile, abbiamo osservato un
comportamento oscillatorio delle variabili di stato e dell'uscita del sistema. Questo andamento periodico
era coerente con l'ingresso variabile. La simulazione ha evidenziato come l'ingresso influenzasse le
variabili di stato e determinasse un'uscita oscillante in risposta a questa variazione temporale
dell'ingresso. Tale risultato è in linea con le aspettative di sistemi lineari che reagiscono in modo
proporzionale all'ingresso applicato.
Il confronto tra le componenti dell'uscita y1 e y2 ha dimostrato una relazione coerente e ben definita tra
queste due variabili. La matrice C di collegamento tra variabili di stato e uscita ha determinato il
comportamento delle variabili di uscita in funzione delle variabili di stato.
Conclusione
In conclusione, la simulazione del sistema lineare con la funzione ode23 di MATLAB ha fornito
un'analisi dettagliata e significativa del comportamento del sistema in due scenari differenti. La
simulazione ci ha permesso di comprendere come lo stato iniziale e l'ingresso influenzino il sistema,
determinando l'andamento delle variabili di stato e dell'uscita nel tempo.
I risultati ottenuti confermano l'efficacia di MATLAB come strumento di simulazione e analisi per
sistemi lineari. La capacità di esplorare e analizzare i comportamenti dinamici del sistema ha fornito
informazioni preziose per la comprensione del sistema e ha dimostrato come i sistemi lineari siano
ampiamente utilizzati in diverse applicazioni nell'ambito dell'ingegneria e delle scienze applicate.
La simulazione del sistema lineare ha inoltre evidenziato l'importanza dell'ingresso nel determinare
l'evoluzione del sistema nel tempo, sottolineando come il controllo degli ingressi sia cruciale per
influenzare e regolare il comportamento del sistema.
In conclusione, questa simulazione ha fornito una panoramica dettagliata delle dinamiche del sistema
lineare e ha dimostrato come le funzioni di integrazione numerica siano strumenti preziosi per lo studio
dei sistemi dinamici. Questo studio può essere esteso ad altre configurazioni di sistemi lineari o a sistemi
più complessi, contribuendo alla progettazione, ottimizzazione e comprensione di una vasta gamma di
processi e applicazioni.

More Related Content

Similar to Simulation and analysis of a linear system in MATLAB

Kinetic_Modeling_02_12_2016
Kinetic_Modeling_02_12_2016Kinetic_Modeling_02_12_2016
Kinetic_Modeling_02_12_2016Michele Scipioni
 
Nonlin tutto 2009
Nonlin tutto 2009Nonlin tutto 2009
Nonlin tutto 2009marbonf
 
Complessita' computazionale
Complessita' computazionaleComplessita' computazionale
Complessita' computazionaleSaraDiLuzio2
 
Lezione 23 (9 maggio 2012)
Lezione 23 (9 maggio 2012)Lezione 23 (9 maggio 2012)
Lezione 23 (9 maggio 2012)STELITANO
 
Automi.saradiluzio
Automi.saradiluzioAutomi.saradiluzio
Automi.saradiluzioSaraDiLuzio2
 
Automi.saradiluzio
Automi.saradiluzioAutomi.saradiluzio
Automi.saradiluzioSaraDiLuzio2
 
Presentazione Tesi Laurea 2010
Presentazione Tesi Laurea 2010Presentazione Tesi Laurea 2010
Presentazione Tesi Laurea 2010Alessio Polidoro
 
Presentazione integrali con economia, malthus e c14
Presentazione integrali con economia, malthus e c14Presentazione integrali con economia, malthus e c14
Presentazione integrali con economia, malthus e c14francoric
 
Esercitazione 3 (14 marzo 2012)
Esercitazione 3 (14 marzo 2012)Esercitazione 3 (14 marzo 2012)
Esercitazione 3 (14 marzo 2012)STELITANO
 
GFilosofi_neural-networks_2006
GFilosofi_neural-networks_2006GFilosofi_neural-networks_2006
GFilosofi_neural-networks_2006Gabriele Filosofi
 
Lezione 9 (14 marzo 2012)
Lezione 9 (14 marzo 2012)Lezione 9 (14 marzo 2012)
Lezione 9 (14 marzo 2012)STELITANO
 
Lezione 7 (12 marzo 2012)
Lezione 7 (12 marzo 2012)Lezione 7 (12 marzo 2012)
Lezione 7 (12 marzo 2012)STELITANO
 

Similar to Simulation and analysis of a linear system in MATLAB (20)

Kinetic_Modeling_02_12_2016
Kinetic_Modeling_02_12_2016Kinetic_Modeling_02_12_2016
Kinetic_Modeling_02_12_2016
 
Nonlin tutto 2009
Nonlin tutto 2009Nonlin tutto 2009
Nonlin tutto 2009
 
Complessita' computazionale
Complessita' computazionaleComplessita' computazionale
Complessita' computazionale
 
5 regime transitorio
5  regime transitorio5  regime transitorio
5 regime transitorio
 
5 regime transitorio
5  regime transitorio5  regime transitorio
5 regime transitorio
 
Lezione 23 (9 maggio 2012)
Lezione 23 (9 maggio 2012)Lezione 23 (9 maggio 2012)
Lezione 23 (9 maggio 2012)
 
Metodo di Newton
Metodo di NewtonMetodo di Newton
Metodo di Newton
 
Automi.saradiluzio
Automi.saradiluzioAutomi.saradiluzio
Automi.saradiluzio
 
Automi.saradiluzio
Automi.saradiluzioAutomi.saradiluzio
Automi.saradiluzio
 
Presentazione Tesi Laurea 2010
Presentazione Tesi Laurea 2010Presentazione Tesi Laurea 2010
Presentazione Tesi Laurea 2010
 
Robotic Arm Simulation
Robotic Arm SimulationRobotic Arm Simulation
Robotic Arm Simulation
 
Il modello Logistico
Il modello LogisticoIl modello Logistico
Il modello Logistico
 
Presentazione integrali con economia, malthus e c14
Presentazione integrali con economia, malthus e c14Presentazione integrali con economia, malthus e c14
Presentazione integrali con economia, malthus e c14
 
Introduzione ai Bond graph
Introduzione ai Bond graphIntroduzione ai Bond graph
Introduzione ai Bond graph
 
Q_oracolo_space
Q_oracolo_spaceQ_oracolo_space
Q_oracolo_space
 
Algorithmist guide II
Algorithmist guide IIAlgorithmist guide II
Algorithmist guide II
 
Esercitazione 3 (14 marzo 2012)
Esercitazione 3 (14 marzo 2012)Esercitazione 3 (14 marzo 2012)
Esercitazione 3 (14 marzo 2012)
 
GFilosofi_neural-networks_2006
GFilosofi_neural-networks_2006GFilosofi_neural-networks_2006
GFilosofi_neural-networks_2006
 
Lezione 9 (14 marzo 2012)
Lezione 9 (14 marzo 2012)Lezione 9 (14 marzo 2012)
Lezione 9 (14 marzo 2012)
 
Lezione 7 (12 marzo 2012)
Lezione 7 (12 marzo 2012)Lezione 7 (12 marzo 2012)
Lezione 7 (12 marzo 2012)
 

Simulation and analysis of a linear system in MATLAB

  • 1. Simulazione e analisi di un sistema lineare in MATLAB Alessio Sechi Università degli Studi di Roma "Tor Vergata" alessio.sechi@students.uniroma2.eu Abstract Questo articolo presenta una simulazione di un sistema lineare utilizzando il software MATLAB. Il sistema in oggetto è descritto da un'equazione differenziale lineare. Attraverso l'utilizzo di tecniche di integrazione numerica, siamo stati in grado di ottenere e analizzare l'andamento delle variabili di stato nel tempo. I risultati della simulazione mostrano come il sistema raggiunga uno stato stazionario nel tempo, fornendo così una valutazione della sua stabilità. Il presente studio rappresenta un esempio di come MATLAB possa essere utilizzato per simulare e analizzare sistemi lineari in diversi contesti. Introduzione La simulazione e l'analisi dei sistemi lineari sono ampiamente utilizzate nei campi dell'ingegneria, della matematica applicata e della scienza dei controlli. In questo articolo, presentiamo una simulazione di un sistema lineare utilizzando il noto software MATLAB. Il sistema in oggetto è descritto dalle equazioni differenziali: ẋ = Ax + Bu y = Cx + Du ove x rappresenta il vettore delle variabili di stato, u è il vettore d’ingresso e y è il vettore di uscita del sistema. Le matrici A, B, C e D definiscono i parametri del sistema lineare. L'obiettivo di questa simulazione è analizzare il comportamento del sistema in due differenti scenari: • nel primo scenario, esamineremo il sistema partendo da uno stato iniziale non nullo, in particolare, x0 = [1 0 1]′, ma con un ingresso identicamente nullo. Questo ci permetterà di valutare il comportamento intrinseco del sistema e come le variabili di stato evolvono nel tempo senza l'influenza di ingressi esterni; • nel secondo scenario, investigheremo il sistema partendo da uno stato iniziale nullo, ma con un ingresso variabile rappresentato da u(t) = [2 sin(3t) 1]′. Questo ci consentirà di osservare l'effetto dell'ingresso variabile sulle variabili di stato e sull'uscita del sistema nel corso del tempo. La simulazione verrà condotta mediante l'utilizzo della funzione di integrazione numerica ode23, che permette di ottenere una soluzione approssimata delle equazioni differenziali del sistema. Attraverso questa analisi, intendiamo fornire una migliore comprensione del comportamento dei sistemi lineari in diverse condizioni iniziali e di ingresso, e dimostrare l'utilità di MATLAB come strumento di simulazione e analisi per tali sistemi. Metodologia Per simulare il sistema lineare descritto nelle equazioni differenziali sopra, abbiamo utilizzato la funzione di integrazione numerica ode23. Questa funzione è appositamente progettata per risolvere equazioni differenziali ordinarie (ODE) non rigide. Il metodo ode23 utilizza un algoritmo a passo variabile (la lunghezza dei passi utilizzati per approssimare la soluzione varia durante il processo di integrazione) basato su una combinazione di metodi di ordine 2 e ordine 3 (combina due ordini di accuratezza). Questa strategia offre una buona efficienza computazionale per ODE non rigide come quelle del nostro sistema lineare.
  • 2. Abbiamo parametrizzato l’intervallo temporale di integrazione utilizzando le variabili t0 e tf, i cui valori possono essere opportunamente assegnati. Per il primo scenario, in cui lo stato iniziale x0 è non nullo, abbiamo impostato l'ingresso come una funzione costante u(t) = 0. Ciò ci ha permesso di ottenere una simulazione del sistema nel tempo senza alcun contributo dall'ingresso esterno. Per il secondo scenario, in cui lo stato iniziale x0 è nullo e l'ingresso u è definito come u(t) = [2 sin(3t) 1]′. Questo ci ha consentito di simulare il sistema con un ingresso variabile nel tempo. Abbiamo utilizzato una funzione inline per definire l'ingresso u all'interno della chiamata della funzione anonima passata a ode23. Durante la simulazione, ode23 ha calcolato l'evoluzione delle variabili di stato x e, successivamente, abbiamo calcolato l'uscita y. Infine, abbiamo generato i grafici, in funzione del tempo, delle variabili di stato x, dell'ingresso u, dell'uscita y, della relazione y1 rispetto a y2, e una rappresentazione tridimensionale dell'uscita y rispetto al tempo. Attraverso questa metodologia, siamo stati in grado di analizzare in dettaglio il comportamento del sistema lineare nei due scenari specificati e ottenere una migliore comprensione delle sue dinamiche nel tempo. Matrici di coefficienti del sistema A = [ −0.5 0 1 0 −2 0.2 0 −0.2 −2 ] ; B = [ 1 0 0 0 −1 1 ] C = [ 1 0 0 0 1 −1 ] ; D = [ 0 0 0 0 ] Codice implementativo %% Simulazione strutturata del sistema %% Pulizia clear all; close all; clc; %% Scelta del caso di cui si vuole vedere la risposta del sistema global scelta; scelta = input('Inserisci 1 per simulare il primo caso o 2 per simulare il secondo caso: '); while scelta ~= 1 && scelta ~= 2 disp('Input non valido. Devi inserire solo 1 o 2.'); scelta = input('Reinserisci 1 o 2: '); end %% Parametri e condizioni iniziali if scelta == 1 x_0 = [1 0 1]'; elseif scelta == 2 x_0 = [0; 0; 0]; end
  • 3. t0 = 0; tf = 15; %% Matrici del sistema A=[-0.5 0 1; 0 -2 0.2; 0 -0.2 -2]; B=[1 0; 0 0; -1 1]; C=[1 0 0; 0 1 -1]; D=[0 0; 0 0]; %% Calcolo della soluzione % Funzioni anonime u = @(t,x) ingresso(t,x); f = @(t,x) dinamica(t,x,u,A,B); sol = ode23(f,[t0 tf],x_0); %% Raffinamento e calcolo dell'uscita % ode23 in generale da soluzioni con punti abbastanza sparsi, quindi occorre raffinare la soluzione Npunti = 300; tempi = linspace(t0,tf,Npunti); xFine = deval(sol,tempi); % Calcolo di un valore dell'uscita per conoscere il numero di righe della matrice y tt0 = tempi(1); xx0 = xFine(:,1); uu0 = u(tt0,xx0); yTest = h(tt0,xx0,uu0,C,D); Nuscite = size(yTest,1); % Calcolo di un valore dell'ingresso per conoscere il numero di righe della matrice u uTest = ingresso(tt0,xx0); Ningressi = size(uTest,1); % Calcolo dell'uscita y e dell'ingresso u yFine = zeros(Nuscite,Npunti); u_values = zeros(Ningressi,Npunti); for hh = 1:Npunti tt = tempi(hh); xx = xFine(:,hh); uu = u(tt,xx); u_values(:,hh) = u(tt,xx); yFine(:,hh) = h(tt,xx,uu,C,D); end %% Visualizzazione % Visualizzazione grafico di x rispetto al tempo figure(1); plot(tempi,xFine); xlabel("t");
  • 4. ylabel("x"); title("Stato x vs tempo t"); % Visualizzazione grafico di u rispetto al tempo figure(2); plot(tempi,u_values); xlabel("t"); ylabel("u"); title("Ingresso u vs Tempo t"); % Visualizzazione grafico di y rispetto al tempo figure(3); plot(tempi,yFine); xlabel("t"); ylabel("y"); title("Uscita y vs Tempo t"); % Visualizzazione grafico di y1 rispetto a y2 figure(4); plot(yFine(1,:),yFine(2,:)); xlabel("y_1"); ylabel("y_2"); title("y_1 vs y_2"); % Visualizzazione grafico di y rispetto al tempo in 3D figure(5); plot3(tempi,yFine(1,:),yFine(2,:)); xlabel("t"); ylabel("y_1"); zlabel("y_2"); title("Uscita y vs Tempo t"); %% Funzioni % Dinamica del sistema function dxdt=dinamica(t,x,u,A,B) u = ingresso(t,x); dxdt = A*x+B*u; end % Ingresso del sistema function u=ingresso(t,x) global scelta; if scelta == 1 u = [0;0]; elseif scelta == 2 u = [2*sin(3*t); 1]; end end % Uscita del sistema function y=h(t,x,u,C,D)
  • 5. y = C*x+D*u; end Di seguito sono presentate alcune righe di codice che richiedono una breve spiegazione. u = @(t,x) ingresso(t,x); • u è il nome della variabile che contiene la funzione anonima; • @ indica che si sta definendo una funzione anonima; • t e x sono gli argomenti della funzione. La funzione anonima u prende due valori, t e x, e restituisce il valore della funzione ingresso valutata in t e x. Le funzioni anonime sono funzioni definite in modo breve e conciso senza assegnare loro un nome. Queste funzioni sono definite in linea (inline) e possono essere passate come argomenti ad altre funzioni o salvate in variabili. sol = ode23(f,[t0 tf],x_0); • f è la funzione anonima definita in precedenza; • [t0 tf] è l'intervallo temporale di integrazione; • x_0 è il vettore delle condizioni iniziali che indicano i valori delle variabili al tempo iniziale t0. tempi = linspace(t0,tf,Npunti); La funzione linspace restituisce un vettore di Npunti equispaziati tra t0 e tf. xFine = deval(sol,tempi); • sol è la struttura contenente i risultati della soluzione delle equazioni differenziali; • tempi è il vettore descritto sopra. La funzione deval svolge l'interpolazione tra i punti temporali della soluzione sol per calcolare i valori delle soluzioni nei tempi specificati in tempi. L'interpolazione permette di ottenere una stima precisa delle soluzioni nei punti desiderati anche se questi tempi non corrispondono esattamente ai tempi discreti usati durante la risoluzione numerica delle ODE. xx0 = xFine(:,1); La variabile xx0 viene impostata uguale alla prima colonna del vettore xFine. Questo rappresenta lo stato iniziale delle variabili incognite del sistema. uu0 = u(tt0,xx0); uu0 contiene il valore dell'ingresso u nel primo istante di tempo e nella configurazione iniziale del sistema. Nuscite = size(yTest,1); Nuscite contiene il numero di righe della matrice yTest. Grafici Seguono i grafici, relativi a ciascuna tipologia, con il primo grafico correlato al primo scenario e il secondo al secondo scenario.
  • 6. Grafici di x rispetto al tempo Grafici di u rispetto al tempo
  • 7. Grafici di y rispetto al tempo Grafici di y1 rispetto a y2
  • 8. Grafici di y rispetto al tempo in 3D
  • 9. Validazione incrociata attraverso Simulink Simulink è un ambiente di sviluppo grafico e interattivo che fa parte del pacchetto di software MATLAB. L'obiettivo principale della simulazione con Simulink è stato quello di verificare e convalidare la correttezza e l'accuratezza dei grafici ottenuti nel progetto MATLAB. La simulazione ha fornito un'opportunità per testare il comportamento del sistema modellato in un ambiente più dinamico e realistico, consentendo di osservare come le componenti del sistema interagiscono tra loro nel tempo. Modello del primo scenario Modello del secondo scenario
  • 10. Grafici risultanti per ogni scenario Si mostrano di seguito i grafici di x, u e y rispetto al tempo, mostrati dallo stesso oscilloscopio.
  • 11. Grafici di y1 rispetto a y2
  • 12. Grafici di y rispetto al tempo in 3D Dopo aver eseguito le simulazioni in MATLAB e Simulink, abbiamo analizzato attentamente i grafici generati, osservando il comportamento dei segnali e verificando la sovrapposizione delle curve. Infine, abbiamo determinato la concordanza dei risultati. Discussioni L'analisi dei risultati ottenuti dalla simulazione del sistema lineare ci ha fornito interessanti osservazioni riguardo al comportamento del sistema in diverse condizioni iniziali e con diversi tipi di ingresso. Nel primo scenario, in cui lo stato iniziale era non nullo e l'ingresso era nullo, abbiamo osservato che il sistema ha raggiunto uno stato stazionario senza l'influenza di un ingresso esterno. Questo comportamento era atteso poiché, in assenza di un ingresso, il sistema tende a conservare il suo stato iniziale o raggiungere uno stato di equilibrio stabile. La simulazione ha confermato questa proprietà dei sistemi lineari e dimostrato la stabilità del sistema nella condizione iniziale fornita. Nel secondo scenario, in cui lo stato iniziale era nullo e l'ingresso era variabile, abbiamo osservato un comportamento oscillatorio delle variabili di stato e dell'uscita del sistema. Questo andamento periodico era coerente con l'ingresso variabile. La simulazione ha evidenziato come l'ingresso influenzasse le variabili di stato e determinasse un'uscita oscillante in risposta a questa variazione temporale dell'ingresso. Tale risultato è in linea con le aspettative di sistemi lineari che reagiscono in modo proporzionale all'ingresso applicato.
  • 13. Il confronto tra le componenti dell'uscita y1 e y2 ha dimostrato una relazione coerente e ben definita tra queste due variabili. La matrice C di collegamento tra variabili di stato e uscita ha determinato il comportamento delle variabili di uscita in funzione delle variabili di stato. Conclusione In conclusione, la simulazione del sistema lineare con la funzione ode23 di MATLAB ha fornito un'analisi dettagliata e significativa del comportamento del sistema in due scenari differenti. La simulazione ci ha permesso di comprendere come lo stato iniziale e l'ingresso influenzino il sistema, determinando l'andamento delle variabili di stato e dell'uscita nel tempo. I risultati ottenuti confermano l'efficacia di MATLAB come strumento di simulazione e analisi per sistemi lineari. La capacità di esplorare e analizzare i comportamenti dinamici del sistema ha fornito informazioni preziose per la comprensione del sistema e ha dimostrato come i sistemi lineari siano ampiamente utilizzati in diverse applicazioni nell'ambito dell'ingegneria e delle scienze applicate. La simulazione del sistema lineare ha inoltre evidenziato l'importanza dell'ingresso nel determinare l'evoluzione del sistema nel tempo, sottolineando come il controllo degli ingressi sia cruciale per influenzare e regolare il comportamento del sistema. In conclusione, questa simulazione ha fornito una panoramica dettagliata delle dinamiche del sistema lineare e ha dimostrato come le funzioni di integrazione numerica siano strumenti preziosi per lo studio dei sistemi dinamici. Questo studio può essere esteso ad altre configurazioni di sistemi lineari o a sistemi più complessi, contribuendo alla progettazione, ottimizzazione e comprensione di una vasta gamma di processi e applicazioni.