Verfasst am: 25.08.2014, 15:14
Titel: Funktion an Messwerte approximieren
Hallo,
ich habe mit Matlab ein GUI erstellt mit dem ich Messwerte einlesen und plotten kann. Nun möchte ich diese Messwerte mit einer Funktion approximieren. Die Funktion soll die Form
f(x)= (x²-1/x^4)*(2*C01+2*x²*C10) haben. Als Ergebnis möchte ich dann Werte für C01 und C10 bekommen.
Ich hab herausgefunden, das es mit dem fminsearch Befehl funktioniert. Allerdings hat mich ein Blick in die Matlab Hilfe auch nicht schlauer gemacht, ich hoffe ihr könnt mir jetzt helfen.
ja das geht mit fminsearch. Hier ein ausführliches Beispiel:
Ich generiere mir zuerst Beispieldaten, da ich deine Daten nicht habe. Hier kannst du dein echtes "x" und "y" einfach benutzen. Du musst die Startwerte für par0 vermutlich an dein Problem anpassen, da die Optimierung möglicher Weise in ein lokales Minimum fällt, wenn die Startwerte schlecht gewählt sind. Viel Spaß beim Rumprobierne:
%% ----- OBJECTIVE FUNCTION (wird minimiert) ----- % function e = objFun(par)
yfitted = fit_function(x, par);
e = sum((yfitted-y).^2); % minimiere Abstandsquadrat zwischen Fit und Messung y end
%% ----- ERGEBNISSE DARSTELLEN ----- % figure plot(x,y,'ko')% Verrauschte Daten hold on
plot(x,fit_function(x,par_fit),'rx-')% Fit legend('Verrauschte Daten','Optimierte Fit-Funktion')
par
par_fit
Hallo,
auf jeden Fall schonmal Danke für deine Antwort.
Ich bin allerdings leider noch kompletter Anfänger in Matlab, deswegen ist mir noch nicht so klar wie ich den Code einbaue. Die Aktion soll durch einen Pushbutton ausgelöst werden. Muss ich deinen Code dann als seperate function schreiben, die dann in der Callback function aufgerufen werden?
Ist wahrscheinlich Basiswissen, aber hab nix gefunden was es mir verständlich erklärt.
ich benutze keine GUIs. Dafür eventuell noch eine Extrafrage im GUI-Unterforum eröffnen.
Du musst nur irgendwie dafür sorgen, dass x, y und par0 bereitliegen. Alles andere erledigt die Funktion dann. Hier musst du gerade x, y und par0 manuell eintippen. Vielleicht lässt sich das auch mit Klicken in einem GUI lösen.
Viele Grüße,
Nras.
tschraud
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 25.08.2014, 18:32
Titel:
Hallo,
ok sehr gut. x und y hab ich gegeben und eine Näherung für par0 kann ich berechnen. Dann werde ich mal gucken ob ich es irgendwie eingebaut bekomme, bzw wo anders nachfragen. Dir auf jeden Fall schonmal ein Dankeschön!
Grüße
tschraud
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 27.08.2014, 16:56
Titel:
Hallo nochmal,
hab es jetzt geschafft die Funktion so einzubauen, das es mit meinen Daten funktioniert. Hätte nur noch eine Frage bezügliche dieses Punktes.
Code:
C01 = rand();
C10 = rand()*2;
par = [C01, C10];
.
.
par0 = [0.5,1]; % Startwerte für Parameter raten
par0 kann ich abschätze. Kann ich diese Werte dann auch als C01 C10 Werte in dem obigen Code einsetzen, oder warum werden für diese zufällige Werte generiert?
ich habe ja deine Daten nicht zur Verfügung, darum habe ich Beispieldaten erzeugt mit zufälligen Parametern. C01 ist irgendwas zwischen 0 und 1 (Ewartungswert 0.5) und C10 ist irgendwas zwischen 0 und 2 (Erwartungswert 1). Mit denen habe ich dann x und y erzeugt, um später herauszufinden, was wohl C01 und C10 ursprünglich war.
Du hast ja bereits x und y durch eine Messung/Modell/irgendwas gegeben und musst sie nicht erst erzeugen. Schließlich weißt du die Werte für C01 und C10 auch nicht vorher -dann wäre das ja witzlos.
Zusammenfassend:
Du musst die 4 Zeilen unter dem Kommentar BEISPIELDATEN gar nicht benutzen, sondern beginnst erst darunter.
par0 habe ich dann mit den Erwartungswerten für die Variablen besetzt, eben als Startwert.
Viele Grüße,
Nras.
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.