vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevDataGrid - Gönnen Sie Ihrem SQL-Kommando diesen krönenden Abschluß!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik: Variablen/Strings · Algorithmen/Mathematik   |   VB-Versionen: VB4, VB5, VB602.12.04
Normalverteilte Zufallszahlen

Generieren Sie normalverteilte Zufallszahlen, wie sich auch in der Natur vorkommen! Wie? Das erfahren Sie hier.

Autor:   Malte TreckmannBewertung:     [ Jetzt bewerten ]Views:  18.369 
ohne HomepageSystem:  Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11kein Beispielprojekt 

Mit der von Visual Basic zur Verfügung gestellten Rnd-Funktion können gleichverteilte Zufallszahlen erzeugt werden. Die Funktion "rnd_gauss()" hingegen generiert normalverteilte Zufallszahlen, wie sie auch in der Natur vorkommen und beispielsweise bei Simulationen benötigt werden.

Die erwarteten Uebergabeparameter sind:
m - Mittelwert
s - Varianz
Border - Bereich um den Mittelwert

Beispiel: Es soll die Körpergrösse von erwachsenen Maennern simuliert werden; die Parameter könnten dann so aussehen:

  • Mittelwert = 185cm
  • Varianz = 0,2
  • Border = 20 cm
d.h. es werden zufällige normalverteilte Werte im Bereich 165cm (=185-20) bis 205cm (=185+20) generiert.

Mit den Parametern m = 0 und s = 1 können mit "rnd_gauss()" auch standardnormalverteilte Zufallszahlen (= Spezialfall der Normalverteilung) erzeugt werden.

Literatur:
Stoecker, Taschenbuch mathematischer Formeln und Verfahren, S. 737

Diesen Tipp können Sie ausprobieren, indem Sie ein neues Projekt erstellen, welches nur aus einem Modul besteht. Kopieren Sie anschließend den folgenden Code in das Modul.

Sub Main()
  Dim FileNumber As Integer
  Dim s As String
  Dim i As Long
 
  FileNumber = FreeFile      
  Open "ausgabe.txt" For Output As #FileNumber
  For i = 1 To 10000
    Print #FileNumber, CStr(rnd_gauss(185, 0.2, 20))
  Next i
  Close #FileNumber
End Sub
Function rnd_gauss(m, s, Border As Double) As Double
  Dim X As Double
  Dim Y As Double
  Dim WD As Double
 
  ' m - Erwartungswert
  ' s - Varianz
  ' WD - Wahrscheinlichkeitsdichte
 
  Randomize (Timer)    
  Do
    X = 2 * Border * Rnd + (m - Border)
    Y = Rnd
    DoEvents
    WD = (Sqr(2 * 3.1415 * s) ^ (-1)) * Exp(-((X - m) ^ 2) / (2 * s))
  Loop Until Y < WD
 
  rnd_gauss = X
End Function

Die Werte werden dann in der Textdatei "ausgabe.txt" ausgegeben. Sie lassen sich anschaulich in einem Histogramm darstellen. Wie ein solches Histogramm erstellt wird, zeigt der ebenfalls eingesandte Tipp "Histogramm erstellen".

Dieser Tipp wurde bereits 18.369 mal aufgerufen.

Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

Über diesen Tipp im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Aktuelle Diskussion anzeigen (1 Beitrag)

nach obenzurück


Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
   

Druckansicht Druckansicht Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel