2016-04-28 54 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));