2016-04-28 122 views
1

我試圖計算和繪製給定數據點的速度和加速度。最初我給了13分的時間和高度。時間和海拔的速度和加速度

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]; 

這些不得不則是立方體安裝,使用下面的代碼

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

我不確定如何正確地找到速度和加速度然而完成。我目前發現使用

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

意味着是2點之間速度的斜率使用

velocity = [vrcubic./newTime]; 

和粗糙的加速度,但我認爲它錯

有沒有一種簡單的方法來計算速度和加速度,可能帶有衍生物或其他東西?

回答

0

我通常使用導數來計算速度和加速度!也許這不是那麼簡單/更有效的方式,但這是我認爲正確的方式。

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 

您可以使用相同的函數來計算加速爲好。你只需要改變輸入

1

請記住,你的速度是位移(在你的情況下的高度)相對於時間的變化率。數值近似因此是高度的離散變化除以離散的時間變化。你的公式

velocity = [vrcubic./newTime]; 

犯規」佔了變化。我會改變它是

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

加速然後只是時間的導數。請注意,由於diff會將矢量的大小減小一,因此您將不得不放棄第一個時間點:

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