2016-04-30 64 views
0

我正在研究曲线拟合等问题,需要找到50点的三次拟合导数。这些问题要求找出数据中细菌的增长率。我目前的代码是Matlab - polyval数据区分

time = [1,2,4,5,7,9]; 
bacteria = [2000,4500,7500,15000,31000,64000]; 

rcubic = polyfit(time,bacteria,3); 
newTime = linspace(1,7,50); 
vrcubic = polyval(rcubic,newTime); 

growthRate = [diff(vrcubic)./diff(newTime)]; 
derivative = diff(vrcubic) 

我想知道是否growthRate或衍生物是正确的这个问题,或者如果他们都是错误的。因为它们给出明显不同的价值。也随着矢量的长度缩短。

干杯

+0

'growthRate'将代表'物理'增长率。然而,我认为最好用'newTime = linspace(time(1),time(end),50)替换'newTime = linspace(1,7,50);'' – user1391279

回答

0

vrcubic相对于微分时间确实是

growthRate = [diff(vrcubic)./diff(newTime)]; 

derivative表达式给出仅仅是数据点的相邻之间的差异。

你也可以在这里使用

growthRate = polyval(polyder(rcubic), newTime); 

辨析我总是会更喜欢后者,因为它是正确的衍生即使万一NEWTIME点非常稀疏采样。

+0

感谢您的回复,我我将这个应用于第二个涉及速度和加速度的问题。它可以很好地适用于速度,但是为了获得二阶导数而将相同的函数应用于速度矢量会导致功率值为110(1x10^100)。代码是 velocity = polyval(polyder(rcubic),newTime) acceleration = polyder((velocity),newTime) – Vladamir