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

Parameteridentifikation mit lsqcurvefit

 

Hofter
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 20.04.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.04.2011, 15:56     Titel: Parameteridentifikation mit lsqcurvefit
  Antworten mit Zitat      
Hallo,

ich soll die Parameter einer Gleichung bestimmen, die einen Relaxationsvorgang in einem Werkstoff beschreibt. Nachdem ich jetzt den ganzen Tag versucht habe, mich mit der Matlab Hilfe durchzukämpfen und ich zu keinem sinnvollen Ergebnis gekommen bin, hoffe ich, dass mir hier jemand helfen kann.

Ich habe mir zunächst ein m-File geschrieben, das die Funktion beschreibt:
Code:

function F=myfun(x,tdata)
F=x(1)+x(2).*log(tdata);
F=(125^(1-x(1))+(x(1)-1)*x(2)*70000.*tdata).^(1/(1-x(1)));


Nachfolgend das Skript, in dem ich versucht habe, die gesuchten Parameter x(1) und x(2) der Funktion mit lsqcurvefit herauszufinden. Mein Problem ist, dass ich bei den Startwerten keine richtige Ahnung habe, ob diese in einem plausiblen Bereich liegen.

Code:


clear all
close all

[filename, pathname] = uigetfile('*.txt; *.dat; *.jpg','Einlesen der Messwerte')

 fileinfo= [pathname, filename];
         

 DATA= dlmread(fileinfo);
 
 tdata=DATA(:,1);
 sigmadata=DATA(:,2);
 
 x0=[5 10] %Festlegung der Startwerte
 

%
[x,resnorm]=lsqcurvefit(@myfun,x0,tdata,sigmadata)
plot(tdata,sigmadata);

t=2400:1:44000;
sigma_r=(125^(1-x(1))+(x(1)-1)*x(2)*70000.*tdata).^(1/(1-x(1)));

hold on
plot(tdata,sigma_r,'r')
grid on
 


Das Programm gibt mir mit diesen Eingaben zwar eine Regressionskurve aus, allerdings ist diese nicht plausibel und kommt der echten Kurve nicht im Geringsten nahe. Habe ich eine Chance, ohne genauere Startwerte eine plausible Lösung zu bekommen? Oder muss ich zu einer anderen Methode greifen, um das Problem zu lösen? Wenn ich den ersten Startwert in der Klammer von x0 um Faktor 10 erhöhe, kann Matlab überhaupt nicht mehr rechnen und bringt folgende Fehlermeldung.
Code:

?? Error using ==> qr
Complex sparse QR is not yet available.

Error in ==> aprecon at 57
   RPCMTX = qr(TM(:,p));

Error in ==> trdog at 47
         [R,permR] = feval(pcmtx,H,pcoptions,DM,DG,varargin{:});

Error in ==> snls at 346
      [sx,snod,qp,posdef,pcgit,Z] = trdog(x,g,A,D,delta,dv,...

Error in ==> lsqncommon at 285
    [x,FVAL,LAMBDA,JACOB,EXITFLAG,OUTPUT,msg]=...

Error in ==> lsqcurvefit at 186
[x,Resnorm,FVAL,EXITFLAG,OUTPUT,LAMBDA,JACOB] = ...

Error in ==> Kurvenfitting at 22
[x,resnorm]=lsqcurvefit(@myfun,x0,tdata,sigmadata)
 


Bin für alle Antworten sehr dankbar.
Private Nachricht senden Benutzer-Profile anzeigen


Thomas84
Forum-Meister

Forum-Meister


Beiträge: 546
Anmeldedatum: 10.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.04.2011, 07:51     Titel:
  Antworten mit Zitat      
Zitat:

Das Programm gibt mir mit diesen Eingaben zwar eine Regressionskurve aus, allerdings ist diese nicht plausibel und kommt der echten Kurve nicht im Geringsten nahe. Habe ich eine Chance, ohne genauere Startwerte eine plausible Lösung zu bekommen?


kommt auf deine Fitfunktion und deine Daten an. Bist du dir sicher das man mit der Funktion die Daten beschreiben kann? In myfun stehen ja schon zwei Funktionen. Welche ist denn die richtige? Vielleicht kannst du ja mal ein Bild mit Daten + Fit posten.

viele Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Phate
Forum-Guru

Forum-Guru



Beiträge: 283
Anmeldedatum: 09.11.09
Wohnort: Stuttgart
Version: R2008b
     Beitrag Verfasst am: 21.04.2011, 08:08     Titel:
  Antworten mit Zitat      
Guten Morgen,

Vl noch eine Frage zu deinem Problem. Willst du IDENTIFIZIEREN oder OPTIMIEREN? Das ist ein mMn ein grundlegender Unterschied und soweit mein Kentnissstand reicht kann Matlab "nur" optimieren.

Zu den Anfangswerten würde ich sagen, dass du auf jedenfall sinnvolle Grenzen eingeben musst um ein plausibles Ergebniss zu bekommen. Haben die Parameter x1 und x2 einen physikalischen Hintergrund (ist stark zu vermuten wenn du Materialien beschreiben willst)?

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

Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 20.04.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.04.2011, 09:15     Titel:
  Antworten mit Zitat      
Danke erstmal für die Antworten. Das in der function ist natürlich Schwachsinn. Habe ich leider übersehen. Es zählt die zweite Funktion, also F=(125...
Und ja, die Parameter x(1) und x(2) haben einen physikalischen Hintergrund. Ich bekomme es mit der curvefitting toolbox schon hin, die Funktion sehr schön anzunähern, allerdings hilft es mir nichts, die Funktion mit einer Fourier-Reihe anzunähern (das Ergebnis wäre hier sehr gut), da dies nicht physikalisch begründbar ist. Außerdem kann ich so die Parameter schlecht ermitteln.

@Thomas84: Die Gleichung ist so aus der Literatur entnommen, demnach müsste sich die Funktion schon so beschreiben lassen.

Mein Ziel ist es, die unbekannten Parameter herauszubekommen. Dazu soll die Funktion bestmöglich angenähert werden. Was ist denn der Unterschied zwischen Identifizierung und Optimierung? Ich bin zu wenig mathematisch bewandert, um diese Frage zu klären. Meiner Meinung nach soll die Funktion optimiert werden. Die optimierten Parameter sollen dann mein Ergebnis sein.

Anbei noch ein Plot der Funktion, von der ich die Parameter bestimmen soll. Einen Fit bekomme ich momentan gar nicht mehr hin..

relax.png
 Beschreibung:

Download
 Dateiname:  relax.png
 Dateigröße:  21.79 KB
 Heruntergeladen:  556 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 21.04.2011, 10:25     Titel:
  Antworten mit Zitat      
Hallo,

was ich versuchen würde:

geht die Formel evtl davon aus, dass bei t=0 angefangen wird? Ich würde von tdata mal sicherheitshalber tdata(1) abziehen, außer diese 2600 ist logisch begründbar.

Um die Anfangsparameter zu schätzen, würde ich versuchen, dieses Gleichungssystem nach x(1) und x(2) zu lösen:

F(t = 2600 bzw. 0, x(1), x(2)) = 123
F(t --> unendlich, x(1), x(2)) = 83

Ausgehend davon sollten sich die Parameter besser optimieren lassen.

Grüße,
Harald
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 - 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.