Integrazione di dati numerici
Questo esempio mostra come integrare numericamente un insieme di dati di velocità discreti per approssimare la distanza percorsa. La famiglia integral
accetta solo handle delle funzioni come input, quindi tali funzioni non possono essere utilizzate con gli insiemi di dati discreti. Utilizzare trapz
o cumtrapz
quando non è disponibile un'espressione funzionale per l'integrazione.
Visualizzazione dei dati di velocità
Si considerino i seguenti dati di velocità e i corrispondenti dati di tempo.
vel = [0 .45 1.79 4.02 7.15 11.18 16.09 21.90 29.05 29.05 ... 29.05 29.05 29.05 22.42 17.9 17.9 17.9 17.9 14.34 11.01 ... 8.9 6.54 2.03 0.55 0]; time = 0:24;
Questi dati rappresentano la velocità di un'automobile (in m/s) rilevata a intervalli di 1 s per 24 s.
Tracciare i punti dei dati di velocità e collegare ciascun punto con una linea retta.
figure plot(time,vel,'-*') grid on title('Automobile Velocity') xlabel('Time (s)') ylabel('Velocity (m/s)')
La pendenza è positiva durante i periodi di accelerazione, zero durante i periodi a velocità costante e negativa durante i periodi di decelerazione. Al tempo t = 0
, il veicolo è fermo con una velocità di vel(1) = 0
m/s. Il veicolo accelera fino a raggiungere una velocità massima a t = 8
s di vel(9) = 29.05
m/s e mantiene questa velocità per 4 s. Successivamente, decelera fino a vel(14) = 17.9
m/s per 3 s e infine si ferma nuovamente. Poiché questa curva di velocità presenta più discontinuità, non è possibile descriverla con una singola funzione continua.
Calcolo della distanza totale percorsa
trapz
esegue l'integrazione discreta utilizzando i punti di dati per creare trapezi; quindi, è particolarmente adatto per gestire insiemi di dati che presentano discontinuità. Questo metodo presuppone un comportamento lineare tra i punti di dati e la precisione può essere ridotta quando il comportamento è non lineare. Per illustrare questo concetto, è possibile disegnare dei trapezi sul grafico utilizzando i punti di dati come vertici.
xverts = [time(1:end-1); time(1:end-1); time(2:end); time(2:end)]; yverts = [zeros(1,24); vel(1:end-1); vel(2:end); zeros(1,24)]; p = patch(xverts,yverts,'b','LineWidth',1.5);
trapz
calcola l'area sottesa da un insieme di dati discreti suddividendo la regione in trapezi. La funzione aggiunge quindi l'area di ciascun trapezio per calcolare l'area totale.
Calcolare la distanza totale percorsa dall'automobile (corrispondente all'area oscurata) integrando numericamente i dati di velocità utilizzando trapz
. Per impostazione predefinita, si presume che la spaziatura tra i punti sia 1
se si utilizza la sintassi trapz(Y)
. Tuttavia, è possibile specificare una spaziatura diversa, uniforme o non uniforme, X
utilizzando la sintassi trapz(X,Y)
. In questo caso, la spaziatura tra le letture nel vettore time
è 1
; quindi, è accettabile utilizzare la spaziatura predefinita.
distance = trapz(vel)
distance = 345.2200
La distanza percorsa dall'automobile in t = 24
s è di circa 345,22 m.
Plottaggio della distanza complessiva percorsa
La funzione cumtrapz
è strettamente correlata a trapz
. Mentre trapz
restituisce solo il valore finale dell'integrazione, cumtrapz
restituisce anche i valori intermedi in un vettore.
Calcolare la distanza complessiva percorsa e tracciare il risultato su un grafico.
cdistance = cumtrapz(vel); T = table(time',cdistance','VariableNames',{'Time','CumulativeDistance'})
T=25×2 table
Time CumulativeDistance
____ __________________
0 0
1 0.225
2 1.345
3 4.25
4 9.835
5 19
6 32.635
7 51.63
8 77.105
9 106.15
10 135.2
11 164.25
12 193.31
13 219.04
14 239.2
15 257.1
⋮
plot(cdistance) title('Cumulative Distance Traveled Per Second') xlabel('Time (s)') ylabel('Distance (m)')