Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » normalverteilte Zufallszahlen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
28.06.2007, 16:25 Uhr
~VerbalKint
Gast


Hallo.

ich möchte in einer Funktion n beliebige Werte im Intervall -10 bis +10 zufällig bestimmen, die normalverteilt sind. Der Mittelwert sollte bei 0 liegen und die Standardabweichung sollte 1 sein. Ich habe aber leider keine Ahnung, wie ich das in einem Code umsetzen soll. Könnte mir bitte jemand helfen?

DANKE!!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
28.06.2007, 17:40 Uhr
~huhu
Gast



C++:
#include <stdlib.h>
#include <stdio.h>
#include <time.h>


int main()
{
   int n = 20;
  
   //srand( (unsigned)time( NULL ) );
    int RANGE_MIN = 0;
    int RANGE_MAX = 20;

  
    for (; n; n-- )
    {
         int rand21 = (int)(((double) rand() /
                         (double) RAND_MAX) * RANGE_MAX + RANGE_MIN);
        
         printf( "  %3d\n", rand21-10);//  rand21-10  -10 bis +10
    }
  
}


Das wär ein Anfang, je mehr Zahlen rand() liefert, um so klarer wird, dass
jede Zahl gleich oft vorkommt. Zahlenintervalle kann mann frei wählen,
zwischen 0 und RAND_MAX.
Was du mit Standardabweichung 1 meinst, verstehe ich nicht !
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
29.06.2007, 00:10 Uhr
struct



Vielleicht kannst du ne Liste machen die die Wahrscheinlichkeit für jede Zahl beinhaltet also zB

C++:
float Wahrscheinlichkeit[11];


11 is weil die Wahrscheinlichkeit für ja -10 gleich der für +10 ist.

Dann musst du halt mit der Normalverteilungsformel, die ich jetzt leider nicht im Kopf hab , für jede Zahl die Wahrscheinlichkeit errechnen.

Dann könntest du per zufall ne zahl von -10 bis 10 generieren.

Dann nochmal ne Zufallszahl und das mit dem Wahrscheinlichkeitswert verrechnet bestimmt dann ob es die Zahl auch ist. Also zB bei ner Chance von 31% generiest du ne Zufallszahl von 1 bis 100 und wenn die <= 31 ist dann heißt das "JA" also der Fall ist eingetreten.

Ich hoff mal dass so ungefähr klar ist was ich meine ... ist sicherlich nicht die einfachste oder eleganteste Lösung aber es sollte funktionieren.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
29.06.2007, 10:15 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


@huhu
Das aproximiert eine Gleichverteilung und keine Normalverteilung.

@VerbalKint
Ich vermute mal bei boost ist sowas mit dabei, an sonsten z.B: auch in omnet++

Irgendwie sagt mir eine ganz tief verborgene Hirnwindung, es lässt sich auch mit einer Gleichverteilung eine Normalverteilung basteln

Eventuell lässt sich ja auch damit was basteln...


Zitat:

Die besondere Bedeutung der Normalverteilung beruht unter anderem auf dem zentralen Grenzwertsatz, der besagt, dass eine Summe von n unabhängigen, identisch verteilten Zufallsvariablen im Grenzwert normalverteilt ist. Das bedeutet, dass man Zufallsvariablen dann als normalverteilt ansehen kann, wenn sie durch Überlagerung einer großen Zahl von Einflüssen entstehen, wobei jede einzelne Einflussgröße einen im Verhältnis zur Gesamtsumme unbedeutenden Beitrag liefert.




http://de.wikipedia.org/wiki/Box-Muller-Methode
--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 29.06.2007 um 10:24 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
29.06.2007, 11:26 Uhr
(un)wissender
Niveauwart


Hm, mal so eine Idee von einem der keinen Ahnug hat: nimm die Verteilungsfunktion der NV und packe deine gleichverteilte Zahl rein.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
30.06.2007, 10:22 Uhr
mike
Pinguinhüpfer
(Operator)


Normalverteiulung und noch viel mehr: www.boost.org/libs/random/
--
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
04.07.2007, 15:16 Uhr
~WarMal
Gast


Ja,
Du musst wohl diese Box-Muller-Methode nehmen, weil das hier:

Zitat von (un)wissender:
Hm, mal so eine Idee von einem der keinen Ahnug hat: nimm die Verteilungsfunktion der NV und packe deine gleichverteilte Zahl rein.

...das dürfte schwierig werden. Jedenfalls kann man bestimmt mindestens einen Nobelpreis gewinnen, wenn man es schafft die Verteilungsfunktion der NV aufzuschreiben :-) Bei jeder anderen Zufallsverteilung funktioniert das aber so. Du könntest der einfacheren Berechnung wegen vielleicht auch eine andere Verteilung benutzen. Wie wäre es denn z.B. mit der Dreiecksverteilung? Die ist gar nicht so unähnlich und du kannst direkt die Verteilungsfunktion nehmen:
http://de.wikipedia.org/wiki/Dreiecksverteilung
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: