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

Optimierung mit Matlab (allgemeine Diskussion)

 

tompie
Forum-Guru

Forum-Guru


Beiträge: 260
Anmeldedatum: 19.09.07
Wohnort: München
Version: immer alles
     Beitrag Verfasst am: 30.04.2008, 12:27     Titel:
  Antworten mit Zitat      
Hallo,

das geht definitiv viel schneller und ohne for-Schleife:

Code:
function matIndex = genIndex(N,T,s)

A = (1:T)';
p = floor((N-T+1)/s);
B = (0:s:(p-1)*s);
matIndex = repmat(A,[1,p]) + repmat(B,[T,1]);


Diese Funktion berechnet die erforderlichen Indizes aus dem Datensatz - wobei ich übrigens mit 1 anfange und nicht mit s.

Die Maximumsberechnung sieht in Deinem Beispiel dann so aus:

Code:
Index = genIndex(length(ringlaser),T,s);
matRinglaser = ringlaser(Index);
PEAKRING = max(matRinglaser);


Man schreibt also die Daten (ringlaser) immer um s versetzt in eine Matrix (matRinglaser), die entsprechende Indizierung wird in der function genIndex vorgenommen. Mit max erhält man dann jeweils die Maxima jeder Spalte.

Das sollte eigentlich wie der Blitz durchlaufen.

Gruß tompie
Private Nachricht senden Benutzer-Profile anzeigen


twinky

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.04.2008, 15:21     Titel: optimierungsproblem
  Antworten mit Zitat      
danke erstmal fuer deine schnelle antwort!!
also ich habs genauso gemacht wie du gesagt hast. die Idee ist toll. aber leider funktioniert das jetzt nur fuer kleine Zeitfenster (kleines T). Bei groesseren T (~>100) bricht er mir jetzt ab und sagt out of memory. Die Matrix matRinglaser in der die Daten jetzt spaltenweise stehn wird wohl zu gross..
Der Datensatz hat 1.7 mio punkte; durch den Schritt s = 10 verringerts sich natuerlich;
die Matrix matRinglaser 100x172169 kann er mir noch anzeigen aber ich braeuchte T in der groessenordnung 70000 was dann zu einer 70000x172169 matrix fuehrt. ich glaub das da der Haken liegt, oder?
 
tompie
Forum-Guru

Forum-Guru


Beiträge: 260
Anmeldedatum: 19.09.07
Wohnort: München
Version: immer alles
     Beitrag Verfasst am: 30.04.2008, 15:41     Titel:
  Antworten mit Zitat      
Hallo,

wie kriegst Du denn die 1.7 mio Datenpunkte überhaupt in den Workspace? Ich denke, da liegt das Problem. Natürlich benötigt die Indizierung nochmal Speicher, aber das könnte man evtl. durch Verwendung von uint32 reduzieren.

Da hilft nur eins: Die Daten in kleinere Blöcke zerlegen.

Gruß tompie
Private Nachricht senden Benutzer-Profile anzeigen
 
twinky

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.04.2008, 17:33     Titel: optimierungsproblem
  Antworten mit Zitat      
also das reinladen der daten geht sehr schnell, dauert ein paar sekunden. auch einfache berechnungen mit dem ganzen datensatz wie zB. alle punkte quadrieren dauert nur sekunden. leider kenn ich mich zu wenig aus um sagen zu koennen was genau denn soviel zeit, bzw. speicher beansprucht..
ich kanns leider erst wieder am freitag weiterprobieren weil ich daheim kein matlab hab
 
twinky

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.05.2008, 12:04     Titel: optimierungsproblem
  Antworten mit Zitat      
hallo,
also ich habs mal mit uint32 und meiner for schleife versucht, aber das bringt auch nicht viel
wenn ichs mit deinem system mach ist leider das problem dass die matrizen beschraenkt sind (auf ~10000x10000 eintraege)
ich muesste meinen datensatz dann insgesamt so zerteilen dass ich 130 matrizen bekomm und das maximum aus jeder spalte jeder matrix ergibt mir dann den gesuchten vektor.. ich glaub des ist dann keine verbesserung mehr
mit dem optimization tool weiss ich auch nicht ob man da was passendes finden kann
 
FeuerWolf
Forum-Newbie

Forum-Newbie



Beiträge: 3
Anmeldedatum: 15.04.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.05.2008, 13:32     Titel: lsqnonlin - Wie arbeitet lsqnonlin eigentlich genau
  Antworten mit Zitat      
Hallo Leute,
ich nutze die Funktion lsqnonlin zur Regleroptimierung in meiner Diplomarbeit. Alles funktioniert einwandfrei und ich bin mit Ergebnissen zufrieden Very Happy

Mich würde nun interessieren, wie lsqnonlin genau funktioniert. Mein dilemma ist folgendens:
Ich kann das tool mittlerweile optimal nutzen und für meine optimierungsprobleme einstellen, aber leider ist lsqnonlin noch so eine art Blackbox für mich. Die Matlab Hilfe hält sich in dem zusammenhang auch ziemlich bedeckt und google gibt auch kaum was her. Question

Dass es nach dem kriterium der kleinsten quadrate arbeitet weiß ich!
Ich meine die genaue arbeitsweise von lsqnonlin!
Besonders die art der minimierung der Fläche der Funktion und das zusammenspiel mit der Rückgabe der optimierten Parameter würde mich interessieren. Exclamation

"Theoretisch" würde ich das relative minimum einer Funktion per partieller ableitung berechnen und mir quasi an der Stelle an der die Tangentensteigung von der neg seite gegen null geht (minimum) die Funktions Parameter anschauen.
Da im ergebnis von lsqnonlin von >Directional derivative< die rede ist, und diese Ableitung auch pro iterationsschritt von <0 gegen 0 bis zur abbruchbedingung geht, würde ich auch darauf tippen dass es so ähnlihc auch arbeiten müsste....

da aber lsqnonlin Graphen von Simulink, also diskrete werte und keine Funktion über die man so einfach ingegrieren kann optimiert, hinkt da meine erklärung ein bischen...
Private Nachricht senden Benutzer-Profile anzeigen
 
FeuerWolf
Forum-Newbie

Forum-Newbie



Beiträge: 3
Anmeldedatum: 15.04.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.05.2008, 09:42     Titel:
  Antworten mit Zitat      
wen´s interessiert sollte sich die Parsevalschen Gleichungen in der Fachliteratur anschauen

mehr sog i ned
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.05.2008, 21:39     Titel:
  Antworten mit Zitat      
hallo!

ich suche einen fertigen matlab-code für verrauschte funktionen! Ich habe schon von iffco (implicit filtering for constrained optimization) gehört, kann damit aber (noch) nichts anfangen!

wär nett, wenn mir jemand helfen könnte! ich habe mit optimierungsverfahren noch keine erfahrung... Wink

mfg,

Kirk
 
Gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.10.2008, 10:50     Titel:
  Antworten mit Zitat      
Hallo!
Im Rahmen einer Semesterarbeit muss ich ausgehend von mehreren variablen Parametern eines Verbrennungsmotors den Verbrauch und die NOx Emissionen optimieren/ minimieren.
Ich dachte mir, dass ich hierfür die fminsearch funktion benutzen kann.
Ich habe bis jetzt 2 Messungen durchgeführt und die dazu gehörigen Messwerte ermittelt.
Kann mir jemand sagen ob ich dafür diese Funktion verwenden kann?
Das Problem an dieser Stelle ist, dass ich ja eigentlich dafür eine Funktion brauche die mir das Verhalten des Verbrauch und der NOx Emissionen darstellt. Aber mit 2 Messwerten ist das viel zu ungenau. Wink

Kann mir bitte jemand auf die Sprünge helfen, wie man da vorgeht.

Vielen Dank schon mal
 
mege

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.10.2008, 10:11     Titel: fgoalattain
  Antworten mit Zitat      
Hallo zusammen
Ich habe folgendes Problem. Ich optimiere mit fgoalattain. Es geht darum, mehrere Funktionen zu elliminieren/minimieren. Es handelt sich um Oberschwingungen. Das Problem ist, dass einige Funktionen (3 Stk.) zwingend auf 0 +/- Toleranz kommen sollen. Die restlichen Funktionswerte (3 Stk.) sollen einfach ein minimum erhalten. Ich habe 6 Funktionen mit 6 Variablen.

Könnt ihr mir sagen wie ich die Toleranzen einstellen kann? mit weigth?


Gruss mege
 
Bijick
Themenstarter

Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 07.10.2008, 10:19     Titel:
  Antworten mit Zitat      
Hallo mege,

fgoalattain erlaubt über den Parameter nonlcon auch die Einbeziehung von Nebenbedingungen. Diejenigen Ziele, die auf Null kommen sollen könntest Du so formulieren:
Code:
[c,ceq] = mynonlcon(x)
c = [];
ceq(1) = ...   % erstes Ziel
ceq(2) = ...   % zweites Ziel
...


und dann so einbinden:

Code:
x = fgoalattain(fun,x0,goal,weight,[],[],[],[],[],[],@mynonlcon)


Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
mege

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.10.2008, 10:31     Titel:
  Antworten mit Zitat      
Hallo.
Erstmals herzlichen Dank für deine prompte Antwort. Ich verstehe das nicht ganz.
was gebe ich da genau ein? Was ist da der unterschied zu goal?

MfG mege
 
Bijick
Themenstarter

Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 07.10.2008, 12:19     Titel:
  Antworten mit Zitat      
Hallo mege,

du hast bisher: sechs Funktionen in fun und zugehörige "Wunschwerte" in goals. Drei der Ziele sind aber stärker als andere, es ist wichtig, dass die zugehörigen Funktionen nahezu verschwinden.

Diese Situation kann man auf zwei verschiedene Arten modellieren: Erstens kann man die entsprechenden Gewichte in weight erhöhen. Wenn Deine Standardgewichte jeweils 1 sind, könntest Du die stärkeren Ziele mit 10 gewichten:
Code:
weight = [1,1,1,10,10,10];
x = fgoalattain(fun,x0,goal,weight)


Zweitens kann man die Variablen x auch durch Nebenbedingungen beschränken. Dadurch wird sich das Ergebnis für die drei übrigen Ziele verschlechtern, aber die drei wichtigen Ziele werden mit großer Sicherheit ziemlich gut eingehalten (wenn sie sich nicht widersprechen natürlich).
Dafür nimmt man die Ziele aus fun heraus, und auch goal und weight haben statt sechs nur noch drei Einträge. Dafür bekommt die Funktion mynonlcon die drei Ziele aus fun in Abhängigkeit von x wie oben gezeigt.

Genauer kann ich es nicht beschreiben. Wenn noch Unklarheiten bestehen, kannst Du mal Deine Funktion fun posten und ich helfe beim Umbau.

Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
mege

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.10.2008, 08:25     Titel:
  Antworten mit Zitat      
Hallo.
Herzlichen Dank für deine super Antworten. Sie haben mir weitergeholfen.
Noch eine letzte Frage: Ich habe es mit dem Parameter nonlcon ausgeführt. Kann ich jetzt mit dem Parameter weigth trotzdem noch die Gewichtung angeben? Hat der Parameter nonlcon ebenfalls eine Art Gewichtung, die eingestellt werden kann?

Grüsse mege
 
Bijick
Themenstarter

Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 10.10.2008, 09:24     Titel:
  Antworten mit Zitat      
Hallo mege,

erstens: Ja, weight kann trotzdem für die drei verbliebenen Ziele verwendet werden, um sie gegeneinander zu gewichten. weight hat aber keinen Einfluss auf die Nebenbedingungen nonlcon.

Zweitens: um die Nebenbedingungen gegen die Ziele zu gewichten, kann man sie mit einem Faktor multiplizieren:

Code:
ceq = 1000*(x(1)+x(2)-5);
% statt
ceq = x(1)+x(2)-5;


Letzteres ist aber eigentlich nur sinnvoll, um die Größenordnung anzupassen. Prinzipiell sollten Ziele und Nebenbedingungen nicht zu stark voneinander abweichen. Die Algorithmen "gewichten" dann mit eigenen Methoden ziemlich gut.

Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite Zurück  1, 2, 3, 4, 5  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.