2016-05-01 101 views
0

我正在研究速度,加速度等方面的一些問題,包括曲線擬合,插值等,從給定的數據點。我需要找到二階導數,加速度,給定時間和距離點。我現在使用下面的代碼找到了速度,做了100點的三次擬合之後。Matlab - 二階導數

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

請[接受答案】(http://i.stack.imgur.com/QpogP.png)。 – Arpi

回答

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'); 
+0

工作很好,歡呼聲。 – Vladamir