2016-07-03 11 views
0

Ich habe eine Reihe von Daten, die wie auf dem Bild unten verteilt sind. dataSchätzung der benutzerdefinierten Funktionsparameter in Matlab

Es sieht deutlich, wie eine Funktion:

k1*(1-e^(-t/T1))-k2*(1-e^(-t/T2)). 

Gibt es eine Methode in Matlab zur Verfügung gestellt, Parameter in dieser Art von Funktion zu schätzen, oder haben Sie irgendwelche Ideen von ihnen in Code Schätzung zu vermeiden macht es "manuell"? Danke.

Antwort

2

Sie suchen nach nicht linearen Optimierung.

Überprüfen Sie die curve fitting toolbox, nie verwendet, aber es scheint exponentiell passend zu sein.

Ansonsten könnten Sie Ihre eigene Zielfunktion f(k1,k2,T1,T2) definieren (normalerweise der mittlere quadratische Fehler zwischen Ihrer gewünschten Kurve und Ihren Daten). Dann wenden Sie einen Optimierungsalgorithmus an, um den Fehler zu minimieren (fminsearch() funktioniert gut genug).

+0

Danke, ich habe Kurvenanpassungen verwendet und bemerkt, dass die Funktion, die ich benutzen wollte, nicht gut genug zu meinen Daten passte, also habe ich verschiedene benutzerdefinierte Funktionen in der Toolbox ausprobiert. Als ich herausgefunden habe, welches das beste ist, habe ich meine eigene Zielfunktion mit mittlerem quadratischen Fehler und geschätzten Parametern im Code erstellt. Es hat sehr gut funktioniert, danke nochmal für beide Ratschläge. – user2638817

2

Wenn Sie es in einem Skript tun möchten Sie folgendes tun:

ft = fittype('a*(1-exp(-t/b))-c*(1-exp(-t/d))', 'coefficients',{'a','b', 'c', 'd'},... 
'independent', 't', 'dependent', 'y'); 
f = fit(xValues, yValues, ft); 

mit F.Eine, f.b ... können Sie die Parameterwerte erhalten. Sie können auch weitere Einstellungen anpassen, siehe fit func at Mathworks