我正在研究围绕速度,加速度等的一些问题,包括来自给定数据点的曲线拟合,插值等。我需要找到二阶导数,加速度,给定时间和距离点。我目前正在使用以下代码找到速度,在用100点进行立方拟合之后。
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);
velocity = polyval(polyder(rcubic),newTime);
然而,当我使用相同的公式来尝试获得加速时,下面的代码,我会按照功率110的顺序得到答案
acceleration = polyval(polyder(velocity,newTime));
我没有正确找到速度,或者我的加速方法是错误的,如果是,我该如何解决呢。
答案 0 :(得分:0)
我相信你的加速度计算方法可能是错误的。您在计算速度时正确使用polyder
,而不是加速度。要获得加速度,您需要应用多项式导数两次:
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);
figure;
hold on;
plot(time, altitude);
plot(newTime, vrcubic);
velocity = polyval(polyder(rcubic), newTime);
plot(newTime, velocity)
acceleration = polyval(polyder(polyder(rcubic)), newTime);
plot(newTime, acceleration)
legend('original', 'poly', 'velocity poly', 'acceleration poly');