Verfasst am: 22.01.2014, 10:22
Titel: isqnonlin und iscurvefit
anhand der Versuchsdaten(Messungen) möchte ich ein Simulationsmodell anpassen. von Messung habe ich eine Kurve (Xdata,Ydata) und aus der Simulationssoftware bekomme ich auch ein andere Kurve (X1,Y1).
durch parametervariation(6 faktor, gesucht) muss das Simulationsmodell angepasst werden und die Kurve aus Simulationsoftware nahzu gleich die kurve aus der Messung. Zur anpassung mit parmeterenvariation (6 faktoren) ist 1 mio möglichkeit gibt, deswegen wäre am besten durch anwendung von Least Square.
normalweise machbar funktion zur kurve aber in meinem fall ist kurve(Messung) zu kurve(Simulation).
wie soll ich das mit den Befehle lsqnonlin() oder iscurvefit() schreiben ??
Idealerweise wird man die Simulation so ausführen, dass man y-Werte zu xsoll erhält. Wenn du sagst, welcher Form die Simulation ist, kann man vielleicht auch da weiterhelfen.
function y_ist= lsq_fun(s,x_soll,y_soll) % This function is called by lsqnonlin. % x is a vector which contains the coefficients of the % equation. X and Y are the option data sets that were % passed to lsqnonlin.
simulation=1;
counter =1;
a=0
mit lsqcurvefit() nimmt die Anfangswerten aber trotzdem in zweiten simulation wieder die Anfangswerten. wie soll dann schreiben das e einfach die x_soll und DrucK(:,3) vergleichen soll wenn nicht stimmt dann weiter simulieren
Hallo,
Danke für deine Hilfe, ich habe jetzt anderes geschrieben. bei der Simulation nimmt immer wieder die Anfangswerte für alle simulationen . wo liegt noch das Probem. ich habe mal gestern eines kleines Beispiel (angehängt) geschrieben und funktionert einfach prima und heute die gleich umgesetzt funktionert aber nicht wie erwartet.
Code:
function y_ist = lsq_fun_final(b) % This function is called by lsqnonlin. % x is a vector which contains the coefficients of the % equation. X and Y are the option data sets that were % passed to lsqnonlin.
simulation=1;
counter =1;
a=0
Ich habe das Problem entdeckt. er wiederholt die Anfangswerte mehrmals bei der Rechnung. warum macht so. warum nicht einmal und dann die nächste werte.
ein.
Dann wirst du mit ziemlicher Sicherheit feststellen, dass nicht genau die gleichen, sondern nur sehr ähnliche Werte verwendet werden. Dies dient dazu, den Gradienten (die Richtung des steilsten Abstiegs) zu schätzen.
ich habe wieder ein Problem. mit Lsqnonlin() varriert die anfangswerten nur geringfügig ohne die richtige ergebnisse zu erreichen. was soll ich noch bei Options einstellen damit ich das problem beseitigen könnte.
ich habe vorher was geschreiben, die von prinzip sehr ähnlich ist wie die Simulation abläuft und funktionert toll , aber bei echte simulation funktionert aber nicht richtig
lsqnonlin geht entlang der Richtung des steilsten Abstiegs, sucht also nach einem lokalen Minimum.
Man muss sich das konkrete Problem im Detail ansehen, um zu den Options etwas sagen zu können. Wenn bestimmte Optionen immer besser wären, wäre das ja die Standardeinstellung.
Die einfachste Möglichkeit, bessere Ergebnisse zu erzielen: bessere Startwerte angeben.
Sollten keine guten Startwerte bekannt bzw. bestimmbar sein, hilft nur globale Optimierung - entweder, indem man in einer for-Schleife verschiedene Startwerte durchtestet oder unter Nutzung der Solver in der Global Optimization Toolbox.
eine variation der Anfangswerte durch eine schleife ist aufwendig. ich habe mal besseres Idee gefunden. In optionen muss man DiffMinChange eingeben. funktionert dann Prima
eine variation der Anfangswerte durch eine schleife ist aufwendig.
Klar, aber oft das einzig zielführende.
Zitat:
In optionen muss man DiffMinChange eingeben. funktionert dann Prima
Es freut mich, dass dir das geholfen hat. Aus den gegebenen Informationen war es für mich leider nicht ersichtlich, dass das funktionieren würde.
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.