Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Bücher:

Studierende:
weitere Angebote

Partner:


Vermarktungspartner


Forum
      Option
[Erweitert]
  Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Fit einer Exponentialfunktion durch y=2?

 

punsel
Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 23.01.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.09.2013, 13:15     Titel: Fit einer Exponentialfunktion durch y=2?
  Antworten mit Zitat      
Hallo,

seit Tagen sitze ich an einem kleinen Problem und zerbreche mir den Kopf. Ich habe einen Datensatz, von dem ich (aufgrund des Physikalischen Hintergrundes) annehmen kann, dass die Datenpunkte um eine Exponentialfunktion liegen. Mit anderen Worten, ich kann annehmen, dass meine Daten mit einer Exponentialfunktion gut zu beschreiben sind.

Ich kan auch einfach eine entsprechende funktion finden und alles passt soweit sehr gut.
Allerdings habe ich ein kleines Problem: ein Datenpunkt ist negativ und kann deswegen nicht beruecksichtigt werden. Dass dieser Datenpunkt negativ ist, liegt an einigen umformungen und der Kalibrierung meiner Daten. Physikalisch ist ein negativer Wert unmoeglich und der Wert liegt nur einen Bruchteil der Standardabweichung, die ich fuer diesen Punkt annehmen kann, unter Null.

Dieser eine Punkt ist sehr wichtig, also kann ich ihn nicht einfach ignorieren. Physikalisch richtig waere es, den Punkt als extrem klein, aber positiv zu werten, aber das waere natuerlich mathematisch das falsche Vorgehen.

Wenn ich nun zu allen Datenpunkten 1 addiere aendern sich natuerlich die Exponentialfunktion, die die Daten am besten beschreibt - nicht nur in der vertikalen Lage, sondern auch in der lokalen Steigung bei einem gegebenen x-Wert. Anders ausgedrueckt: wen ich eine logarithmische y-Achse benutze aendert sich die Steigung der Geraden, die meine Daten beschreibt, wenn ich einen festen Wert zu meinen Daten addiere.

Allerdings liesse sich dieses Problem umgehen, wenn ich zu meinen Daten einen Wert A addiere (z.B. A=1) und dann eine Exponentialfunktion der Form Y=e^bx + A finde, um die Daten zu beschreiben. Das heisst, wenn A=1, muesste ich einen best fit fuer eine Exponentialfunktion finden, die durch Y=2 verlaeuft.

Mir fehlt nun leider jegliche Idee, wie ich diese Funktion finde. Ich nehme an, es muss ein Iterationsverfahren benutzt werden, aber das bekomme ich alleine leider nicht hin.

Hat jemand eine Idee? Hier ist ein Beispiel, wie die Daten aussehen koennten:

x=
0.24
0.18
0.32
0.26
0.42
0.34
0.285

y=
0.379
-0.058
0.574
0.701
0.922
0.528
0.409

Zuletzt bearbeitet von punsel am 04.09.2013, 13:34, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen


Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 04.09.2013, 13:34     Titel:
  Antworten mit Zitat      
warum geht denn ein curvefit nicht ?
ich hätte es so gemacht
Code:
ydata=[0.379,-0.058,0.574,0.701,0.922,0.528,0.409];
xdata=[0.24,0.18,0.32,0.26,0.42,0.34,0.285];
[xdata,I]=sort(xdata);
ydata=ydata(I);
x0=rand(1,2);
f=@(para,x) para(1)*exp(para(2)*x);
[x, resnorm]=lsqcurvefit(f,x0,xdata,ydata);
plot(xdata,ydata)
hold all
plot(min(xdata):0.01:max(xdata),f(x,min(xdata):0.01:max(xdata)))
legend('data','fit')

_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
punsel
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 23.01.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.09.2013, 13:39     Titel:
  Antworten mit Zitat      
Danke fuer die schnelle Antwort!

Wenn ich das richtig verstehe, sieht das allerdings sehr gut aus. Allerdings kennt meine Matlab Version "lsqcurvefit" nicht - ich brauche wahrscheinlich die Optimization toolbox?
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 04.09.2013, 13:45     Titel:
  Antworten mit Zitat      
ja dafür braucht man die optimization tool box. in der docu ist meiner meinung nach aber auch ein beispiel wie man einen fit mittels fminsearch macht. das ist etwas umständlicher aber könnte auch klappen.
http://www.mathworks.de/de/help/mat.....ing-via-optimization.html
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
punsel
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 23.01.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.09.2013, 13:46     Titel:
  Antworten mit Zitat      
Super, dann habe ich ja erstmal etwas Lesestoff.
Vielen Dank!
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 04.09.2013, 13:51     Titel:
  Antworten mit Zitat      
habs grade getestet. liefert das gleiche ergebniss. und das beispiel in der doc ist fast genau das was du brauchst außer das du das - vor lamda wegmachen musst.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
punsel
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 23.01.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.09.2013, 14:01     Titel:
  Antworten mit Zitat      
Jepp, ich habe es auch getestet und das Ergebnis ist gut.

Danke nochmal, damit haetten wir zumindest mein Problem geloest Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
MaraBelle
Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 24.02.15
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 20.11.2018, 18:24     Titel:
  Antworten mit Zitat      
Ich habe eine ähnliches Problem. Ich muss Daten an die Form
Code:

a*exp((-x/b)^c)
 

anfitten. Ich hätte jetzt die Formel von Winkow

Zitat:

f=@(para,x) para(1)*exp(para(2)*x);


folgendermaßen angepasst:
Code:

f=@(para,x) para(1)*exp((-x/para(2))^para(3));
 


Leider ist es doch nicht so einfach...
Außerdem möchte ich als Ausgabe gerne die Faktoren a, b und c ausgegeben haben. Kann mir bitte jemand helfen?
Danke schonmal im Voraus!
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 19.278
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2014a
     Beitrag Verfasst am: 20.11.2018, 19:06     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Leider ist es doch nicht so einfach...

An sich schon. Was genau hast du versucht und welche genauen Probleme sind dabei aufgetreten?

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
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
.



goMatlab ist ein Teil des goForen-Labels
goForen.de goMATLAB.de goLaTeX.de


 Impressum  | Nutzungsbedingungen  | Datenschutz  | Werbung/Mediadaten | Studentenversion | FAQ | goMatlab RSS Button RSS


Copyright © 2007 - 2018 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
Partner: LabVIEWforum.de

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.