|
|
Zufallszahl im Intervall -1.00 bis 1.00 |
|
SimonSt |

Forum-Anfänger
|
 |
Beiträge: 15
|
 |
|
 |
Anmeldedatum: 23.10.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 23.10.2011, 14:27
Titel: Zufallszahl im Intervall -1.00 bis 1.00
|
 |
Hallo Forum,
ich will eine Zufallszahl zwischen -1.00 und 1.00 erzeugen. Da rand() leider keine negativen Zahlen erzeugt, habe ich mir mit randi([-100,100])/100 beholfen. Das klappt, aber ist das der beste Weg? Dummerweise haben die erzeugten Zahlen vier Nachkommastellen, wie bekomme ich es hin, dass nur zwei Nachkommastellen (die letzten beiden sind ja eh immer 0) angezeigt werden?
Vielen Dank,
Simon
|
|
|
|
|
eupho |

Forum-Meister
|
 |
Beiträge: 777
|
 |
|
 |
Anmeldedatum: 07.01.09
|
 |
|
 |
Wohnort: Marburg
|
 |
|
 |
Version: R2009b
|
 |
|
|
 |
|
Verfasst am: 23.10.2011, 14:39
Titel:
|
 |
Also in der Hilfe steht genau, wie man das macht:
Zitat: |
Generate values from the uniform distribution on the interval [a, b].
r = a + (b-a).*rand(100,1); |
--> Immer erst einen Blick in die Hilfe werfen.
Und wenn die erzeugten Zahlen nur vier Nachkommastellen hätten, dann wäre das wirklich dumm. Gott sei dank haben sie viel mehr, werden aber im Command Window ohne weitere Einstellungen nur mit 4 Nachkommastellen angezeigt. Mit
lässt du dir nur 2 Nachkommastellen anzeigen.
|
|
|
SimonSt |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 15
|
 |
|
 |
Anmeldedatum: 23.10.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 23.10.2011, 14:55
Titel:
|
 |
eupho hat Folgendes geschrieben: |
Also in der Hilfe steht genau, wie man das macht:
Zitat: |
Generate values from the uniform distribution on the interval [a, b].
r = a + (b-a).*rand(100,1); |
|
Hatte ich gelesen, für meinen Fall wäre das ja
bzw.
was auch die gewünschte Zahl liefert. Ich verstehe nur leider nicht wirklich, was da genau passiert und habe das daher mit der randi() Funktion gelöst.
eupho hat Folgendes geschrieben: |
|
Funktioniert, danke!
|
|
|
eupho |

Forum-Meister
|
 |
Beiträge: 777
|
 |
|
 |
Anmeldedatum: 07.01.09
|
 |
|
 |
Wohnort: Marburg
|
 |
|
 |
Version: R2009b
|
 |
|
|
 |
|
Verfasst am: 23.10.2011, 16:54
Titel:
|
 |
Erklärung von
1) rand(1): Es wird eine Zufallszahl im Bereich von [0, 1] generiert
2) 2.*rand(1): Diese Zahl wird mit zwei multipliziert, der Bereich möglicher Zufallszahlen erstreckt sich dadurch zu [0, 2]
3) -1 wird subtrahiert, sodass der Bereich (wie gewünscht) bei [-1, 1] liegt
|
|
|
SimonSt |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 15
|
 |
|
 |
Anmeldedatum: 23.10.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 24.10.2011, 10:03
Titel:
|
 |
Danke!
Eine Frage hätte ich dann aber noch...
Die mit
erzeugten Zufallszahlen schreibe ich in einer while Schleife in einen Vektor. Nun würde ich gerne dafür sorgen, dass nur Zufallszahlen in den Vektor geschrieben werden, die in diesem noch nicht enthalten sind. Ich habe mir dazu mal die Hilfe zu unique durchgelesen und etwas rumprobiert, aber bekomme kein gescheites Ergebnis hin. Wie muss ich unique und rand kombinieren?
Vielen Dank,
Simon
|
|
|
eupho |

Forum-Meister
|
 |
Beiträge: 777
|
 |
|
 |
Anmeldedatum: 07.01.09
|
 |
|
 |
Wohnort: Marburg
|
 |
|
 |
Version: R2009b
|
 |
|
|
 |
|
Verfasst am: 24.10.2011, 11:00
Titel:
|
 |
Du musst beachten, dass du mit num2str (wie zuvor beschrieben), nur die Darstellung der Werte anpasst, nicht aber die Werte an sich.
Auf 2 Nachkommastellen runden geht mit einem kleinen Trick:
Danach kannst du prinzipiell unique() verwenden.
|
|
|
SimonSt |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 15
|
 |
|
 |
Anmeldedatum: 23.10.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 24.10.2011, 12:54
Titel:
|
 |
Das mit den Nachkommastellen lasse ich jetzt erst mal außen vor.
Mein Code sieht jetzt so bzw. so ähnlich aus (in der Schleife steht eigentlich noch etwas mehr):
Somit wird der Vektor r mit 10 Zufallszahlen erzeugt. Nur wie verwende ich jetzt unique, um dafür zu sorgen, dass die Zahlen im Vektor einmalig sind?
Danke,
Simon
|
|
|
eupho |

Forum-Meister
|
 |
Beiträge: 777
|
 |
|
 |
Anmeldedatum: 07.01.09
|
 |
|
 |
Wohnort: Marburg
|
 |
|
 |
Version: R2009b
|
 |
|
|
 |
|
Verfasst am: 24.10.2011, 12:55
Titel:
|
 |
Das habe ich doch zuvor beschrieben. Bitte nochmal durchgehen und nachvollziehen!
|
|
|
SimonSt |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 15
|
 |
|
 |
Anmeldedatum: 23.10.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 24.10.2011, 13:00
Titel:
|
 |
Ich will schon während des Erstellen des Vektors dafür sorgen, dass die Zahlen einmalig sind bzw. das eine neu dazu geschriebene noch nicht vorkommt. Wenn ich erst nach dem Erzeugen unique anwende, könnte es passieren, dass ich plötzlich statt 10 nur noch 9 Werte im Vektor stehen habe da einer doppelt vorgekommen ist.
|
|
|
eupho |

Forum-Meister
|
 |
Beiträge: 777
|
 |
|
 |
Anmeldedatum: 07.01.09
|
 |
|
 |
Wohnort: Marburg
|
 |
|
 |
Version: R2009b
|
 |
|
|
 |
|
Verfasst am: 24.10.2011, 13:07
Titel:
|
 |
Dann lass eine while()-Schleife solange durchlaufen, bis du deine 10 Werte zusammen hast?!
|
|
|
SimonSt |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 15
|
 |
|
 |
Anmeldedatum: 23.10.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 24.10.2011, 13:12
Titel:
|
 |
Wie gesagt, in der Schleife finden noch andere Dinge statt, und die sollen genau 10 Mal statt finden. Deswegen wäre es am einfachsten, wenn man rand und unique in einem Rutsch miteinander kombinieren könnte. Falls das nicht geht, muss ich das Erstellen der 10 Zahlen noch vor dem Aufruf der Schleife ausführen.
|
|
|
eupho |

Forum-Meister
|
 |
Beiträge: 777
|
 |
|
 |
Anmeldedatum: 07.01.09
|
 |
|
 |
Wohnort: Marburg
|
 |
|
 |
Version: R2009b
|
 |
|
|
 |
|
Verfasst am: 24.10.2011, 14:22
Titel:
|
 |
Dass es sowas nicht bereits gibt, wundert mich nicht, weil das nämlich völlig gegen die Natur von Zufallszahlen spricht.
So geht es deutlich einfacher:
|
|
|
Matt Lappen |

Forum-Anfänger
|
 |
Beiträge: 42
|
 |
|
 |
Anmeldedatum: 23.10.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 24.10.2011, 14:32
Titel:
|
 |
Dabei hast du allerdings jede iteration neue Zahlen im Vektor r. Aber superkompakt!!!
Wenn du die r(1:n-1) stets behalten möchtest, kannst du etwas derart machen:
|
|
|
eupho |

Forum-Meister
|
 |
Beiträge: 777
|
 |
|
 |
Anmeldedatum: 07.01.09
|
 |
|
 |
Wohnort: Marburg
|
 |
|
 |
Version: R2009b
|
 |
|
|
 |
|
Verfasst am: 24.10.2011, 14:35
Titel:
|
 |
@Matt Lappen: Zwei Anmerkungen zu deinem Code. Zum einen ist das sehr ineffizient, weil bei jedem Durchlauf der komplette Vektor überpürft werden muss, zum anderen ist ohne zu runden r "niemals" == r1 (Wahrscheinlichkeit etwa 0).
|
|
|
Matt Lappen |

Forum-Anfänger
|
 |
Beiträge: 42
|
 |
|
 |
Anmeldedatum: 23.10.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 24.10.2011, 14:45
Titel:
|
 |
@eupho: da geb ich dir vollkommen recht, runden muss man dabei naturlich auch, das habe ich außen vor gelassen.
Ineffizient ist das schon, allerdings kann man da bei kleineren Schleifen auch mal ein Auge zu drücken. Wenn man nicht in jedem loop neue Zufallszahlen für vorherige n generieren möchte, muss der Verktor ja geprüft werden, da gibt'S natürlich auch andere Wege. Ne Musterlösung ist das keinenfalls, aber es funzt.
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
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
| 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.
|
|