我正在尝试计算并绘制给定数据点的速度和加速度。最初我给出了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点之间的速度斜率,但我认为它错了
是否有更简单的方法来计算速度和加速度,可能使用导数或其他东西?
答案 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
您也可以使用相同的功能来计算加速度。您只需要更改输入