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

immer gleiche random numbers

 

Christine
Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 07.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.10.2010, 16:10     Titel: immer gleiche random numbers
  Antworten mit Zitat      
Hallo,
ich möchte immer die gleichen random numbers erzeugen. Ich weiss, dass das mit 'state' oder RandStream geht. Wenn ich das allerdings in meine simulation einfüge, werden meine Ergebnisse viel zu stark verändert. Kann mir jemand sagen woran das liegt bzw. wie ich das Problem löse?

Danke schonmal im Voraus!

Christine
Private Nachricht senden Benutzer-Profile anzeigen


Achi
Forum-Guru

Forum-Guru


Beiträge: 250
Anmeldedatum: 14.04.10
Wohnort: ---
Version: R2007a
     Beitrag Verfasst am: 20.10.2010, 16:15     Titel:
  Antworten mit Zitat      
Warum speicherst du diese Randomnumber nicht 1mal ab und benutzt sie wieder?

Grüße Achi
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 20.10.2010, 18:00     Titel: Re: immer gleiche random numbers
  Antworten mit Zitat      
Hallo Christine,

eine verwirrende Frage.
Du kannst mit "state" den Status des Zufallszahlen-Generators setzen, so dass immer die gleichen Zufallszahlen erzeugt werden. Wenn dies nun die Ergebnisse Deiner Simulation stark ändert, dann ist diese Method für Dich ungeeignet. Wieso möchtest Du es dann überhaupt machen??

Und wieso werden die Ergebnisse so stark geändert? Auch Zufallszahlen, die nach dem setzen eines bestimmten States erzeugt werden, sind doch immerhin Zufallszahlen. Kann es sein, dass Du den State in jeder Iteration neu setzt, so dass nur eine einzige Zufallszahl erzeugt wird?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Christine
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 07.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.10.2010, 23:01     Titel:
  Antworten mit Zitat      
Hallo,

ich möchte immer die gleichen Zufallszahlen damit man die Rechnungen nachvollziehen und wiederholen kann (insb. mein Betreuer).

Warum sich die Werte mit der state-Funktion so stark ändern kann ich mir einfach nicht erklären. Für mich ist das auch völlig unlogisch...

ich gebe folgendes ein:


Code:
randn('state',3)
a=randn(100000,1)


und diese a geht dann in einen stochastischen prozess. Die Ergebnisse sind zwar immer gleich, aber das Ergebnis an sich ist einfach vollkommen unrealistisch.

Was genau bedeutet denn die "3"? Ich habe gelesen, dass das die Inititalisierung des Zufallsprozesses sein soll, aber was genau aäre der Unterschied wenn ich 5 nehme und wenn ich 999 nehme?

Lieben Dank schonmal!
Private Nachricht senden Benutzer-Profile anzeigen
 
Christine
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 07.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.10.2010, 14:29     Titel:
  Antworten mit Zitat      
@Achi: leider verändern sich die Ergebnisse auch sehr stark, wenn ich die random numbers erst generiere, abspeichere und dann einlese Sad
Private Nachricht senden Benutzer-Profile anzeigen
 
Achi
Forum-Guru

Forum-Guru


Beiträge: 250
Anmeldedatum: 14.04.10
Wohnort: ---
Version: R2007a
     Beitrag Verfasst am: 21.10.2010, 14:32     Titel:
  Antworten mit Zitat      
Du generierst die, speicherst die ab und benutzt sie immer wieder.
Was soll sich dabei ändern??? Shocked
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Achi
Forum-Guru

Forum-Guru


Beiträge: 250
Anmeldedatum: 14.04.10
Wohnort: ---
Version: R2007a
     Beitrag Verfasst am: 21.10.2010, 15:00     Titel:
  Antworten mit Zitat      
Mit rand('twister',5489) letzt man das ganze auch wieder in den Grundzustand!

Kleines Bsp:



Code:


rand('twister',5489)
a=rand(10);
rand('twister',5489)
b=rand(10);
plot(a-b)
 
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Christine
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 07.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.10.2010, 15:46     Titel:
  Antworten mit Zitat      
Hi,
wenn ich die random number abspeicher und immer wieder einsetze kommen schon dieselben ergebnisse raus. Nur sind diese viiiieeeel höher, als wenn ich nur ganz normal in der simulation random numbers generiere.

Gibt es diesen twister auch für standardnormalverteilte Zufallsvariablen, also nicht rand sondern randn?

Danke für die Mühe!
Private Nachricht senden Benutzer-Profile anzeigen
 
Achi
Forum-Guru

Forum-Guru


Beiträge: 250
Anmeldedatum: 14.04.10
Wohnort: ---
Version: R2007a
     Beitrag Verfasst am: 21.10.2010, 16:18     Titel:
  Antworten mit Zitat      
Schon, es steht ja auch in der Hilfe

help randn:
...
Code:

s = randn('state');
r1 = randn(100);
randn('state',s);
r2 = randn(100); % ...
plot(r1-r2)
 
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 21.10.2010, 23:26     Titel:
  Antworten mit Zitat      
Hallo Christine,

Es ist schon ausgesprochen merkwürdig, dass die Ergebnisse Deiner Funktion davon abzuhängen scheinen, ob Du die Zufallszahlen zuerst abspeicherst oder nicht. Ich vermute, da liegt ein weitere Bug im Code.

Dennoch bleibt mir auch das moderne RandStream-Objekt immer noch rätselhaft. Ich habe den Eindruck, dass der RandStream einen höheren Verwirrungsfaktor hat als andere Toolboxfunktionen von Matlab - um es mal freundlich auszudrücken.
Ich gehe davon aus, dass:
Code:

einfach zu wenig Entropie enthält und so die ersten erzeugten Zufallszahlen sehr stark korreliert sind.
Wenn ich mir "help randn" durchlese, wird empfohlen den State zuerst von RandStream erzeigen zu lassen und dann abzuspeichern:
Code:
s = RandStream.getDefaultStream;
savedState = s.State;
v = randn(5)
s.State = savedState;
v = randn(5)
 

Nun enthält der "savedState" aber deutlich mehr Bits als in "3". Wenn ich einen RandStream so erstelle:
Code:
s = RandStream.create('mt19937ar', 'seed', 5489);
state = s.State

enthält der State immerhin 20000 Bits. Nach einem "randn('state', 3)" würde ich deshalb den Zufallszahlengenerator mit ein paar Millionen Zahlen warmlaufen lassen:
Code:
randn('state', 3);
for i = 1:20
  dummy = randn(1, 1e5);
end

Hilft das??? Oder gibt es einen anderen Fehler im Code?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Christine
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 07.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.10.2010, 17:59     Titel:
  Antworten mit Zitat      
ich hab's!
falls irgendjemand dasselbe problem ind er zukunft hat, es funktioniert mit:
Code:
random = RandStream('mt19937ar','Seed',0);
a=random.randn(n,1)
Private Nachricht senden Benutzer-Profile anzeigen
 
Christine
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 07.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.10.2010, 17:59     Titel:
  Antworten mit Zitat      
und trotzdem vielen dank für eure mühe
Private Nachricht senden Benutzer-Profile anzeigen
 
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 - 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.