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

Matlab Monte Carlo Code Optimieren

 

matlabbrig
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 52
Anmeldedatum: 17.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.11.2012, 21:55     Titel:
  Antworten mit Zitat      
Für 100 Simulationsläufe mit 164 Sekunden Dauer sagt der Profiler Folgendes:

(liegt wohl an cov() )

profiler.jpg
 Beschreibung:

Download
 Dateiname:  profiler.jpg
 Dateigröße:  91.22 KB
 Heruntergeladen:  521 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: 09.11.2012, 23:06     Titel:
  Antworten mit Zitat      
Hallo,

Frage: ist dies sinnvoll?
Code:
X(isnan(X)) = [0];

Verfälscht es nicht die Kovarianz, wenn fehlende Werte einfach durch Nullen ersetzt werden?

Von Iteration zu Iteration werden die Kovarianzen sehr ähnlicher Matrizen berechnet. Ein Ansatz wäre zu versuchen, die Berechnungen aus der vorherigen Iteration zu nutzen, um die nächste Kovarianz zu berechnen.

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

Forum-Fortgeschrittener


Beiträge: 52
Anmeldedatum: 17.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.11.2012, 23:11     Titel:
  Antworten mit Zitat      
Klar, das ist echt eine Idee... Stellt sich nur die Frage wie das gehen soll, wenn ich die Inputs der cov-Funktion um eins weiter verschiebe bleibt danach doch kein cov-Wert gleich, oder? Bin kein Statistiker...

Ohne
Code:
X(isnan(X)) = [0];
will er bei mir hernach SIGMA für mvnrnd nicht akzeptieren, weil es nicht positiv-semidefinit ist oder wie das genau lautete.
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.11.2012, 00:04     Titel:
  Antworten mit Zitat      
Hallo,

gleich bleibt keiner. Allerdings werden sie sehr ähnlich berechnet, da ja alle Zeilen bis auf eine gleich bleiben. Vielleicht findest du da eine Art Update-Formel. Ich bin auch kein Statistiker.

Zitat:
Ohne Code X(isnan(X)) = [0];
will er bei mir hernach SIGMA für mvnrnd nicht akzeptieren,

Das mag schon sein. Aber genausogut könntest du wohl X(isnan(X)) = 123.45678 schreiben, oder hat die 0 hier eine tiefere Bedeutung?
Wenn es beispielsweise Zeitreihendaten mit gleichmäßigem Verlauf sind, fände ich Interpolation sinnvoller, als die fehlende Daten durch beliebig erfundene zu ersetzen.

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

Forum-Fortgeschrittener


Beiträge: 52
Anmeldedatum: 17.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.11.2012, 00:19     Titel:
  Antworten mit Zitat      
Die Kovarianzen werden aus logarithmierten Renditen berechnet, die im Allgemeinen so nahe an Null sind dass ich glaube durch das Ersetzen von NaNs durch Nullen einen vernachlässigbaren Fehler einzubauen. Zumindest sofern die Nans/Nullen nicht zu oft vorkommen. Dies tun sie auch nicht, abgesehen von der Zeit jeweils vor dem Beginn der wirklichen Datenzeitreihen - hier schließt sich auch der Bogen zu meiner Frage im anderen Thread.
Kann man innerhalb der Datenzeitreihen die Nullen noch als rudimentäre Form der Interpolation betrachten, so ist es vor Beginn der Daten quasi ein Erfinden von Daten die zu diesem Zeitraum in keiner Form vorhanden sind. Aber das lässt sich wohl nicht ohne Weiteres lösen. Vielleicht schmeiße ich auch die ersten 1-2 Jahre raus wenn es nicht anders geht.


Grüße
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.11.2012, 17:31     Titel:
  Antworten mit Zitat      
Hallo,

hast du's mal mit nancov statt cov versucht? Das wird aber aufgrund der Behandlung der NaN eher länger dauern.

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

Forum-Fortgeschrittener


Beiträge: 52
Anmeldedatum: 17.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.11.2012, 22:54     Titel:
  Antworten mit Zitat      
Hallo Harald,

nein, das habe ich noch nicht gemacht, werde ich morgen mal ausprobieren. Smile
Ansonsten muss ich gucken wo ich genug Rechenleistung herbekomme um das irgendwie hinzubekommen.

Grüße
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.11.2012, 23:52     Titel:
  Antworten mit Zitat      
Hallo,

da bietet sich dann Parallel Computing Toolbox an: Ausnutzung mehrerer lokaler Kerne bzw. wenn du Zugang zu einem Cluster hast auch mehrerer Rechner, dann in Verbindung mit MATLAB Distributed Computing Server.

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

Forum-Fortgeschrittener


Beiträge: 52
Anmeldedatum: 17.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.11.2012, 11:42     Titel:
  Antworten mit Zitat      
Guten Morgen Harald,

danke für den Tipp! Habe neulich was davon gelesen dass man über ein Zusatzprogramm auch die GPU heranziehen kann, hast du das mal versucht?

Grüße


Edith sagt mir, ich habe die Parallel Computing Toolbox sogar, mich aber noch nie damit befasst Embarassed

weiterhin sagt mir Edith, dass ich mit einer parfor-Schleife beim Aufruf der MC-Simulation schon mal 50% Rechenzeit weniger habe.
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: 11.11.2012, 16:27     Titel:
  Antworten mit Zitat      
Hallo,

man braucht nicht mal besondere Zusatzprogramme. Man kann mit der Parallel Computing Toolbox in Verbindung mit den nötigen Treibern der CUDA-Grafikkarten direkt auf der GPU arbeiten, siehe z.B. hier:
http://www.mathworks.de/discovery/matlab-gpu.html
http://www.mathworks.de/company/events/webinars/wbnr59816.html
Allerdings ist das nur datenparallele Anwendungen wirklich gut geeignet. "Normale" Parallelisierung ist vielfältiger anwendbar und in der Regel leichter umzusetzen.
Zunächst sollte man aber an einer Optimierung des Algorithmus an sich arbeiten.

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

Forum-Fortgeschrittener


Beiträge: 52
Anmeldedatum: 17.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.11.2012, 16:45     Titel:
  Antworten mit Zitat      
Danke!


Was mich wundert: Ich habe einen Intel Dual Core-Prozessor, bei dem vor der Parallelisierung bereits beide Kerne ausgelastet waren wenn ich die Simulation laufen ließ. Nun sind weiterhin beide Kerne bei 100%, es geht aber trotzdem doppelt so schnell?
Wie geht denn das rein technisch? Shocked

Und: Gibt es eine Möglichkeit sowohl die for-Schleife die die MC-Funktion aufruft zu parallelisieren, wie auch die for-Schleife innerhalb der Funktion?
In der Funktion einfach for durch parfor zu ersetzen bringt schon mal nichts...


Grüße
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: 11.11.2012, 17:47     Titel:
  Antworten mit Zitat      
Hallo,

zu der Performancefrage: das müsste man sich im Detail anschauen.
Bei manchen Operationen erzeugt MATLAB automatisch mehrere Threads (implicit multithreading). Es scheint, dass das in deinem Fall weniger effizient ist als eine explizite Parallelisierung.

Es macht wenig Sinn, auf mehreren Ebenen zu parallelisieren. Schon gar nicht auf einem Dual-Core-Prozessor: mehr als beide Kerne auszulasten geht schließlich nicht.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite Zurück  1, 2

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.