从时间和海拔的速度和加速度

时间:2016-04-28 12:24:19

标签: matlab plot interpolation derivative

我正在尝试计算并绘制给定数据点的速度和加速度。最初我给出了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)

我不确定如何正确找到速度和加速度。我目前正在使用

找到速度
velocity = [vrcubic./newTime];

使用

进行粗加速
acceleration = [sqrt(velocity.^2 + newTime.^2)];

意味着2点之间的速度斜率,但我认为它错了

是否有更简单的方法来计算速度和加速度,可能使用导数或其他东西?

2 个答案:

答案 0 :(得分:1)

请记住,您的速度是相对于时间的位移变化率(在您的情况下为高度)。因此,数值近似是高度的离散变化除以时间的离散变化。你的等式

velocity = [vrcubic./newTime];

犯规'帐户更改。我会改变它

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

加速只是时间的推导。请注意,您必须删除第一个时间点,因为diff会将向量的大小减小一个:

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

答案 1 :(得分: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

您也可以使用相同的功能来计算加速度。您只需要更改输入