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

Parameter einer nichtlineare Funktion bestimmen ga, nlinfit

 

Omisa
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 02.11.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.11.2013, 18:06     Titel: Parameter einer nichtlineare Funktion bestimmen ga, nlinfit
  Antworten mit Zitat      
Hallo,

ich habe eine Funktion (Tustin's Reibungsformel) , die folgendermaßen aussieht:

Code:

Fr = Fc*sign(x)+(Fs-Fc)*exp(-x/vs) +Fv*x
 


Jetzt habe ich Messdaten in der Form von (x,Fr) aufgenommen, also die Reibung abhängig von x. Zu bestimmen sind die Parameter Fc,Fs,vs,Fv

Wie mache ich das am Besten? In dem Paper wird gesagt, sie haben den genetic algorithm benutzt um die Parameter zu erfassen. In matlab habe ich dazu die Funktion "ga" gefunden, ich weiss aber nicht, wie genau die Eingangswerte hier zu wählen sind. Alternativ hat mir auch google "nlinfit" für nonlinear least square angeboten, aber da stehe ich auch vor dem selben Problem, dass ich nicht weiss was der Befehl dazu ist.

Kann mir jemand da weiterhelfen?

Vielen Dank
Private Nachricht senden Benutzer-Profile anzeigen


Bibonaut
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 60
Anmeldedatum: 06.06.13
Wohnort: Berlin
Version: 2013a
     Beitrag Verfasst am: 02.11.2013, 19:59     Titel:
  Antworten mit Zitat      
Hallo,

wenn du die Statistik Toolbox hast, kannst du den Befehl nlinfit benutzen. Was meinst du genau mit "...ich weiß nicht was der Befehl dazu ist"?


Ich habs mal beispielhaft ausprobiert. Da ich deine Daten nicht habe, habe ich einfach mal beliebige Parameter für b gewählt um mir "Messdaten" )(x und y) zu erzeugen.



Code:

b = [1 3 1 4]; % Zur Erzeugung von "Messwerten"
Fr =@(b,x) b(1)*sign(x)+(b(2)-b(1))*exp(-x./b(3)) +b(4)*x; % Die nl-Fcn

% Messwerte erzeugen
x = linspace(0,10,1000);
y = Fr(b,x)+normrnd(0,0.1,1,1000);

beta0 = [1 0 3 2]; % Anfangswerte für die Suche
beta = nlinfit(x,y,Fr,beta0) % Parameter schätzen
 


Falls du die Toolbox nicht hast, kann man das ganze auch "relativ einfach" selbst programmieren. Es sieht bei Wikipedia (finde ich) schwerer aus, als es wirklich ist.
http://en.wikipedia.org/wiki/Non-linear_least_squares

Grüße
Alex
Private Nachricht senden Benutzer-Profile anzeigen
 
Omisa
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 02.11.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.11.2013, 10:34     Titel:
  Antworten mit Zitat      
Vielen Dank für die Antwort. Sie hat mir schon viel weitergeholfen. Hatte die Syntax in der Matlab-Doku nicht genau verstanden. Leider hat mir nlinfit nicht so gute Werte geliefert.

Gibts noch ne möglichkeit, das ganze zu optimieren oder hast du eine Ahnung, wie genau der "ga" Befehl in Matlab instanziiert wird?
Private Nachricht senden Benutzer-Profile anzeigen
 
Bibonaut
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 60
Anmeldedatum: 06.06.13
Wohnort: Berlin
Version: 2013a
     Beitrag Verfasst am: 04.11.2013, 14:08     Titel:
  Antworten mit Zitat      
Hallo,

mit dem Befehl ga kenne ich mich leider nicht aus. nlinfit hab ich nachdem ich deinen Post gelesen habe, auch das erste mal benutzt. Ich nehme mal an, dass die Möglichkeiten von nlinfit mit meinem Beispiel nicht wirklich ausgeschöpft wurden. Hast du dir mal die Optionen für den Befehl angeschaut? Du kannst die Toleranzen und auch die Anzahl der Iterationen ändern.

Woher weißt du, dass dir die Funktion "keine guten Ergebnisse" liefert? Stellt sich natürlich die Frage, was gut ist Wink Ich nehme auch mal an, dass deine nichtlineare Funktion auch nur eine analytische Näherungslösung deines technischen Problems ist und vielleicht dadurch gewisse Abweichungen nicht vermieden werden können?

Viele Grüße
Alex
Private Nachricht senden Benutzer-Profile anzeigen
 
Omisa
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 02.11.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.11.2013, 12:08     Titel:
  Antworten mit Zitat      
Hi Alex,
danke für die Antwort. Ich habe mir die options noch nicht angeschaut, werde es aber nachholen.

Im Prinzip hatte ich dasselbe wie du mit deinem vorgeschlagenen Code gemacht. Zuerst mal Idealwerte für Fs,Fc,vs,Fv definiert. Messwerte mit Rauschen erzeugt und dann nlinfit Schätzwerte für Fs, Fc,vs, Fv generieren lassen. Diese haben nicht wirklich zu den Werten, mit denen ich die Messdaten erzeugt hatte, gepasst.

Matlab hat ja auch ein Curve Fitting Tool bei dem man unterschiedliche Algorithmen, ist man damit vielleicht besser bedient oder hat jemand Erfahrung mit dieser?

Danke
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



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 - 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.