【问题标题】:Matlab - The second derivativeMatlab - 二阶导数
【发布时间】:2016-05-01 04:23:16
【问题描述】:

我正在处理一些关于速度、加速度等的问题,包括给定数据点的曲线拟合、插值等。我需要找到二阶导数,加速度,给定时间和距离点。在用 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));

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

【问题讨论】:

标签: matlab plot graph derivative


【解决方案1】:

我相信你计算加速度的方法可能是错误的。您在计算速度时正确使用了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');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-30
    • 1970-01-01
    • 2014-02-13
    • 2018-09-30
    相关资源
    最近更新 更多