2016-04-30 4 views
0

Я работаю над некоторыми проблемами, связанными с подбором кривой, и вам нужно найти производную кубической подгонки 50 баллов. Вопросы направлены на поиск темпов роста данных бактерий. Мой текущий кодMatlab - дифференциация данных с поливатом

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 (1,7,50);' с 'newTime = linspace (time (1), time (end), 50);' – user1391279

ответ

0

производная vrcubic по времени действительно даются

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

Вашего выражением derivative все различие между соседними точками данными.

Вы также можете использовать аналитическую дифференциацию здесь

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

Я всегда предпочитаю последний, как это правильно производное даже в случае точка newTime очень редко пробы.

+0

Спасибо за ответ, i я применяю это ко второму вопросу, касающемуся скорости и ускорения. Он отлично работает для скорости, однако применение той же функции к вектору скорости в попытке получить вторую производную приводит к тому, что значения находятся в порядке мощности 110 (1x10^100). код скорость = поливал (полидер (rcubic), новыйTime) ускорение = полилог ((скорость), новыйTime) – Vladamir

Смежные вопросы