2016-04-30 19 views
0

Ich arbeite an einigen Problemen mit Kurvenanpassung ect, und müssen die Ableitung einer kubischen Anpassung von 50 Punkten zu finden. Die Fragen werden gestellt, um die Wachstumsrate von Bakterien gegebenen Daten zu finden. Mein aktueller Code istMatlab - polyval Daten Differenzierung

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) 

ich frage sich, ob growthRate oder Derivat für dieses Problem richtig ist, oder wenn sie beide falsch. da sie deutlich unterschiedliche Werte angegeben haben. Auch wenn die Länge des Vektors verkürzt ist.

Prost

+0

"Wachstumsrate" wäre repräsentativ für die "physikalische" Wachstumsrate. Aber ich denke, es ist am besten zu ersetzen "newTime = linspace (1,7,50);" mit "newTime = linspace (Zeit (1), Zeit (Ende), 50);' – user1391279

Antwort

0

Die Ableitung von vrcubic mit Bezug auf die Zeit in der Tat von

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

Ihre derivative Ausdruck gegeben ist nur die Unterschiede zwischen benachbarten Datenpunkten.

Sie auch analytische Differenzierung hier

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

verwenden kann ich würde es vorziehen, immer diese als es die richtige Ableitung auch bei den Newtime Punkte sind sehr dünn abgetastet ist.

+0

Danke für die Antwort, ich Ich wende das auf eine zweite Frage an, die Geschwindigkeit und Beschleunigung betrifft. Es funktioniert gut für die Geschwindigkeit, jedoch bewirkt das Anwenden der gleichen Funktion auf den Geschwindigkeitsvektor in einem Versuch, die zweite Ableitung zu erhalten, Werte in der Reihenfolge der Potenz 110 (1x10^100). Der Code ist Geschwindigkeit = Polyval (Polyeder (rcubic), newTime) Beschleunigung = Polyder ((Geschwindigkeit), newTime) – Vladamir