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

Kurve mit negativer Steigung erzwingen

 

Jonadei
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 39
Anmeldedatum: 14.08.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.10.2012, 14:19     Titel:
  Antworten mit Zitat      
Nein, das ist mir schon klar. Ich stand nur wie so oft auf dem Schlauch. Welche Parameter würdest du setzen? Ich denke man muss ein bisschen rumprobieren...
Private Nachricht senden Benutzer-Profile anzeigen


MaFam
Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 24.10.2012, 14:28     Titel:
  Antworten mit Zitat      
Das muss man schon systematisch durch einen Optimierer machen lassen. Hast du die Global Optimization Toolbox oder die Genetic Algorithm Toolbox?
Private Nachricht senden Benutzer-Profile anzeigen
 
Jonadei
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 39
Anmeldedatum: 14.08.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.10.2012, 14:35     Titel:
  Antworten mit Zitat      
Ja, ich hab die Global Optimization Toolbox, aber noch nie das Vergnügen sie zu benutzen
Private Nachricht senden Benutzer-Profile anzeigen
 
MaFam
Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 24.10.2012, 14:48     Titel:
  Antworten mit Zitat      
Dann wird das jetzt geschehen... Very Happy

Code:

%Modellfunktion - Trigonometrische Funktion mit linearem Trend
function y=TriModel(xm,ym,par,normdegree)
   % y=a*x+b*cos(c*x) +d
    ya=par(1)*x + par(2)*cos(par(3)*x) + par(4);
    % Norm entsprechend normdegree
    y=sum((abs(ym-ya)).^normdegree);
end
 


Aufruf des Genetischen Algorithmus:

Code:

% In den Optionen die Anzahl der Generationen möglichst weit raufsetzen
opts=gaoptimset(...);
% normdegree sollte erstmal 2 sein, später auch mal 1 probieren
[paropt]=ga(@(par) TriModel(xm,ym,par,normdegree), 4, opts);
 


xm und ym sind deine zu approximierenden Daten. Je nachdem, wie das ganze dann ausschaut, muss man die Modellfunktion anpassen oder Nebenbedingungen an ga() übergeben. Probiere das aber erstmal aus.

Zum Einstellen der Optionen für ga() bitte selber mal recherchieren...
Private Nachricht senden Benutzer-Profile anzeigen
 
Jonadei
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 39
Anmeldedatum: 14.08.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.10.2012, 15:19     Titel:
  Antworten mit Zitat      
Vielen Dank, ich werde das probieren. Nur habe ich trotzdem ein paar Fragen, da es mich offen gestanden überfordert.

Die Werte, mit welchen man in die Funktion TriModel geht sind mir bis auf "par" klar. Auf was setzt man die Variable initial?

Ist die Anzahl der Generationen mit 100 in Ordnung?

Danke schonmal, ich hätte ehrlich gesagt nicht gedacht, dass mein Problem so komplex ist (also zumindest für mich) Very Happy
Private Nachricht senden Benutzer-Profile anzeigen
 
MaFam
Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 24.10.2012, 15:24     Titel:
  Antworten mit Zitat      
Na, par(1-4) sind die Parameter der Modellfunktion. Dafür müssen keine Startwerte angegeben werden. Das macht ga() selbst.

100 als Anzahl der Generationen würde ich jetzt mal als zu wenig betrachten. Das entspricht nur meiner Erfahrung. Fang mit mind. 1000 an.
Private Nachricht senden Benutzer-Profile anzeigen
 
Jonadei
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 39
Anmeldedatum: 14.08.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.10.2012, 15:35     Titel:
  Antworten mit Zitat      
Ok verstehe!
xm entspricht also xx von vorhin, analog yy, oder?
Private Nachricht senden Benutzer-Profile anzeigen
 
MaFam
Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 24.10.2012, 15:57     Titel:
  Antworten mit Zitat      
Ne, eigentlich nicht. Very Happy xm sind die x-Werte deiner Messdaten.
Private Nachricht senden Benutzer-Profile anzeigen
 
Jonadei
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 39
Anmeldedatum: 14.08.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.10.2012, 16:03     Titel:
  Antworten mit Zitat      
Gut, dann schaut das jetzt so aus.

Code:
function y=TriModel([b]x[/b],ym,par,normdegree)
   % y=a*x+b*cos(c*x) +d
    ya=par(1)*x + par(2)*cos(par(3)*x) + par(4);
    % Norm entsprechend normdegree
    y=sum((abs(ym-ya)).^normdegree);
end


Und als Input wirklich(?) folgendes:

x aus
Code:
x=min(xx):4:max(xx);

und y aus
Code:
y = -1*x+1;


Als Ergebnis erhalten ich vier Werte.
Private Nachricht senden Benutzer-Profile anzeigen
 
MaFam
Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 24.10.2012, 16:22     Titel:
  Antworten mit Zitat      
Du machst mich fertig... Shocked Very Happy Ich melde mich heute Abend nochmal.
Private Nachricht senden Benutzer-Profile anzeigen
 
Jonadei
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 39
Anmeldedatum: 14.08.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.10.2012, 16:23     Titel:
  Antworten mit Zitat      
es tut mir wirklich leid, dass ich solche Umstände bereite, aber wie gesagt ist es das erste mal, dass ich damit arbeite Smile bis dann
Private Nachricht senden Benutzer-Profile anzeigen
 
MaFam
Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 24.10.2012, 18:20     Titel:
  Antworten mit Zitat      
Also, auf der ersten Seite dieses Threads, im 3. Beitrag hast du doch eine Grafik deiner Messwerte hochgeladen. Diese möchtest du durch eine Modellfunktion annähern/approximieren, oder?

Wenn dem so ist, dann sind das genau die x- und y-Werte dieser Messpaare, die als xm und ym in die Funktion TriModel(...) eingehen.

Nach der Regression erhält man Parameter (par), welche Optimalitätsbedingungen erfüllen. Dann nimmt man diese Paramter und die Modellfunktion und wertet diese aus. Das wären dann die xx und yy. Lass uns am besten Schritt für Schritt vorgehen.

Und noch was anderes. Wenn man sich die Grafik auf Seite 1 im 3. Beitrag anschaut, dann stellt man fest, dass die Werte wellenförmig osszilieren. Es ist eben doch der Fall, dass es lokale Optima gibt, also lokal ist die Steigung doch kurzweilig positiv. Ich würde dieses Verhalten nicht ausschließen und die Modellfunktion dieses Verhalten adaptieren lassen...

Ich hoffe, jetzt ist der grobe Fahrplan erstmal klar. Rolling Eyes
Private Nachricht senden Benutzer-Profile anzeigen
 
Jonadei
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 39
Anmeldedatum: 14.08.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.10.2012, 18:50     Titel:
  Antworten mit Zitat      
Super! Danke für diese Erklärung. Ich war nur eben verwirrt, ob diese Geschichte

Code:
x = sort(x, 'descend');
 x = unique(x);
y = -1*x+1;
xx = min(x):1:max(x);
yy = spline(x,y,xx);


davor oder danach kommt.
Die x-Werte stellen lediglich die Abstände dar, ich hab sie so abgeleitet:
Code:
x = (0:1:numel(daten)-1);

Die y-Werte sind die eigentlichen Daten. Zur Info: Es ist ja nur ein Array.

Nach der TriModel-Funktion erhalte ich vier Werte
Code:
0,180817304682461   -3,10561811196745   0,0178121853487101   19,5282588625769
 


Wie gehts nun weiter?
Private Nachricht senden Benutzer-Profile anzeigen
 
MaFam
Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 24.10.2012, 18:59     Titel:
  Antworten mit Zitat      
Hm, die Werte gefallen mir nicht. Kannst du mir irgendwie deine Messwerte zukommen lassen? Vielleicht in Form einer txt-Datei?
Private Nachricht senden Benutzer-Profile anzeigen
 
Jonadei
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 39
Anmeldedatum: 14.08.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.10.2012, 19:03     Titel:
  Antworten mit Zitat      
Klar! Ich hab die Werte zu einem Spaltenvektor konvertier. Also davor umdrehen (y').

y.txt
 Beschreibung:

Download
 Dateiname:  y.txt
 Dateigröße:  19.39 KB
 Heruntergeladen:  540 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite Zurück  1, 2, 3, 4  Weiter

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.