WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Messwerte in bekannte Funktion "quetschen"

 

madlab
Forum-Fortgeschrittener

Forum-Fortgeschrittener



Beiträge: 86
Anmeldedatum: 15.05.12
Wohnort: Freiburg
Version: 7.11 (R2010b)
     Beitrag Verfasst am: 24.08.2012, 15:36     Titel: Messwerte in bekannte Funktion "quetschen"
  Antworten mit Zitat      
Hallo zusammen,

ich wollte mal nachfragen ob es mit Matlab möglich ist einige Messwerte in eine bekannte Funktion zu "quetschen". Ich kenne polyfit und polyval. Diese führen, wenn ich es richtig verstehe eine Ausgleichsrechnung durch und nähern die übergebenen Punkte dann mit einem Polynom von n-ter Ordnung.
Ich möchte jetzt aber kein Polynom n-ter Ordnung nutzen sondern eine andere, zum Problem passende Funktion f(x,a1,a2,a3) nutzen.

der Fit soll dann so ablaufen dass ich eine bestimmte Anzahl an Werten (x_n,f(x_n)) übergebe und mir dann die Paramete a1,a2 und a3 so bestimmt werden das die resultierende Kurve gut zu den übergebenen Messwerten passt.
Das hört sich für mich nach einer Aufgabe für die curve fitting toolbox an, jedoch habe ich damit bisher nicht gearbeitet und weis nicht ob diese toolbox oder vielleicht sogar matlab von Haus aus etwas in dieser Art kann. Ist so etwas möglich und was benötige ich dazu oder was muss ich beachten?

grüße,

mad
Private Nachricht senden Benutzer-Profile anzeigen


flashpixx
Forum-Guru

Forum-Guru


Beiträge: 355
Anmeldedatum: 19.04.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.08.2012, 15:49     Titel:
  Antworten mit Zitat      
nennt sich http://de.wikipedia.org/wiki/Gradientenverfahren
und kann man evtl mit http://www.mathworks.de/help/toolbox/stats/nlinfit.html
durchführen, ansonsten eben selbst machen, sprich Fehlerfunktion aufstellen, Gradient bestimmen und annähern / optimieren.
Private Nachricht senden Benutzer-Profile anzeigen
 
eey
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 86
Anmeldedatum: 31.03.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.08.2012, 23:05     Titel:
  Antworten mit Zitat      
Code:


function [ Parameter ] = Quetsch_Funktion( x,y,Startwerte)
   
    % Minimierung durchführen
    a = fminsearch(@(a)Guetefunktional(x,y,a),Startwerte);

    % Parameter zurückgeben
    Parameter = a;  

end


function [ Fehler ] = Guetefunktional( x,y,a)
   
    % Deine Funktion
    y_2 = a(1)*x + exp(a(2)) - sin(a(3));

    % Fehler zurückgeben
    Fehler = sum((y - y_2).^2);
end

 
Private Nachricht senden Benutzer-Profile anzeigen
 
madlab
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener



Beiträge: 86
Anmeldedatum: 15.05.12
Wohnort: Freiburg
Version: 7.11 (R2010b)
     Beitrag Verfasst am: 27.08.2012, 10:32     Titel:
  Antworten mit Zitat      
Hallo ihr beiden,

vielen Dank für eure Hinweise.

@eey: ich verstehe noch nicht so ganz wofür der Parameter "Startwerte" der Quetsch_Funktion genutzt wird. Kann ich da einen Vorschlag für a(1), a(2), a(3) machen? Was ist wenn ich noch nicht voraussagen kann wie die werte liegen?
mit x und y übergebe ich die koordinaten meiner messwerte oder?

im prinzip kenne ich nur zwei Dinge: die Rohform meiner funktion y_2, sowie 10 Messpunkte (x_i,y_i). Benötige ich jetzt noch zusätzlich geschätzte sinnvolle werte für a1 bis a3 um sie mit "Startwerte" zu übergeben?

ich glaube ich bin einfach etwas verwirrt wegen der übergabe mittels handle Embarassed
Private Nachricht senden Benutzer-Profile anzeigen
 
eey
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 86
Anmeldedatum: 31.03.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.08.2012, 15:11     Titel:
  Antworten mit Zitat      
Hallo madlab,

Also x und y sind die Vektoren mit deinen Werten, richtig.

"Startwerte" schließlich ist auch ein Vektor, in dem die Startwerte für a1 a2 und a3 stehen. Also zum Beispiel:

Code:
Startwerte = [a1 a2 a3];


Sinnvolle Startwerte "vorherzusagen" ist für eine allgemeine Funktion nicht möglich, allerdings ist fminsearch sehr robust und findet Minima auch bei sehr schlechten Startwerten. Also probier einfachmal ein paar Startwerte aus, dann siehst du das schon.

Grüße,
eey
Private Nachricht senden Benutzer-Profile anzeigen
 
madlab
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener



Beiträge: 86
Anmeldedatum: 15.05.12
Wohnort: Freiburg
Version: 7.11 (R2010b)
     Beitrag Verfasst am: 28.08.2012, 09:57     Titel:
  Antworten mit Zitat      
hi eey,

habe es gestern noch durch ausprobieren herausgefunden und dann auch hinbekommen.
Das Ergebnis ist noch nicht ganz so gut wie erhofft, aber es tut immerhin was es soll Smile eventuell muss ich noch eine etwas passendere funktion als meine bisherige y_2 finden.

danke nochmals für deine Erklärung, ich habe nur etwas länger gebraucht ^^

grüße,

mad
Private Nachricht senden Benutzer-Profile anzeigen
 
flashpixx
Forum-Guru

Forum-Guru


Beiträge: 355
Anmeldedatum: 19.04.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.08.2012, 10:18     Titel:
  Antworten mit Zitat      
Der Matlab-Aufruf ist der Downhill-Simplex-Algorithmus ( http://de.wikipedia.org/wiki/Downhill-Simplex-Verfahren ), d.h. er konvergiert in das nächst gelegene Minimum der Fehlerfunktion.

Es es ist also zwingend erforderlich, dass die Startwerte hinreichend gut gewählt werden. Das System kann nicht bewerten was gute Startwerte sind, somit musst Du diese vorgeben. Bei komplexen Funktionen ist es hilfreich das ganze stochastisch zu kombinieren
Private Nachricht senden Benutzer-Profile anzeigen
 
eey
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 86
Anmeldedatum: 31.03.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.08.2012, 10:26     Titel:
  Antworten mit Zitat      
madlab hat Folgendes geschrieben:
hi eey,

habe es gestern noch durch ausprobieren herausgefunden und dann auch hinbekommen.
Das Ergebnis ist noch nicht ganz so gut wie erhofft, aber es tut immerhin was es soll Smile eventuell muss ich noch eine etwas passendere funktion als meine bisherige y_2 finden.

danke nochmals für deine Erklärung, ich habe nur etwas länger gebraucht ^^

grüße,

mad



Naja, dass es nicht so gut klappt kann 2 Gründe haben.

1.) Wie flashpixx schon erklärt hat.

2.) Deine Modell-Funktion ist nicht geeignet um die Werte hinreichend genau zu repräsentieren.

Du könntest ja einfach mal deine angesetzte Funktion und die Werte, durch die du fitten willst posten, dann können wir dir eventuell etwas mehr helfen.

Grüße,
eey
Private Nachricht senden Benutzer-Profile anzeigen
 
madlab
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener



Beiträge: 86
Anmeldedatum: 15.05.12
Wohnort: Freiburg
Version: 7.11 (R2010b)
     Beitrag Verfasst am: 28.08.2012, 16:48     Titel:
  Antworten mit Zitat      
beispielhafte messwerte hier zu posten macht in meinem fall glaube ich nicht so viel sinn. die messwerte streuen je nach eigenschaft der messreihe extrem (teilweise faktor 10^n). eine messreihe hat aber für sich immer die eigenschaft einer runge-funktion "ähnlich zu sehen". (achtung link zu wiki: http://de.wikipedia.org/w/index.php.....imestamp=20060622210722). eben mit der einschränkung, dass die höhe, die breite und auch die x-position des maximums viel stärker schwankt. deswegen habe ich einen ansatz mit f(x) = a1/(a2+(x-a3)^2) versucht um diese faktoren beeinflussen zu können. Eventuell sollte ich mal noch f(x) = (a1/(a2+(x-a3)^2)) + a4 ansetzen um ein mögliches offset der kurve abfangen zu können.

mit "Das Ergebnis ist noch nicht ganz so gut wie erhofft" habe ich gemeint, dass es zu gebrauchen ist aber noch nicht besser ist als eine interpolation, die ich mit sinnvoll gewählten werten der Messreihe durchführe. Die interpolation hat allerdings den nachteil, dass sie bei Rauschbehafteten messreihen etwas zicken machen kann. ich habe mir erhofft, dass die regression hier einen vorteil hat, scheint sich aber nicht unbedingt zu bestätigen.
evtl könnte eine zukünftige untersuchung sein ob man mit geschickt gewählten funktionen den fit leistungsfähiger gestalten kann als die interpolation aktuell ist.
ich habe erstmal nicht vor das jetzt noch weiter zu verfolgen, bin euch aber sehr dankbar, dass ihr mir geholfen habt den ansatz kennen zu lernen und kurz anzutesten Smile

grüße,

mad
Private Nachricht senden Benutzer-Profile anzeigen
 
flashpixx
Forum-Guru

Forum-Guru


Beiträge: 355
Anmeldedatum: 19.04.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.08.2012, 17:56     Titel:
  Antworten mit Zitat      
madlab hat Folgendes geschrieben:
deswegen habe ich einen ansatz mit f(x) = a1/(a2+(x-a3)^2) versucht um diese faktoren beeinflussen zu können. Eventuell sollte ich mal noch f(x) = (a1/(a2+(x-a3)^2)) + a4 ansetzen um ein mögliches offset der kurve abfangen zu können.


Du scheinst das nicht richtig verstanden zu haben, Du optimierst nicht die Funktion, sondern die Fehlerfunktion ! Die Funktion zu optimieren bringt Dir nichts
Private Nachricht senden Benutzer-Profile anzeigen
 
madlab
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener



Beiträge: 86
Anmeldedatum: 15.05.12
Wohnort: Freiburg
Version: 7.11 (R2010b)
     Beitrag Verfasst am: 29.08.2012, 09:22     Titel:
  Antworten mit Zitat      
hi flashpixx,

kann sein das ich das nicht vollständig verstanden habe. vllt habe ich mich einfach umständlich ausgedrückt Razz
ich wollte damit eigentlich nur sagen, dass wenn die funktion (im beispiel von eey mit y_2 bezeichnet) nicht hinreichend gut meine messwerte wiederspiegeln kann, ich die regression noch so gut machen kann. das ergebnis wird dann trotzdem nicht den wünschen entsprechen.
das wäre dann so als ob ich messwerte, welche in wirklichkeit auf einer gerade liegen mit einer parabel annähern wollte. das wird nie gut hinhauen.
die fehlerfunktion wird doch auch von fminsearch nach dem, von dir beschriebenen downhill-simplex-verfahren optimiert (bzw. minimiert) und nicht von mir. oder verstehe ich da jetzt wirklich was falsch? Embarassed

grüße,

mad
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 29.08.2012, 09:42     Titel:
  Antworten mit Zitat      
Hallo madlab,
Zitat:
das wäre dann so als ob ich messwerte, welche in wirklichkeit auf einer gerade liegen mit einer parabel annähern wollte. das wird nie gut hinhauen.

Anders herum. Eine Gerade ist ja eine besondere Parabel, nämlich eine ohne Krümmung. Und genau die verschwindende Krümmung ist ein Anzeichen (aber kein Beweis!) dafür, dass eine Gerade eine "angemessene" Ausgleichsfunktion ist.
Aber: Eine Funktion, die ungefähr auf einer Parabel liegt, kann man nur schlecht durch eine Gerade approximieren.

Gruß, Jan

PS. Die Shift-Taste Deiner Tastatur scheint defekt zu sein.
Private Nachricht senden Benutzer-Profile anzeigen
 
madlab
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener



Beiträge: 86
Anmeldedatum: 15.05.12
Wohnort: Freiburg
Version: 7.11 (R2010b)
     Beitrag Verfasst am: 29.08.2012, 10:30     Titel:
  Antworten mit Zitat      
hi jan,

so rum ist es natürlich richtig, wenn die anteile mit x^2 wegfallen erhält man eine parabel. da war ich wohl etwas unpräzise ^^
worauf ich eigentlich hinauswollte ist, dass ich eine geeignete funktion y_2 verwenden sollte, wenn ich ein gutes ergebnis erhalten will. dem kann man in zustimmen oder?

grüße,

mad


p.s. vielen danke für den tipp mit der shift-taste Smile da muss wohl in zukunft mal eine neue tastatur ins haus Wink
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 29.08.2012, 11:33     Titel:
  Antworten mit Zitat      
Hallo madlab,

Ja, genau. Man benötigt eine physikalisch motivierte Funktion, die qualitativ den Kurvenverlauf gut beschreibt. Die Verwendung beliebiger Polynome oder Exponential-Funktionen zur Beschreibung eines periodischen Sinus-Signals ist z.B. _suboptimal_. Polynome mit sehr hohem Grad mögen zwar Daten beliebig genau in einem Intervall reproduzieren, aber im Randbereich neigen sie zu hysterischem Überschwingen, so dass ein Fit nicht stabil durchgeführt werden kann.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
flashpixx
Forum-Guru

Forum-Guru


Beiträge: 355
Anmeldedatum: 19.04.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.08.2012, 12:56     Titel:
  Antworten mit Zitat      
Jan S hat Folgendes geschrieben:
Polynome mit sehr hohem Grad mögen zwar Daten beliebig genau in einem Intervall reproduzieren, aber im Randbereich neigen sie zu hysterischem Überschwingen, so dass ein Fit nicht stabil durchgeführt werden kann.


http://de.wikipedia.org/wiki/Polynominterpolation
das habe ich als bekannt vorausgesetzt, denn bei einer Polynominterpolation kann man nur zwischen den Wertgrenzen gesichert interpolieren, alles außerhalb ist nicht mehr definiert.
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 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.