[java] Generator liczb z rozkładu normalnego

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
bulva
Sędziwy Jeż
Sędziwy Jeż
Posty: 60
Rejestracja: 28 wrz 2009, 12:40
Płeć: Mężczyzna
Wersja Ubuntu: 10.04
Środowisko graficzne: GNOME
Architektura: x86

[java] Generator liczb z rozkładu normalnego

Post autor: bulva »

Witam,

Chciałbym napisać program generujący zadaną ilości liczb z rozkładu normalnego, używam algorytmu accept/reject (w zasadzie generuję liczby o rozkładzie wykładniczym a następnie decyduję o ich znaku, dzięki czemu dość wiernie przybliżam rozkład normalny).

Chciałbym zadeklarować tablicę (lub listę) i wykonywać kod w pętli while aż do zaakceptowania n liczb (pętla będzie musiała zrobić średnio jakieś 1.5*n przebiegów aby miec te n liczb). Jak to napisać?

Kod: Zaznacz cały

import javax.swing.*;
import java.util.*;

public class rnorm
{

		public static void main(String[] args) throws Exception
		{
	String input = JOptionPane.showInputDialog("How many numbers to draw?");
	int n = Integer.parseInt(input);	
	double x[]=new double[n];//?

int i = 0;	
while (   )//?
{
double u = (double)Math.random();
double y = -Math.log(u); 	
	
		if( Math.exp( - Math.pow(y-1,2) / 2 ) >= u){
	double coin = (double)Math.random();		
			if (coin>0.5)
				x[i]=y;
			else
				x[i]=-y;				
			i++;	
			}
			
}	
for(int j=0;j<x.length;j++){
System.out.println(x[j]);	
}
	}
}	
xc1256

Odp: [java] Generator liczb z rozkładu normalnego

Post autor: xc1256 »

interesuje cię takie coś ?
http://www.losowe.pl/liczba
bulva
Sędziwy Jeż
Sędziwy Jeż
Posty: 60
Rejestracja: 28 wrz 2009, 12:40
Płeć: Mężczyzna
Wersja Ubuntu: 10.04
Środowisko graficzne: GNOME
Architektura: x86

Odp: [java] Generator liczb z rozkładu normalnego

Post autor: bulva »

Nie, w tym applecie losowane liczby maja rozkład jednostajny. W sumie doszedłem do czegoś takiego, wypełniam tablicę NaN i potem warunek sprawdza czy już wszystkei NaN zostały zastąpione. Pięknie tylko że nie działa :D

Kod: Zaznacz cały

import javax.swing.*;
import java.util.*;

public class rnorm
{

		public static void main(String[] args) throws Exception
		{
	String input = JOptionPane.showInputDialog("How many numbers to draw?");
	int n = Integer.parseInt(input);	
	double x[] = new double[n];

Arrays.fill(x, 0.0 / 0.0);

int i = 0;	
while (Double.isNaN(x[i])) //  Double.isNaN(x[i])  x.length < n
{
double u = (double)Math.random();
double y = -Math.log(u); 	
	
		if( Math.exp( - Math.pow(y-1,2) / 2 ) >= u){
	double coin = (double)Math.random();		
			if (coin>0.5)
				x[i]=y;
			else
				x[i]=-y;				
			i++;	
			}
			
}	
for(int j=0;j<x.length;j++){
System.out.println(x[j]);	
}
	}
}	
nwkj
Sędziwy Jeż
Sędziwy Jeż
Posty: 33
Rejestracja: 08 sie 2009, 14:53
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: KDE Plasma

Odp: [java] Generator liczb z rozkładu normalnego

Post autor: nwkj »

http://epsrv.astro.uni.torun.pl/~arms/frGauss2.pdf

ew. http://www.piotrchojnacki.pl/przedmioty ... sowych.pdf ale tutaj będzisz musiał napisać dodatkowo rozkład wykładniczy (co nie powinno być problemem, bo jego dystrybuanta się ładnie odwraca).
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 10 gości