Erzeugen einer Zufallszahl mit max, min und Mittelwert (Durchschnitt) in Matlab
Ich brauche, um Zufallszahlen zu generieren, mit folgenden Eigenschaften.
- Min muss 1
- Max muss 9
- Durchschnitt (Mittelwert) 6.00 (oder etwas anderes)
- Zufällige Zahl muss Ganzzahlig, positiv) nur
Habe ich versucht mehrere Schreibweisen, aber nichts funktioniert, zum Beispiel
r=1+8.*rand(100,1);
Dieser gibt mir eine zufällige Zahl zwischen 1-9, aber es ist nicht eine Ganzzahl (zum Beispiel 5.607 oder 4.391) und jedes mal habe ich berechnet den Mittelwert variiert.
- Welche Form wollen Sie für Ihre distribution?
- Für alle RNG nicht erwarten, dass das bedeutet, dass es immer genau so, wie Sie angeben, es variiert von run zu run. Mit größeren N es sein kann, näher.
- Art der Verteilung ist nicht wichtig, möchte nur meine, ist das gleiche für jeden Satz von Zufallszahlen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist ein Algorithmus mit einer Schleife zu erreichen, benötigt meine
xmean
(mit der erforderlichen Präzisionxeps
) durch Regeneration eine zufällige Zahl aus einer Hälfte von einem Vektor zu einem anderen laut bedeuten, die bei der aktuellen iteration. Bei meinen tests erreichte die mittlere ziemlich schnell.x
ist die Ausgabe, die Sie brauchen.randi
(zum generieren von zufälligen Ganzzahlen) erschien zuerst im MATLAB-version 2008b. Wahrscheinlich deins ist älter. Finden Sie unter diesem ALSO Antwort.xmean
zu nicht-ganzzahligen Wert. Wennxmean
in integer, können Sie versuchenxeps
auf eine sehr kleine Anzahl, wiexeps=eps(0);
, aber ich kann nicht garantieren, wie viele Iterationen es braucht. Funktionmean
ist immer wieder doppelt, soxeps=0
funktioniert möglicherweise nicht aufgrund der Natur der double-Werte.Können Sie eine Funktion definieren, die erfüllt Ihre Anforderungen, basierend auf Matlab ' s
randi
Funktion. Aber Vorsicht, es ist leicht zu definieren-Funktionen von Zufallszahlen-Generatoren, die nicht produzieren Zufallszahlen.Anderen Ansatz passen könnten -- erstellen Sie eine Wahrscheinlichkeitsverteilung, die Ihre Anforderungen erfüllen. In diesem Fall benötigen Sie einen Vektor, der die 9-floating-point-zahlen, die Summe von 1 und die einzeln -, express-die Wahrscheinlichkeit des i-TEN integer-Auftritt. Zum Beispiel, eine Verteilung beschrieben werden kann durch den folgenden Vektor:
Diese split das Intervall [0,1] in 9 Teile. Dann, nehmen Sie Ihre Lieblings-rng generiert floating-point-zahlen im Bereich [0,1) und generieren eine Zahl, nehme an, es ist 0.45. Lesen Sie zusammen das Intervall von 0 bis 1, und Sie finden, dass dies in der 5-TEN Intervall, so dass die Rückkehr der integer-5.
Offensichtlich, ich habe schon zu faul, um geben Sie einen Vektor gibt 6 als Mittelwert der Verteilung, aber das sollte nicht allzu schwer für Sie, um herauszufinden.
Können Sie
randi
zu bekommen, die zufällige GanzzahlenKönnten Sie
floor
abschneiden, Ihre zufälligen zahlen zu integer-Werte nur:Erlangung angegeben, meine ist ein wenig schwieriger; es hängt davon ab, welche Art von distribution Sie nach.
Wenn die Verteilung ist nicht wichtig, und alles, was Sie interessiert, ist die mittlere, dann gibt es eine besonders einfache Funktion, die das tut:
6
mit Wahrscheinlichkeit 1.Bevor Sie können Ihre design-random number generator müssen Sie die Verteilung sollte es Unentschieden aus. Sie haben nur teilweise gemacht: d.h., Sie angegeben haben, zieht es von Ganzzahlen in [1,9] und dass es bedeuten, dass Sie möchten, angeben können. Es bleibt immer noch eine Unendlichkeit von Distributionen zu wählen, unter. Welche anderen Eigenschaften Sie möchten Ihren Vertrieb zu haben?
Bearbeiten folgenden Kommentar: Mittelwert jede endliche Stichprobe aus einer Wahrscheinlichkeitsverteilung, die so genannte Stichprobe-Mittelwert - wird auch nur annähernd an die distribution bedeuten. Es gibt keinen Weg darum herum.
Dass nachdem gesagt wurde, ist die einfachste (in der maximalen Entropie Sinne) Verteilung über die ganzen zahlen in der Domäne [1,9] ist die exponentielle Verteilung: d.h.,
Den parameter
x
bestimmt die Verteilung bedeuten. Die entsprechende kumulative Verteilung istZiehen aus der Verteilung
p
Sie können zeichnen Sie eine zufällige Zahl aus [0,1] und finden, was sub-Intervall vonc
er fällt: D. H.,zurück
[n,m]
Integer-array gezeichnet vonp
.