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

Programm mit parfor beschleunigen?

 

Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 21.06.2011, 17:31     Titel:
  Antworten mit Zitat      
Hallo,

so etwa:
Aufruf mit einer ersten Schätzung für die Parameter:
Code:
fminunc(@zielfunktion, parameter0)

Implementierung der Zielfunktion:
Code:
function guete = zielfunktion(parameter)
% Berechnung der Eingangs- und sonstigen Daten aus den Parametern (parameter)
sim(...)
% Berechnung der Güte der Parameter aus dem Unterschied zwischen Simulation und Daten
% Das kann sowohl Abweichungen zwischen 5.5 und 10 als auch eine Abweichung des Endwerts beinhalten.
guete = ...


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


SeeSharp
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 44
Anmeldedatum: 18.06.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.06.2011, 15:07     Titel:
  Antworten mit Zitat      
Ok verstehe, aber dann brauche ich ja die Schleife gar nicht mehr oder?
Vor allem, kann ich z.B. angeben, dass einzelne Parameter nur mit +/- variiert werden dürfen?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 25.06.2011, 15:51     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Ok verstehe, aber dann brauche ich ja die Schleife gar nicht mehr oder?

Genau.
Zitat:
Vor allem, kann ich z.B. angeben, dass einzelne Parameter nur mit +/- variiert werden dürfen?

Sorry, aber wie sollen sie sonst variiert werden? Mit *+/? Falls du Nebenbedingungen meinst: ja, können angegeben werden und geht recht klar aus fmincon hervor.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 44
Anmeldedatum: 18.06.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.06.2011, 15:59     Titel:
  Antworten mit Zitat      
entschuldigung ich habe vergessen bei +/- den 1er zu schreiben.

Ein Parameter von mir ist z.B. ein Downsampling (um den Einfluss des Rauschen zu vermindern) und da kann ich eben nur jeden xten Messwert streichen und nicht jeden x komma x ten
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 25.06.2011, 18:28     Titel:
  Antworten mit Zitat      
Hallo,

Die von mir benannten Optimierungsverfahren gehen davon aus, dass die Parameter kontinuierlich variiert werden können und dass die Zielfunktion "glatt" ist (keine Sprünge, keine Knicke).
Wenn das nicht der Fall ist, muss man sehen, wie man sich sonst behelfen kann.
Ist die Downsampling-Rate der einzige diskrete Parameter? Wenn nicht, wieviele gibt es?
Und welche Werte sind zulässig/sinnvoll?
Woran ich denke ist, die Downsampling-Rate in einer (par)for-Schleife und abhängig davon die kontinuierlichen Parameter zu bestimmen.

Und: warum nicht glätten/filtern statt Downsampling?

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 44
Anmeldedatum: 18.06.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.06.2011, 21:20     Titel:
  Antworten mit Zitat      
Hallo Harald!

Erst mal danke für deine Hilfstellungen Smile.

Also im Prinzip habe ich 3 Parameter zur Verfügung:
1. Downsampling
zulässige Werte sind 1:10. Ich habe schon herausbekommen, dass 8 einen sehr guten Wert darstellt, weil ich ja ca. weiß wie das System sich verhalten soll (ist ein Labormodell für ein Praktikum auf der Uni) und da sehe ich im Bode-Diagramm dass die 2 Eigenfrequenzen des Systems halbwegs passen
2. q ein Vergessensfaktor vom LS-Verfahren zulässig zwischen 0 und 1, sinnvoll so zwischen 0.5 - 1 denke ich. Da ist auch die Anzahl der Nachkommastellen egal.
3. Anzahl der Messwerte ist so im Bereich von 300 bis 1500 sinnvoll. Muss aber natürlich ganzahlig sein.

@Filtern könnte ich mir auch mal anschauen, aber Downsamplen geht halt schnell.
Private Nachricht senden Benutzer-Profile anzeigen
 
SeeSharp
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 44
Anmeldedatum: 18.06.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.06.2011, 22:16     Titel:
  Antworten mit Zitat      
erst mal sorry für doppelpost

Harald du hast mich auf eine Idee gebracht Smile

Ich weiß ja wie sich meine Übertragungsfunktion zusammensetzt.

Da ich weiß, dass sich nicht jeder Parameter (z.B. ein Trägheitsmoment) ändert der in die Übertragungsfunktion eingeht, habe ich jetzt mal die 5 Parameter die sich ändern in fmincon gegeben.
Leider habe ich jetzt noch das Problem, dass meine Constrains nicht greifen, weil ich eigentlich angeben möchte, dass keiner dieser kleiner 0 bzw. eigentlich auch nicht 0 werden darf Sad

Hier mal der Code wie ich es gemacht habe, vielleicht kann mir da jemand helfen:
Code:

fun1 = @(x)zielfunktion(x,Qerr,Qend,usim,ysim,t2,tsim,index,indexEndwert,indexFehler,lenSim,meanYsim,ysimEnde,ysimErr,lenNorm2,LA,RA,J1,J2,J3,km,Ta);
A=-eye(5);
b=[0;0;0;0;0];
x = fmincon(fun1, x0,A,b);
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

woraus schließt du, dass Constraints nicht greifen?

Zwei Vorschläge:
Die Schrankenbedingungen auch als solche angeben (Argumente lb / ub).
... und die ganzen Parameter in einer Struktur zusammenfassen - das sieht ja schlimm aus!

Und bezogen auf den vorherigen Post: da könnte es sinnvoll sein, eine (par)for-Schleife über die diskreten Parameter laufen zu lassen und dann die kontinuierlichen zu optimieren.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 44
Anmeldedatum: 18.06.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.06.2011, 12:30     Titel:
  Antworten mit Zitat      
In meiner Funktion erstelle ich eine Übertragungsfunktion, beim Durchlauf habe ich da einen Fehler gekommen, dass er sie nicht erstellen kann. Dann habe ich mir mal die Werte ausgeben lassen und habe gesehen, dass diese negativ werden Sad.

hätte es jetzt so probiert Sad
Code:

A = [];
b = [];
Aeq = [];
beq = [];
lb =[0.1e-12;0.1e-12;0.1e-12;0.1e-12;0.1e-12];
ub = [20,20,20,20,20];
x = fmincon(fun1,x0,A,b,Aeq,beq,lb,ub);
 


Leider selbes Ergebnis
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

erstaunt mich zugegebenermaßen. Das Problem sollte allerdings behebbar sein, wenn du die Zeile
Code:
x = max(x, 1e-12);

in fun1 einfügst.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 44
Anmeldedatum: 18.06.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.06.2011, 11:18     Titel:
  Antworten mit Zitat      
vielen dank
das hart wirklich geholfen ...
leider liefert die Optimierung keine besseren Ergebnisse als meine Methode und weiters bricht der wegen zu geringer Step-Size mal ab und ein Parameter wird 1e-16 (die constraints greifen wieder nicht Sad ) und ist somit auch weit weg von der Realität
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.06.2011, 11:31     Titel:
  Antworten mit Zitat      
Hallo,

die Optimierung sollte schon bessere Resultate liefern. In der parfor-Schleife läufst du ja nur über ein bestimmtes Raster.
Die Abbruchkriterien kannst du über die Optionen anpassen.
Dass die Parameter kleiner als zulässig werden, hatten wir ja abgefangen. Ein 1e-16 ist also als 1e-12 zu interpretieren.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 44
Anmeldedatum: 18.06.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.07.2011, 14:01     Titel:
  Antworten mit Zitat      
Hallo!

Ich habe mich jetzt noch ein bisschen mit fmincon gespielt und habe jetzt ein brauchbares Ergebnis bekommen, was physikalisch sinn macht und auch meine constraints berücksichtigt Smile.

Zitat:

x0 =[c1,c2,d1,d2,d3*5]; % Werte aus PAT-PR als Startwerte
x0 =[0.0016,c2,4e-5,d2,9e-6];
x0 =[0.0015, 0.0025,5e-7,d2,15e-6];
Qerr = 1; % Gewichte der beiden Kriterien
Qend = 0; % siehe oben

options = optimset('TolX',1e-9,'TolFun',1e-12,'TolCon',1e-12,'MaxFunEvals',500);
fun1 = @(x)zielfunktion(x,Qerr,Qend,usim,ysim,t2,tsim,index,indexEndwert,indexFehler,lenSim,meanYsim,ysimEnde,ysimErr,lenNorm2,LA,RA,J1,J2,J3,km,Ta);
A = [];
b = [];
Aeq = [];
beq = [];
minimum = 0.1e-12;
nonlcon = [];
lb =[1e-3;1.2e-3;4e-7;0.9e-7;2e-7];
ub = [2e-3,1.9e-3,4e-5,0.1e-5,2e-5];
x = fmincon(fun1,x0,A,b,Aeq,beq,lb,ub,nonlcon,options);


Leider ist da Ergebnis (auch nach meinem Gütekrit.) immer noch schlechter als meine beste Identifikation. Vor allem das Schwingen zum Schluss stört mich .... (siehe Datei im Anhang).

Weiters kommt beim ausführen dann folgendes Warning:
Warning: Trust-region-reflective method does not currently solve this type of problem,
using active-set (line search) instead.

Vermutlich weil er mit meinem Güte-Krit. keinen Gradienten bilden kann?

MFG

ergebnis.JPG
 Beschreibung:

Download
 Dateiname:  ergebnis.JPG
 Dateigröße:  147.18 KB
 Heruntergeladen:  420 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 10.07.2011, 17:33     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Leider ist da Ergebnis (auch nach meinem Gütekrit.) immer noch schlechter als meine beste Identifikation

Ohne die komplette Anwendung zur Verfügung zu haben wird man da wenig weiterhelfen können.
Ich würde vermuten, dass fmincon in ein lokales Minimum in der Nähe des von dir gefundenen gelaufen ist. Das sollte sich an dem Wert von exitflag ablesen lassen, bzw. je nach Version auch im Command Window erläutert werden.
Wenn man auf der Suche nach einem globalen Minimum ist und keine ausreichend guten Startwerte hat, hilft oft auch, mit verschiedenen Startwerten zu versuchen. Versuchs doch z.B. mal mit der von dir identifizierten besten Lösung als Startwert.

Zitat:
Vor allem das Schwingen zum Schluss stört mich ...

Wenn dich das Schwingen stört, musst du deine Zielfunktion so definieren, dass Schwingen bestraft wird.

Zitat:
Vermutlich weil er mit meinem Güte-Krit. keinen Gradienten bilden kann?

Die Gradientenbildung funktioniert unabhängig von der konkreten Problemstellung. Der Grund ist, dass "trust region" keine linearen Gleichungs-NB unterstützt.
Als Alternative zu active set kannst du auch mal interior point versuchen.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 44
Anmeldedatum: 18.06.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.07.2011, 15:04     Titel:
  Antworten mit Zitat      
Hi!

Ich kann mal die 2 m-files online stellen sofern dies erlaubt ist?!

Die Werte aus der Identifikation kann ich leider nicht verwenden, weil ich ja dort nur die Übertragungsfunktion rausbekomme, aber nicht die einzelnen Parmeter die in die Übertragungsfunktion eingehen.
Darum mache ich ja genau den ganzen Aufwand.
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

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