Hallo liebes Forum,
mir stellt sich folgendes Problem:
Ich habe einen Datensatz der aus x und y Werten besteht. Es wurde schon eine Funktion ausgearbeitet, die diesen Datensatz beschreiben soll. Allerdings sind die Koeffizienten dieser Funktion noch unbekannt und sollen nun so bestimmt werden, dass die Funktion sich möglichst gut an den Datensatz anschmiegt. Wie bekomme ich das am besten hin?
Die Funktion lautet:
VB_m=V_1*[(1-e^(-V_2*L) )+(e^(V_3*L)-1)]
Wobei V_1, V_2 und V_3 die Unbekannten sind.
Vielen Dank im Voraus!
Liebe Grüße,
je nach verfügbaren Toolboxen würde ich
lsqcurvefit
(Statistics and Machine Learning Toolbox),
fitnlm
(Optimization Toolbox) oder
fminsearch
(direkt in MATLAB) verwenden.
Die beiden erstgenannten sind in der Handhabung einfacher und liefern häufig bessere Ergebnisse.
Hallo Harald,
vielen Dank für die schnelle Antwort! Die lsqcurvefitting Funktion klingt schon sehr gut! Ich bekomme diesen Fehler ausgespuckt:
Error using snls (line 47)
Objective function is returning undefined values at initial point. lsqcurvefit cannot continue.
Wie bestimme ich am besten meine Anfangswerte x0? Habe schon ein paar Werte willkürlich gewählt und probiert, bekomme aber immer wieder diesen Fehler.
Grüße,
Hallo Harald,
vielen Dank für deine Hilfe! Leider musste ich beim Testen der Funktion feststellen, dass die berechneten Koeffizienten teilweise imaginär werden. Dies dürte eigentlich nicht passieren. Wenn die Startwerte (beta0) anders angebeben werden verändern sich auch die berechneten Koeffizienten. Gibt es eine Herangehensweise, wie ich diese Startwerte am besten bestimme?
Viele Grüße,
Leider musste ich beim Testen der Funktion feststellen, dass die berechneten Koeffizienten teilweise imaginär werden. Dies dürte eigentlich nicht passieren.
Und wann passiert das? Mit den vorhandenen Daten ja nicht.
Zitat:
Gibt es eine Herangehensweise, wie ich diese Startwerte am besten bestimme?
Das ist oft Gefühlssache oder Trial and Error. Wenn man keine Anhaltspunkte hat und das automatisieren möchte, muss man im Zweifelsfall globale Optimierung machen.
das liegt daran, dass deine Modellfunktion für die Anfangswerte komplexwertige Rückgaben liefert. Es liegt an dir, die Anfangswerte so zu wählen, dass das nicht passiert. Hier: das Argument von log darf nicht negativ werden.
Übrigens ist das Modell insofern ungünstig, als b(4) und b(6) zu einem Parameter zusammengefasst werden können
b(4) * exp(b(5)*x + b(6)) = b(4) * exp(b(6)) * exp(b(5) * x)
also neuer Parameter b(4) * exp(b(6))
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.