Matlab - 二阶导数

时间:2016-05-01 04:23:17

标签: matlab plot graph derivative

我正在研究围绕速度,加速度等的一些问题,包括来自给定数据点的曲线拟合,插值等。我需要找到二阶导数,加速度,给定时间和距离点。我目前正在使用以下代码找到速度,在用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));

我没有正确找到速度,或者我的加速方法是错误的,如果是,我该如何解决呢。

1 个答案:

答案 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');