2016-04-28 9 views
1

Ich versuche, Geschwindigkeit und Beschleunigung Datenpunkte zu berechnen und zu plotten. Anfangs werden 13 Punkte für Zeit und Höhe vergeben.Geschwindigkeit und Beschleunigung von Zeit und Höhe

time = [0:12]; 
altitude = [0,107.37,210.00,307.63,400.00,484.60,550.00,583.97,580.00,... 
     549.53,570.00,699.18,850]; 

Diese hatten dann kubisch sein angebracht, unter Code geschieht mit

newTime = linspace(0,12,100); 
rcubic = polyfit(time,altitude,3); 
vrcubic = polyval(rcubic,newTime); 
plot(newTime,vrcubic) 

Ich bin nicht sicher, wie man richtig aber Geschwindigkeit und Beschleunigung zu finden. Ich finde derzeit Geschwindigkeit mit

velocity = [vrcubic./newTime]; 

und grobe Beschleunigung mit

acceleration = [sqrt(velocity.^2 + newTime.^2)]; 

bedeutete die Steigung der Geschwindigkeit zwischen 2 Punkt zu sein, aber ich denke, seine falsche

Gibt es einen einfacheren Weg zu Berechnen Sie die Geschwindigkeit und Beschleunigung, möglicherweise mit einer Ableitung oder etwas?

Antwort

0

Normalerweise verwende ich Derivate, um Geschwindigkeit und Beschleunigung zu berechnen! Vielleicht ist es nicht so einfach/effizienter, aber es ist so, wie ich es für richtig hielt.

Beispiel

v_geral(1)=0; 

for i=1:length(x)-1 

x1 = x(i); 
x2 = x(i+1); 
y1 = y(i); 
y2 = y(i+1); 
z1 = z(i); 
z2 = z(i+1); 

if sqrt((x2-x1)^2+(y2-y1)^2+(z2-z1)^2) == 0 
    v_geral(i+1)=0; 
else 
    v_geral(i+1)= sqrt((x2-x1)^2+(y2-y1)^2+(z2-z1)^2)/(t(i+1) - t(i)); 
end 

end 

können Sie die gleiche Funktion verwenden Beschleunigung als auch zu berechnen. Sie müssen nur den Eingang ändern

1

Denken Sie daran, dass Ihre Geschwindigkeit die Rate der Änderung der Verschiebung (in Ihrem Fall Höhe) in Bezug auf die Zeit ist. Die numerische Approximation ist somit die diskrete Änderung der Höhe dividiert durch die diskrete Änderung der Zeit. Ihre Gleichung

velocity = [vrcubic./newTime]; 

doesnt‘Konto für die Änderung. Ich würde es ändern, um zu sein

velocity = diff(vrcubic)./diff(newTime); 

Beschleunigung ist dann nur die zeitliche Ableitung davon. Beachten Sie, dass Sie den ersten Zeitpunkt löschen müssen, da diff die Größe des Vektors um eins reduziert:

acceleration = diff(velocity)./diff(newTime(2:end));