Verfasst am: 11.07.2016, 18:32
Titel: Modellfit an Messwerte
Hallo liebe MATLAB-Com!
Ich habe reale Messwerte (10 Stk.) mehrerer (16) Wachstumskurven (Zelldichte "y" über die Zeit "t").
Nun möchte ich ein Wachstumsmodell ("Baranyi-Modell") an diese Messwerte fitten. Dieses Modell enthält insgesamt 3 Variablen (L,m,v), welche verändert werden können/sollen.
Ich habe diesbezüglich schon sämtliche Foren und auch die Matlab-Hilfe durchstöbert, finde jedoch keinen Passenden Ansatz für mein Problem, bzw. fahre mich ständig fest. Matlab soll mir diese drei genannten Werte (mit Nebenbedingungen) so weit verändern, bis die Modellkurve bestmöglich über den Messwerten liegt.
Kann mir da jemand spontan weiter helfen und mir vieleicht einen Ansatz nenne, welcher es Wert ist genauer zu beleuchten?
habe ich hingegen noch nicht verwendet (danke an dieser Stelle ) Ich werde mal versuchen mich in diesen Befehl zu denken...
Mein Ziel war/ist es ersteinmal eine Lösung ähnlich dem Excel-Solver zu finden.
Dort habe ich die Summe der Quadratischen Abweichungen zwischen modell- und Messwerten (bei veränderung der drei Parameter) minimieren lassen.
Bei Matlab verstehe ich nur leider nicht, wie ich diese Minimize-Funktionen auf eine Ganze Datenreihe anwenden soll...
Wenn du dabei auf Probleme stößt, poste bitte deinen Code. Dann kann man Verbesserungsvorschläge liefern.
Grüße,
Harald
Theodyzee
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 11.07.2016, 22:04
Titel:
Also ich habe nocheinmal ein wenig herum probiert (auch mit Hilfe der Beispiele aus der Hilfe). Ich komme wiederholt mit der Synthax nicht zurecht und habe daher mal meinen Code kopiert.
Ich hoffe mit Hilfe der Anmerkungen steigt man grob durch...
Wäre echt super, wenn mir der Wald hinter den Bäumen gezeigt werden könnte!!!
versuch doch erst mal, eine Kurve zu fitten, bevor du das in eine doppelte for-Schleife packst?
lsqcurvefit erfordert als erstes Argument ein Function Handle, und das wird auch in jedem der Beispiele dazu gezeigt. Du definierst aber weit und breit kein Function Handle.
...ich weiß nicht ob dir das Hilft bzw. du die entsprechenden Toolboxes hast. Bei mir ging es ohne Probleme. In dem Programm geht es um die Anfittung von Messdaten für den O2 Verbrauch von Zellen an ein Modell (siehe Ansatzfunktion):
ich habe nun mein Modell in ein function-file (
'func'
) übertragen, habe meine Messreihen auf "eine" reduziert und soweit funktioniert auch alles.
Ein Vektor
'var0'
beinhaltet die Startwerte [1 1 1] der drei veränderlichen Variablen (
'L'
,
'm'
,
'v'
) und liefert für die
function
die Funktionswerte für yt.
Nun komme ich jedoch immernoch nicht mit der Synthax von
lsqcurvefit
zurecht. Da immer wieder der Fehler:
erscheint. Ich zweifel langsam wirklich an mir selbst!
In der Hilfe steht doch(?!):
- es wird eine
function
benötigt (habe ich:
'func'
)
- es wird ein Startwert
'x0'
benötigt (bei mir der Vektor
'var0'
)
- es werden die x-werte benötigt
'xdata'
(bei mir der Vektor t)
- es werden die y-werte (Messwerte) benötigt
'ydata'
(bei mir der Vektor
'ye'
)
und das habe ich meines erachtens alles übertragen bzw. befolgt! (Hier nochmal meine Codes)
Das Problem ist:
lsqcurvefit möchte die Funktion mit zwei Argumenten aufrufen. Die Funktion erwartet aber fünf. Das Problem wird auf dieser (auch aus der Doku von lsqcurvefit verlinkten) Seite ausführlich erläutert.
http://uk.mathworks.com/help/optim/.....ing-extra-parameters.html
Ich würde "Anonymous Functions" empfehlen.
Grüße,
Harald
Einstellungen und Berechtigungen
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.