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

Generierung von Zufallszahlen

 

Fränky

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.10.2009, 11:52     Titel: Generierung von Zufallszahlen
  Antworten mit Zitat      
Hallo,
ich habe folgendes Problem bei der Generierung zufälliger Kugelkoordinaten: Aufgrund der hohen Anzahl an Messpunkten X (ca 1,2 Mio) und meinem, nicht mehr ganz so neuen Rechnern, benötigt mein Ansatz sehr lange, um die gewünschte Anzahl an Punkten zu generieren.

Code:

parfor i=1:length(X)
        theta = -pi:0.001:pi;
        ind=ceil(length(theta)*rand(1,1));
        A(i)=theta(ind);
        phi = -pi:0.001:pi;
        ind=ceil(length(phi)*rand(1,1));
        B(i)=phi(ind);
        r = -X:0.001:X;
        ind=ceil(length(r)*rand(1,1));
        C(i)=r(ind);
    end;
 


Ist es möglich diesen Code hinsichtlich Geschwindigkeit noch zu optimieren? Oder würde ein anderer Ansatz zur Generierung von Kugelkoordinaten für meinen Fall besser passen?

Beste Grüße
Fränky


Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 20.10.2009, 12:37     Titel:
  Antworten mit Zitat      
Da ich X nicht kenne kann ich nur die Implementierung für A und B vorschlagen (10000 mal schneller):

Code:

clc
clear all
X=1:100000;
% implementation 1
tic
for i=1:length(X)
        theta = -pi:0.001:pi;
        ind=ceil(length(theta)*rand(1,1));
        A(i)=theta(ind);
end;
toc

% implementation 2
tic
theta = -pi:0.001:pi;
ind2=ceil(length(theta)*rand(length(X),1));
A2=theta(ind2);
toc
 


Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Fränky

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.10.2009, 13:48     Titel:
  Antworten mit Zitat      
SUPER - Vielen Dank Andreas!!!
Das Programm läuft jetzt deutlich schneller und flüssiger...
 
Fränky

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.10.2009, 14:33     Titel:
  Antworten mit Zitat      
Hallo,
ich habe noch eine Frage:
Falls das X keine Konstante ist und sich mit jedem Messpunkt verändert, also eine < Xx1 > Matrix darstellt, wie kann ich meinen Code hinsichtlich Performance-Geschwindigkeit optimieren?

Code:

 theta = -pi:0.001:pi;
ind1=ceil(length(theta)*rand(length(X),1));
A=theta(ind1);

phi = -pi:0.001:pi;
ind2=ceil(length(phi)*rand(length(X),1));
B = phi(ind2);

parfor i=1:length(X)
r = -X:0.001:X;
ind3=ceil(length(r)*rand(1,1));
C (i)= r(ind3);
end    
 


Gibt es eine Möglichkeit die parfor-Schleife zu optimieren?
Fränky
 
Med

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.10.2009, 15:12     Titel:
  Antworten mit Zitat      
Ich gebe zu so ganz steig ich bei deinem code nicht durch aber was genau bezweckst du mit "phi" und "theta"? So wie ich gelesen haben gibt "lengh" nur die größe des Arrays wieder und das ist ja bei dir immer gleich mit der Schrittweite. Somit könntest du doch grad einmal den Wert in eine Variable setzen und Matlab müßte das nicht immer neu berechen. Oder wenn wirklich jeder kleine Schritt benötigt wird, dann die Werte einmal in einer Matrix speichern bzw in einer Matlab file das die nur noch ausgelesen aber nicht mehr neu berechnet werden müssen.
 
Fränky

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.10.2009, 15:31     Titel:
  Antworten mit Zitat      
Tut mir leid, wenn meine Formulierungen nicht eindeutig bzw verständlich waren.
Ich habe eine Punktewolke gegeben, jedem dieser Punkte (xyz-Koordinaten) wird durch ein Array der gleichen Länge ein bestimmter Wert (hier: Radius) zugeordnet. Nun versuche ich einen zufälligen Punkt zu simulieren der innerhalb dieses Radius liegt zu generieren. Da ich mich im Kugelkoordinatensystem befinde, weise ich jeden Punkt zwei zufällige Winkel zu (theta, phi) und einen zufälligen Radius zu. Dieser Radius soll kleiner-gleich dem jeweiligen im Array definierten Wert sein.

Ich hoffe, mein Problem ist nun ein wenig verständlicher geworden und jemand kann mir bei meinem Problem weiterhelfen...
Mein Code funktioniert auch einwandfrei, nur leider lässt die Performance-Geschwindigkeit sehr zu wünschen.

Beste 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.