You are on page 1of 9

GENERATE VARIABEL ACAK KONTINU bil riil float

1.

Distribusi Uniform kontinu U(a,b) a<b a, b bilangan bulat (bil negatif , 0 dan bil positif) x bilangan riil float x; a < x < b

algoritma : S1 : u = U(0,1) distribusi uniform kontinu (0,1) S2 : x = a+(b-a)u S3 : return x. Silahkan dicoba implementasinya di JAVA
public class DistKontinu { DistDiskrit DDu=new DistDiskrit(); public double distExp(double teta){ return(-teta*Math.log(DDu.uni01())); } public double unifKontinu(int a, int b) {//(double) double u=DDu.uni01(); double x= a+ (b-a)*u; return x; } }

2. Distribusi Normal algoritma 1 (inversion method) untuk N(0,1) dan N(,2) gunakan transformasi y = + x : 1/ 2 1/ 2 x1 = ( 2 ln u1 ) sin 2u 2 dan x 2 = ( 2 ln u1 ) cos 2u 2 phi=3.14 Math.PI S1 : u1 = U(0,1); u2 = U(0,1) S2 : r = ( 2 ln u1 ) 1 / 2 S3 : a = 2u 2 S4 : x1 = r sin a dan x2 = r cos a norm1= x1 dan norm2=x2 S5 : return x1, x2. Implementasinya : 1. dan 2 diinputkan 2. Karena nilai baliknya ada 2 maka disarankan menggunakan array 1 dimensi return 2 nilai (array 1 dimensi) float distNormalAlg1() nilai baliknya hanya satu shg perlu vektor distNormalAlg1 N(0,1) : distribusi Normal Standar { float phi=3.14; float u1=uniform_01(); float u2=uniform_01(); float r=sqrt(-2*log(u1)); float a=2*phi*u2;

Summarized and Typed by Eto Wuryanto

norm1=r*sin(a); norm2=r*cos(a); // nilai norm1 dan norm2 terletak antara - dan

void kotinu::distNormalGen1(float mu, float sigma) N(,2) { dist_normal_1(); norm_g1=mu+sigma*norm1; norm_g2= mu+sigma*norm2; // nilai norm_g1 dan norm_g2 terletak antara - dan } di .cpp main() { kontinu KK; float m,s; // m : nilai rata-rata dan s : nilai standar deviasi cin>>m>>s; // m=0 dan s=1 N(0,1) for(int i=0;i<n;i++) { if(i%2==0) // proses hanya untuk i=0,2,4, { KK.dist_normal_gen1(m,s); // menghasilkan 2 nilai masih berada di .h hsl[i]=KK.norm_g1; // memanggil nilai norm_g1 dan disimpan di hsl[i] hsl[i+1]=KK.norm_g2; } } }
// Distribusi Normal(0,1) algoritma 1 public vektor distNormal01Alg1() { vektor x=new vektor(2); double u1=DDu.uni01(); double u2=DDu.uni01(); double r=Math.sqrt(-2*Math.log10(u1)); double a=2*Math.PI*u2; x.elemen(r*Math.sin(a), 0) ; x.elemen(r*Math.cos(a), 1) ; return x; } // Distribusi Normal(mu,sigma) algoritma 1 public vektor distNormal1(double mu,double sigma) { vektor x=new vektor(2); vektor y=distNormal01Alg1(); x.elemen(mu-sigma*y.ambil(0), 0) ; x.elemen(mu-sigma*y.ambil(1), 1) ; return x; }

Contoh : S1 : u1 = .0682 ; u2 = .8702 S2 : r = ( 2 ln(.0682) ) 1 / 2 = 1.7689 S3 : a = 2 (.8702) = 5.4676 S4 : x1 = 1.7689 sin(5.4676) = -1.288

Summarized and Typed by Eto Wuryanto

x2 = 1.7689 cos(5.4676) = 1.212 S5 : return -1.288, 1.212 algoritma 2 (convolution method): N(0,1) dan untuk menghasilkan N(,2) gunakan transformasi y = + x S1 : i = 0; x = 0 S2 : u = U(0,1) S3 : x = x + u S4 : i = i + 1 S5 : if i < 12 go to S2 else x = x 6 S6 : return x x = u i 6 = ( u1 + u 2 + ... + u12 ) 6 untuk ui = U (0,1) atau 0 < u i < 1
i =1 12

i = 0; x = 0 do{ u = U(0,1) x= x+u i=i+1 }while( i < 12); x = x 6 return x


// Distribusi Normal(0,1) algoritma 2 public double distNormal01Alg2() { int i = 0; double u, x=0; do{ u = DDu.uni01(); x = x + u; i = i + 1; }while( i < 12); x = x - 6; return x; } // Distribusi Normal(mu,sigma) algoritma 2 public double distNormal2(double mu,double sigma) { return mu-sigma*distNormal01Alg2(); }

Distribusi Binomial algoritma 3 (normal approximation) sesuai untuk np dan n(1-p) > 3 : S1 : generate z = n(0,1) S2 : x = np + z np (1 p ) S3 : if x > np then x = min(<x + >, n) else x = max(<x - >, 0) S4 : return < x >
// distribusi binomial Alg 3 public int binomialAlg3(int n, double p) { DistKontinu DK=new DistKontinu(); double z=DK.distNormal01Alg2(); double x=n*p+z*Math.sqrt(n*p*(1-p)); if(x>n*p) x=min(Math.floor(x+0.5),n); else x=max(Math.floor(x-0.5),0); return (int)x;

Summarized and Typed by Eto Wuryanto

}
3.

Distribusi Eksponensial F ( x) = 1 e x / , x 0 dengan metode invers F(x) = u u = 1 e-x/ atau x = ln(1-u) algoritma : S1 : u = U(0,1) S2 : x = ln(u) S3 : return x. Contoh (mean = 10) : S1 : u = .5418 S2 : x = ln(.5418) = 6.1286 10 S3 : return 6.1286

Ada 3 class yaitu :


1.

Class Main

/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package nim_nama_simulasi; import java.util.Scanner; import vektorq.vektor;
/** * * @author eto */ public class Main { /** * @param args the command line arguments */ public static void main(String[] args) { Scanner in=new Scanner(System.in); // u/ input data lewat keyboard DistDiskrit d1=new DistDiskrit(); DistKontinu k1=new DistKontinu(); System.out.println("Masukkan pilihan Anda "); System.out.println("*********************************** "); System.out.println(" 0 : uniform diskrit "); System.out.println(" 1 : binomial diskrit Algoritma 1"); System.out.println(" 2 : binomial diskrit Algoritma 2"); System.out.println(" 3 : Exponensial"); System.out.println(" 4 : Poisson Algoritma 1"); System.out.println(" 5 : Poisson Algoritma 2"); System.out.println(" 6 : Empirik"); System.out.println(" 7 : Uniform Kontinu (a,b)"); System.out.println(" 8 : Distribusi Normal Alg 1"); System.out.println(" 9 : Distribusi Normal Alg 2"); System.out.println(" 10 : Distribusi Binomial Alg 3"); System.out.println("*********************************** "); int pilih; System.out.println("pilihan Anda : "); pilih=in.nextInt(); System.out.println(" "); int puter=5; System.out.println("uniform kontinu --> u : "+d1.uni_01()); switch(pilih) { case 0 :{

// //

Summarized and Typed by Eto Wuryanto

// // // //

System.out.println("Masukkan nilai a : "); int a=in.nextInt(); // entry data int int b; System.out.println("Masukkan nilai b : "); b=in.nextInt(); // entry data int do{ // untuk validasi a<b b=in.nextInt(); // entry data int if(a>b) System.out.println("nilai a>b --> ulangi input nilai b :"); }while(a>b); System.out.print("uniform distkrit("+a+","+b+") : "); vektor v1=new vektor(puter); for(int i=0;i<puter;i++){ v1.elemen(d1.uniformDiskrit(a, b),i); } v1.tampilInt(); break; } case 1 :{ System.out.println("Masukkan nilai n : "); int nil_n=in.nextInt(); // entry data int System.out.println("Masukkan nilai probabilita p : "); double nil_p=in.nextDouble(); System.out.print("binomial distkrit algoritma 1 " + "("+nil_n+","+nil_p+") : "); vektor v1=new vektor(puter); for(int i=0;i<puter;i++){ v1.elemen(d1.binomialAlg1(nil_n,nil_p),i); } v1.tampilInt(); break; } case 2 :{ System.out.println("Masukkan nilai n : "); int nil_n=in.nextInt(); // entry data int System.out.println("Masukkan nilai probabilita p : "); double nil_p=in.nextDouble(); System.out.print("binomial distkrit algoritma 1 " + "("+nil_n+","+nil_p+") : "); vektor v1=new vektor(puter); for(int i=0;i<puter;i++){ v1.elemen(d1.binomialAlg2(nil_n,nil_p),i); } v1.tampilInt(); break; } case 3 :{ System.out.println("Masukkan nilai teta : "); double nil_teta=in.nextDouble(); // entry nilai teta System.out.print("Distribusi Exponensial dengan teta : " + "("+nil_teta+" ) : "); vektor v1=new vektor(puter); for(int i=0;i<puter;i++){ v1.elemen(k1.distExp(nil_teta),i); } v1.tampil(); break; } case 4 :{ System.out.println("Masukkan nilai lambda : "); double nil_lambda=in.nextDouble(); // entry nilai lambda System.out.print("Distribusi Poisson algoritma 1 dengan lambda : " + "("+nil_lambda+" ) : "); vektor v1=new vektor(puter); for(int i=0;i<puter;i++){ v1.elemen(d1.distPois(nil_lambda),i); } v1.tampilInt(); break; } case 5 :{ System.out.println("Masukkan nilai lambda : "); double nilLambda=in.nextDouble(); // entry nilai lambda System.out.print("Distribusi Poisson algoritma 2 dengan lambda : " + "("+nilLambda+" ) : "); vektor v1=new vektor(puter); for(int i=0;i<puter;i++){ v1.elemen(d1.distPois2(nilLambda),i);

Summarized and Typed by Eto Wuryanto

} v1.tampilInt(); break; // // // // } case 6 :{ System.out.println("Masukkan nilai lambda : "); double nilLambda=in.nextDouble(); // entry nilai lambda System.out.print("Distribusi Poisson algoritma 2 dengan lambda : " + "("+nilLambda+" ) : "); int x[]={2,4,5,7,8}; double f[]={0.1,0.2,0.3,0.25,0.15}; vektor v1=new vektor(puter); for(int i=0;i<puter;i++){ v1.elemen(d1.distEmpirik(x,f),i); } v1.tampilInt(); break; } case 7 :{ System.out.println("Masukkan nilai a : "); int a=in.nextInt(); // entry data int int b; System.out.println("Masukkan nilai b : "); do{ // untuk validasi a<b b=in.nextInt(); // entry data int if(a>b) System.out.println("nilai a>b --> ulangi input nilai b :"); }while(a>b); System.out.print("uniform kontinu("+a+","+b+") : "); vektor v1=new vektor(puter); for(int i=0;i<puter;i++){ v1.elemen(k1.unifKontinu(a,b),i); } v1.tampil(); break; } case 8 :{ System.out.println("Masukkan nilai mu : "); double mu=in.nextDouble(); // entry data System.out.println("Masukkan nilai sigma : "); double sigma=in.nextDouble(); // entry data System.out.print("distribusi Normal 1("+mu+","+sigma+") : "); vektor tempX=new vektor(2); if(puter%2!=0) puter=puter+1; vektor v1=new vektor(puter); for(int i=0;i<puter;i++){ if(i%2==0){ tempX=k1.distNormal1(mu, sigma); v1.elemen(tempX.ambil(0),i); v1.elemen(tempX.ambil(1),i+1); } } v1.tampil(); break; } case 9 :{ System.out.println("Masukkan nilai mu : "); double mu=in.nextDouble(); // entry data System.out.println("Masukkan nilai sigma : "); double sigma=in.nextDouble(); // entry data System.out.print("distribusi Normal 1("+mu+","+sigma+") : "); vektor v1=new vektor(puter); for(int i=0;i<puter;i++){ v1.elemen(k1.distNormal2(mu, sigma),i); } v1.tampil(); break; } case 10 :{ System.out.println("Masukkan nilai n (n>1) : "); int n=in.nextInt(); // entry data System.out.println("Masukkan nilai p (0<p<1) : "); double p=in.nextDouble(); // entry data System.out.print("distribusi Binomial Alg 3("+n+","+p+") : "); vektor v1=new vektor(puter); for(int i=0;i<puter;i++){ v1.elemen(d1.binomialAlg3(n, p),i); }

Summarized and Typed by Eto Wuryanto

v1.tampil(); break; } default : { System.out.println("Salah Masukkan pilihan !"); break; } } System.out.println(); } }

2. Class DistDiskrit
/** * * @author eto */ public class DistDiskrit { // generate uniform kontinu (0,1) public double uni01(){ return Math.random(); } // generate uniform diskrit (a,b) u/ a<b public int uniformDiskrit(int a, int b){ if(a>=b){ System.out.println("Anda Salah menginput nilai a dan b" + " --> nilai a < b !"); return 0; } double u=uni01(); int ud=(int)Math.floor((double)a+(double)(b-a+1)*u); return (ud); } // distribusi binomial Alg 1 public int binomialAlg1(int n, double p) { int x = 0; int i = 1; double u; do{ u = uni01(); if( u < p) x = x + 1; i = i + 1; }while(i<=n); return x; } // distribusi binomial Alg 2 public int binomialAlg2(int n, double p) { double f=Math.pow(1-p,n), F=f; int x=0; double u=uni01(); // tergantung nama fungsinya while(u>F) { x=x+1; f=f*p*(n-x+1)/((1-p)*x); F=F+f; } return (x); } // distribusi Poisson alg 1 public int distPois(double lambda){ int x=0; boolean terus=true; double w=0; double y; DistKontinu dk1=new DistKontinu(); while(terus)

Summarized and Typed by Eto Wuryanto

{ y=dk1.distExp(1/lambda); w=w+y; if(w<1) x=x+1; else terus=false; } } return x;

// distribusi Poisson alg 2 public int distPois2(double lambda){ int x=0; double f,F; f=Math.exp(-lambda); F=f; double u=uni01(); // acak() adl distribusi U(0,1) while(u>F) {x=x+1; f=f*(lambda/x); F=F+f; } return(x); } // distribusi empirik public int distEmpirik(int x[],double fx[]){ //int x[]={0,3,6,8}; // diketahui di soal //float fx[]={.2,.5,.2,.1}; // diketahui di soal int n=x.length; double Fx[]=new double[n]; for(int j=0;j<n;j++) { // menghitung Fx[j] if(j==0) Fx[j]=fx[0]; else Fx[j]=fx[j]+fx[j-1]; } double u=uni01(); int i=0; while(u>Fx[i]){ i+=1; } return x[i]; } public double min(double x, double y){ if(x<y) return x; else return y; } public double max(double x, double y){ if(x>y) return x; else return y; } // distribusi binomial Alg 3 public int binomialAlg3(int n, double p) { DistKontinu DK=new DistKontinu(); double z=DK.distNormal01Alg2(); double x=n*p+z*Math.sqrt(n*p*(1-p)); if(x>n*p) x=min(Math.floor(x+0.5),n); else x=max(Math.floor(x-0.5),0); return (int)x; }

3. import vektorq.vektor;

Class DistKontinu

/** * * @author eto */ public class DistKontinu { DistDiskrit DDu=new DistDiskrit(); // Distribusi Exponensial public double distExp(double teta){ return(-teta*Math.log(DDu.uni01()));

Summarized and Typed by Eto Wuryanto

} // Distribusi uniform kontinu public double unifKontinu(int a, int b) {//(double) double u=DDu.uni01(); double x= a+ (b-a)*u; return x; } // Distribusi Normal(0,1) algoritma 1 public vektor distNormal01Alg1() { vektor x=new vektor(2); double u1=DDu.uni01(); double u2=DDu.uni01(); double r=Math.sqrt(-2*Math.log10(u1)); double a=2*Math.PI*u2; x.elemen(r*Math.sin(a), 0) ; x.elemen(r*Math.cos(a), 1) ; return x; } // Distribusi Normal(mu,sigma) algoritma 1 public vektor distNormal1(double mu,double sigma) { vektor x=new vektor(2); vektor y=distNormal01Alg1(); x.elemen(mu-sigma*y.ambil(0), 0) ; x.elemen(mu-sigma*y.ambil(1), 1) ; return x; } // Distribusi Normal(0,1) algoritma 2 public double distNormal01Alg2() { int i = 0; double u, x=0; do{ u = DDu.uni01(); x = x + u; i = i + 1; }while( i < 12); x = x - 6; return x; } // Distribusi Normal(mu,sigma) algoritma 2 public double distNormal2(double mu,double sigma) { return mu-sigma*distNormal01Alg2(); } }

Summarized and Typed by Eto Wuryanto

You might also like