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

Ausgleichs-/ Optimierungsrechnung anhand von Wertepaaren

 

pingo

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.10.2011, 08:43     Titel: Ausgleichs-/ Optimierungsrechnung anhand von Wertepaaren
  Antworten mit Zitat      
Hallo,
und zwar habe ich folgendes Problem:
Ich möchte gern ein Optimierungsproblem lösen. Ich habe Werte x und y und will durch diese eine Funktion legen. Die Residuen der Funktion sollen minimal sein. Daher hab ich mir überlegt lsq zu nehmen. Ich bin auch schon soweit, dass ich weiß, dass man in Matlab den Befehl "lsqcurvefit" benutzten kann, aber irgendwie muss ich immer eine Funktion vorab angeben, die dann schließlich optimiert werden soll.
Ist es denn nicht möglich, dass Matlab ohne Vorgabe sich eine Funktion selber sucht?
Ich würde mich über Hilfe freuen! Gruß


Harald
Forum-Meister

Forum-Meister


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

kurze Antwort: nein.

Das einzige, was du machen kannst, ist verschiedene Modelle zu testen und dann die Güte des Fits (R² oder adjusted R²) vergleichen.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.10.2011, 09:09     Titel:
  Antworten mit Zitat      
danke, das ist natürlich schade...
aber dann sollte es doch machbar sein mit dem curvefitting tool, mit der Fourier Transformation eine Ausgleichsfunktion zu berechnen (das hab ich schon gemacht) und dann mit dieser Funktion weiter zu arbeiten. Ich hab mir die vorgeschlagene Funktion mal rausgeschrieben.
Also ungefähr ao+a1*cos(w*x)+b1*sin(w*x)+...+a8*cos(w*x)+b8*sin(w*x)
wobei ich für a0 bis b8 dann die werte benutzten möchte die mir das curvefitting tool vorschlägt.
Meine Idee die ich jetzt habe bzw was ich ausprobieren möchte ist, ob ich mit der Abfrage "lsqcurvefit" diese funktion noch optimieren kann.
Irgendwie klappt das aber nicht so ganz...
ich definiere mir die Funktion durch ein m-file und ich hab es jetzt auch schon mit diesen anonymous funktion probiert. Wie ich verstehe, akzeptiert matlab noch nicht einmal die Funktion.
Ist die Idee die ich habe nich realisierbar? oder beachte ich etwas entscheidendes nicht?
Vielen Dank und viele Grüße
 
Harald
Forum-Meister

Forum-Meister


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

das Curvefitting Tool gibt dir ja schon die optimalen Werte. Eine weitere Optimierung ist also nicht sinnvoll.
Falls der Fit sehr schlecht aussieht, lag das an schlechten Startwerten. Wenn du also beim Ergebnis weitermachst, wird es nicht besser werden.

Poste doch bitte genauer deinen Code, sonst ist es schwierig, dir weiterzuhelfen.

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



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.10.2011, 10:50     Titel:
  Antworten mit Zitat      
hallo,

Code:
function [f] = fun( x )
x=(0:1/2:24-1/2)';
f=1.001+0.007047 * cos(0.2609*x)  -0.02456*sin(0.2609*x)  - 0.02247*cos(0.2609*x) + 0.00947*sin(0.2609*x) - 0.003493*cos(0.2609*x) + 7.509e-005*sin(0.2609*x) + 0.004091*cos(0.2609*x) - 0.01248*sin(0.2609*x) - 0.006539*cos(0.2609*x) - 0.006799*sin(0.2609*x) - 0.002358*cos(0.2609*x) - 0.005588*sin(0.2609*x)  - 0.002936*cos(0.2609*x) + 0.005285*sin(0.2609*x) + 0.0008448*cos(0.2609*x) -0.001694*sin(0.2609*x);
end


das ist nun die funktion die mir das curvefitting tool gibt (ich hab es in ein funkt. m-file geschrieben). Die Funktion im curvefitting tool sieht schon gut aus. Jedoch wollte ich sie jetzt noch gern verändern, sodass die Residuen zu den gegebenen Werten minimal werden.Das müsste ja mit der Methode der kleinsten Quadrate gehen.
die funktion "fun" akzeptiert matlab mittlerweile schon.
dann hab ich mit den Befehl lsqcurvefit probiert.

z=lsqcurvefit(fun,0,x,y)

??? Error using ==> lsqfcnchk at 111
FUN must be a function, a valid string expression, or an inline function object.

Error in ==> lsqnsetup at 34
funfcn = lsqfcnchk(FUN,caller,lengthVarargin,funValCheck,flags.grad);

Error in ==> lsqcurvefit at 196
[funfcn_x_xdata,mtxmpy_xdata,flags,sizes,funValCheck,xstart,lb,ub,EXITFLAG, ...

so wie ich das verstehe, greift der begriff lsqcurvefit also jetzt auf die optimization toolbox. die files in denen die fehler stecken wollt ich jetzt nich auch noch posten, die sind ewig lang...
also meinst du es ist sinn frei die methode der kleinsten quadrate auf die mit fouriertransfo ermittelte funktion anzuwenden?

Grüße

Jan S: Bitte Code-Umgebung verwenden - Danke
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 20.10.2011, 15:16     Titel:
  Antworten mit Zitat      
Hallo,

Code:

Ohne "@" ist es ein Aufruf der Funktion, mit "@" ein Zeiger auf die Funktion.

Gruß, Jan
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: 20.10.2011, 16:11     Titel:
  Antworten mit Zitat      
Hallo,

lsqcurvefit erwartet eine Funktion
y = fun(a,x)
wobei a die Modellparameter sind. Wo sind bei dir die Modellparameter?

Aber lies doch bitte vor allem den anderen Kommentar nochmal:
Zitat:
das Curvefitting Tool gibt dir ja schon die optimalen Werte. Eine weitere Optimierung ist also nicht sinnvoll.


Das einzige, was das Curve Fitting Tool mit der Fouriertransformation ermittelt, dürften sinnvolle Startwerte für die Frequenzen sein.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.10.2011, 14:03     Titel:
  Antworten mit Zitat      
hey, ich hab die letzte Woche an meinem Problem gearbeitet, bzw. andere Lösungsansätze verfolgt, leider haben sie mich noch nicht zum ziel geführt, daher bin ich jetzt wieder bei meiner ursprünglichen Idee.

Ich habe mir noch einmal durch den Kopf gehen lassen, was du geschrieben hast. Ich verstehe nicht was du mit diesem Satz meinst:

Zitat:
Das einzige, was das Curve Fitting Tool mit der Fouriertransformation ermittelt, dürften sinnvolle Startwerte für die Frequenzen sein.


grüße
 
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.