Supportnet Computer
Planet of Tech

Supportnet / Forum / Anwendungen(Java,C++...)

Normalverteilte zufallszahlen mit Mittelwert und Streuung





Frage

Hallo Leute, ich hab ein Problem und finde nix richtiges im Netz. :( Ich möchte mittels Java oder C# normalverteilte Zufallszahlen mit vorgegebenem Erwartungswert und Streuung generieren. Ich hatte es erst im C# versucht aber da sah es noch schlechter aus. Java bietet ja die next.gaussian() die zufallszahlen zw. mit Erwartungswert 0 und streuung 1 generiert. Aber leider weiß ich nicht wie ich das anpassen kann, dass es mir zufallszahlen mit meinem Erwartungswert liefert. Irgendeine Streckung oder sowas.... Ideen? Ich bin dankbar für alles! :) Lg jojo

Antwort 1 von Jaja

du müsstest dir wohl selbst eine entspr. funktion schreiben - mir ist zumindest keine andere lösung bekannt.
aber ich hab auch nicht die tolle ahnung ;)

Allgemein ist die dichte der normalverteilung:

f(x)={e^[-0.5((x-erwartungswert)/standardabweichung)²]}/{standardabweichung *sqrt[2*PI]}

Antwort 2 von Jaja

ach so:

in die dichtefunktion f(x) kannst du dann für x eine gleichverteilte zufallszahl einsetzen. so einen zufallszahlengenerator gibts ja in jeder prog.sprache...

Antwort 3 von kloma

Zitat:
Ich möchte mittels Java oder C# normalverteilte Zufallszahlen mit vorgegebenem Erwartungswert und Streuung generieren.

wenn es auch perl sein dürfte, da gäb es das schon fertig (cpan-module).

Antwort 4 von zufall

Thx Jaja, dass versuch ich auch die ganze Zeit aber das bekomme ich irgendwie nicht gebacken! :( Ich dachte da genau an sowas wie von kloma, nur halt ich c# oder Java. Mich jetzt noch mit perl zu befassen hab ich keine Lust! :P

Noch andere Ideen?

Antwort 5 von zufall

habs mal versucht..


		double StndAbw;
		double mean;
		double X;
		double d1;
		double d2;
		double d3;
		double d4;
		double d5;
		double z;
		
		StndAbw =3;
		mean = 50;
		
		Random zZ = new Random();
		
		
		System.out.println("Start...");
		
		for(int i=0;i<100;i++)
		{		
				z=zZ.nextDouble();
			
				d1=(z-mean)/StndAbw;
				d2=Math.pow(d1,2);
				d3=(-0.5*d2);
				d4=Math.exp(d3);
				d5=(StndAbw*Math.sqrt(2*Math.PI));
				
				X=d4/d5;
		

				//X = (zZ.nextGaussian()*9)+1;
				System.out.println(X);
		}


liefert leider nur müll ...

Start...
9.291629843605963E-61
3.069131144639081E-61
4.306559230904052E-61
1.1730194527309215E-60
1.3387533021098374E-60
3.042784476895542E-61
8.687777941961444E-62
1.5212242315196183E-59
3.277905612121527E-61
5.0231841912835665E-61
4.8191935518151115E-60
1.766087896559868E-60
7.452137708084323E-60
1.4837860841935484E-61


Antwort 6 von Jaja

...dein erwartungswert muss zwischen 0 und 1 liegen, da die zufallszahlen doch auch nur zwischen 0 und 1 generiert werden, oder bei java / c# nicht?

du musst anschließend f(x) mit einem faktor multiplizieren.
z.b. für Zz zwischen 0 und 5 = f(x) *5,
oder Zz 0 ... 155 = f(x)*155

Antwort 7 von Jaja

... du kannst NICHT gleich die zZ "z" des random generators multiplizieren, da die dichtefunktion auch nur für den wertebereich 0..1 definiert ist - du kannst nur das ergebniss durch multiplikation im wertebereich erweitern...

Antwort 8 von Jaja

ach ja:

deine standartabweichung setze bitte auch auf einen wert zwischen 0 und 1 ;)

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: