|
|
Messwerte fitten mit rekursiver Summenfunktion |
|
der_Maddin |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 08.04.2009, 10:52
Titel: Messwerte fitten mit rekursiver Summenfunktion
|
|
Hallo zusammen,
ich habe Messdaten, die eine exponentiell ansteigende Kurve beschreiben. Ich möchte diese Messwerte gerne mit einer bestimmten Funktion abbilden. Allerdings ist dies eine rekursive Summenfunktion (siehe .doc-Datei).
Ist es Eurer Meinung nach prinzipiell möglich eine Art Optimierung (lsqcurvefit o.ä.) laufen zu lassen, bei der die Parameter a, b und c so lange variiert werden, bis die Kurve optimal auf die Messerwerte passt?
Für Tips und Hinweise wäre ich sehr Dankbar!
Gruß,
der Maddin
Beschreibung: |
|
Download |
Dateiname: |
Funktion.doc |
Dateigröße: |
16.5 KB |
Heruntergeladen: |
973 mal |
|
|
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 08.04.2009, 12:42
Titel:
|
|
Das sollte gehen.
Zu berücksichtigen:
- eine ausreichende Anzahl Messwerte (min. 20, besser ~100)
- wenn Resultate trotzdem unbefriedigend sind: bessere Startwerte
|
|
|
der_Maddin |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 08.04.2009, 15:35
Titel:
|
|
na das stimmt mich ja schonmal optimistisch
Ich habe die Funktion jetzt so dargestellt:
% A ist x(1)
% b ist x(2)
% d ist x(3)
B = 3;
for i=1:210000
if i==1
f(i) = x(1)* exp(x(2)*B);
else
f(i) = f(i-1) + x(1) * exp( x(2)*B+x(3)*f(i-1) );
end
Es sind zwar nicht sonderlich viele Messdaten, aber ein Beispiel für den Anfang für x- und y-Daten ist:
xdata = [0 , 120000, 150000, 170000, 187500, 210000]';
ydata = [0.9, 1 , 1.05 , 1.1 , 1.15 , 1.2 ]';
Aber wie könnte ich jetzt am geschicktesten vorgehen, um unter Variation von x(1), x(2) und x(3) die Messdaten optimal abzubilden? ...ist ja doch irgendwie nicht so einfach wie ein "normales" curve-fitting
Kann mir da jemand auf die Sprünge helfen?
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 08.04.2009, 18:42
Titel:
|
|
Die Formel stimmt nicht mit der im WORD-Dokument überein. Dort wird D_i (?) aus einer Summe gebildet. Was ist n?
Mir kommt die Formel im WORD-Dokument komisch vor. Bitte auf Tippfehler u.ä. überprüfen.
|
|
|
Lucia |
Forum-Fortgeschrittener
|
|
Beiträge: 55
|
|
|
|
Anmeldedatum: 19.03.09
|
|
|
|
Wohnort: ---
|
|
|
|
Version: R2008b
|
|
|
|
|
|
Verfasst am: 09.04.2009, 09:37
Titel:
|
|
Wenn ich es richtig verstehe, ist aus D f geworden? Prinzipiell würde die Funktion so aussehen:
Dann kann man lsqcurvefit z.B. so aufrufen:
Vermutlich funktioniert das aber nicht besonders gut! Kann man denn evtl. die Schrittweite erhöhen, z.B. auf 100? Also:
und
|
|
|
der_Maddin |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 09.04.2009, 14:50
Titel:
|
|
Hallo Harald,
die Formel im Word-Dokument soll schon so sein, wenn dann habe ich sie vielleicht in Matlab falsch umgesetzt. Ich wusste nicht, wie ich es mit einer Summenfunktion machen kann, also habe ich eine Schleife genommen. Aber da stimmte tatsächlich etwas nicht. Ich habe es nochmal umgeändert:
% a ist x(1)
% b ist x(2)
% c ist x(3)
B = 2;
for i=1:210000 % Zählvariable N der Summenfunktion
if i==1
D(i) = x(1)* exp(B*x(2)); % erstes Summenglied, da D(0)=0
else
D(i) = D(1) * exp( x(3)*D(i-1) );
end
Ich müsste doch nun 210000 "D-Werte" erhalten. "D_1" bis "D_210000" sind quasi meine Y-Werte und i=1 bis i=210000 trage ich auf der x-Achse auf. Nun sollen x(1), x(2) und x(3) so zwischen 0 und 1 variiert werden, dass die o.g. Messwerte bzw. deren Kurve optimal getroffen wird. Wie stelle ich sowas an?
|
|
|
der_Maddin |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 09.04.2009, 14:54
Titel:
|
|
Danke Lucia, ich werde über die Ostertage mal ein wenig rumprobieren und gebe dann Feedback wies geklappt hat!
|
|
|
|
|
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
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2024
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
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.
|
|