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

Approximation einer Funktion

 

Fat_Tony
Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 29.11.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.07.2010, 09:46     Titel: Approximation einer Funktion
  Antworten mit Zitat      
Guten Tag,

ich habe an einem Versuchsstand Messwerte aufgenommen und möchte diese nun durch eine Funktion approximieren.

Ein Bild der aufgenommenen Messergebnisse hab ich angehangen.
Approximiert werden soll das ganze nun durch die Funktion:

Y(x) = A*e^(D*x)+B*e^(E*x)+C

A-E sind dabei frei wählbar.
Welche Möglichkeiten bzw. Funktionen stehen mir da zur Verfügung?

Gruß Dennis

Unbenannt-1.jpg
 Beschreibung:

Download
 Dateiname:  Unbenannt-1.jpg
 Dateigröße:  109.02 KB
 Heruntergeladen:  1842 mal
Private Nachricht senden Benutzer-Profile anzeigen


josekamara
Forum-Meister

Forum-Meister


Beiträge: 529
Anmeldedatum: 26.04.08
Wohnort: München
Version: ---
     Beitrag Verfasst am: 03.07.2010, 10:10     Titel:
  Antworten mit Zitat      
Du kannst z. B lagrange´sche Polynom verwenden. Dabei stimmen die Funktionwerte mit der Messwerten überrein.
_________________

Simulation
Private Nachricht senden Benutzer-Profile anzeigen
 
Fat_Tony
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 29.11.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.07.2010, 11:33     Titel:
  Antworten mit Zitat      
Gibt es da eine Funktion für ?
Kann ich dafür vieleicht nicht polyfit verwenden?
Private Nachricht senden Benutzer-Profile anzeigen
 
Blackbrook
Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 06.02.09
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 04.07.2010, 14:33     Titel:
  Antworten mit Zitat      
Fat_Tony hat Folgendes geschrieben:
Gibt es da eine Funktion für ?
Kann ich dafür vieleicht nicht polyfit verwenden?


Das wäre mein Vorschlag gewesen:

Code:

p = polyfit(t,u,3);                         %ausgleichsgerade vom grad 3
 


wobei t der Zeitvektor is und u die Messpunkte.

Viele Grüße,

Blackbrook
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 04.07.2010, 16:41     Titel:
  Antworten mit Zitat      
Hallo,

polyfit ist ausschließlich zum Fitten von Polynomen gedacht. Die gewünschte Kurve ist eindeutig keines. Empfohlene Befehle:
nlinfit (Statistics Toolbox)
cftool (Curve Fitting Toolbox)

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Fat_Tony
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 29.11.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.07.2010, 08:15     Titel:
  Antworten mit Zitat      
Zitat:
polyfit ist ausschließlich zum Fitten von Polynomen gedacht. Die gewünschte Kurve ist eindeutig keines.


Genau so ist es, es muss an die vorgegebene Funktion angenährt werden.
Leider hab ich hier im Labor nur Matlab 2006a.
Da sind die tools nicht dabei, oder muss ich die sowieso zusätzlich laden?

Hab höchstens "Basic Fitting" dabei, das kann aber leide nicht nach vorgegebenen Funktionen Approximierten.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 05.07.2010, 08:44     Titel:
  Antworten mit Zitat      
Hallo,

gib mal folgendes ein:
Code:

Taucht da zumindest die Statistics Toolbox oder Optimization Toolbox auf? Ohne zumindest eines dieser beiden sehe ich keine Möglichkeit.

Diese Toolboxen setzen auf MATLAB auf und werden von Mathworks zusätzlich zu MATLAB vertrieben. Es hängt von der gekauften Lizenz ab, was man zur Verfügung hat und was nicht.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Fat_Tony
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 29.11.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.07.2010, 09:43     Titel:
  Antworten mit Zitat      
Code:
Optimization Toolbox                                  Version 3.0.4      (R2006a)

Die hab ich dabei.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

Dann schau dir mal
Code:

an. Ich hoffe, das gabs damals schon.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Fat_Tony
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 29.11.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.07.2010, 11:52     Titel:
  Antworten mit Zitat      
Ja hab es gefunden.

wenn ich das richtig verstanden habe muss ich zunächst einmal eine Funktion erstellen. In meinem Fall wäre das:

Code:
function F = myfun(xdata)
F = A*exp(D*xdata)+B*exp(E*xdata)+C);


Diese Speicher ich unter myfun.

Anschließend erstelle ich zwei Arrays mit den x und y Werten und dem Bereich in dem ich approximieren möchte:

Code:
xdata = [0.147297615678815 0.184132493148873 0.218806593634651 0.253135125518017 0.286922573800298 0.320639702121072 0.354278754104438 0.689644889909315  1.082478644626736 1.669327502579287 2.511421644581166 ];
ydata = [0.147428533987294 0.147636329987273 0.148467468040609 0.149099745585032 0.149646142299415 0.149998160127214 0.150285545144664 0.148564126348714 0.138905173771628 0.120096678957557 0.101018486020207  ];
xo = [0; 15];
 


Aber wie muss ich jetzt lsqcurvefit anwenden?

Code:
[A,B,C,D,E, resnorm] = lsqcurvefit(@myfun,xo,xdata,ydata)


?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 05.07.2010, 12:02     Titel:
  Antworten mit Zitat      
Hallo,

schon mal einen Blick in die Doku geworfen? Dann sollte eigentlich klar werden, dass es so nicht gehen kann. Es muss ein Parametervektor übergeben werden:

Code:
function F = myfun(A, xdata)
F = A(1)*exp(A(2)*xdata)+A(3)*exp(A(4)*xdata)+A(5));


Der Aufruf dann mit:
Code:
[bestA, resnorm] = lsqcurvefit(@myfun,xo,xdata,ydata)


xo muss ein Vektor mit 5 Elementen sein, der die Startwerte für die Parameter enthält.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Fat_Tony
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 29.11.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.07.2010, 14:21     Titel:
  Antworten mit Zitat      
Danke das funktioniert gut Very Happy
Private Nachricht senden Benutzer-Profile anzeigen
 
Gastausdemnorden

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.12.2011, 13:26     Titel:
  Antworten mit Zitat      
ich weiß dieses Thema ist schon alt, aber es passt gerade so gut, bevor ich jetzt ein neues aufmache...
ich habe es genau so gemacht wie hier beschrieben, mit lsqcurvefit,
aber ich bekomme eine Fehlermeldung:
"Function definitions are not permitted in this context"
warum soll ich mir keine funktion definieren dürfen??
danke schonmal Smile
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 29.12.2011, 14:46     Titel:
  Antworten mit Zitat      
Hallo,

eine Funktion muss generell in einer eigenen Datei stehen. Es gibt Ausnahmen, aber die treffen bei dir offensichtlich nicht zu.

Insbesondere muss das "function" - Schlüsselwort am Anfang der ersten Code-Zeile stehen, und man kann nicht in einem Skript unten eine Funktion anhängen.

Falls das dein Problem nicht löst, bitte den entsprechenden Code posten.

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