Minggu, September 13, 2009

MEMBANGKITKAN BILANGAN RANDOM


MEMBANGKITKAN BILANGAN RANDOM
Macro untuk membangkitkan bilangan random yang berdistribusi Uniform (a,b) dengan pascal adalah sbb :
Function Uniform (a,b : double) : double;
Var u : double;
Begin
u := random;
Uniform := (b-a) * u + a;
End
.
Sedangkan untuk distribusi selain Uniform, digunakan Transformasi Invers.
Contoh :
Dicari pembangkitan distribusi eksponensial dari distribusi Uniform (0,1) !
Diketahui CDF dari distribusi Eksponensial :



Misal diketahui bahwa nilai lamda adalah 1, maka :

Proses pembangkitan variable random dengan metode transformasi invers adalah menyamakan CDF dari distribusi eksponensial dengan U (U berdistribusi uniform(0,1)).

Macro untuk membangkitkan bilangan random yang berdistribusi Eksponensial dengan pascal adalah sbb :
Function Eksponensial (beta : double) : double;
Var u : double;
Begin
u := random;
Eksponensial := -beta * ln(u);
End;
Dengan cara yang sama, maka macro untuk distribusi yang lain adalah ;
Distribusi Normal
Procedure Normal (mean,variance : double ; Var z1,z2 : double);
Var u1,u2,v1,v2,w,y,x1,x2 : double;
Begin
Repeat
u1 := random;
u2 := random;
v1 := 2 * u1 – 1;
v2 := 2 * u2 – 1;
w := sqr(v1) + sqr(v2);
if w <= 1 then
begin
y := sqrt ((-2*ln(w))/w);
x1 := v1 * y;
x2 := v2 * y;
z1 := sqrt (variance) * x1 + mean;
z2 := sqrt (variance) * x2 + mean;
end
Until w <= 1;
End;
Distribusi Lognormal
procedure lognormal (mean,varr : double;
Var zln1,zln2 : double);
Var y1, y2 : double;
begin
Normal (mean,varr,y1,y2);
zln1 := exp(y1);
zln2 := exp(y2);
end;
Distribusi Weibull
Function Weibull (alfa,beta: double) : double;
Var u,z : double;
Begin
u := random;
z := -ln(u);
Weibull := beta * exp (ln(z)/alfa);
End;
Distribusi t-student
function tdistribution(m:integer):double;
Label r2;
Var v,x,r,s,c,a,f,g,mm : real;
begin
mm:=0;
if m < 1 then
begin
writeln('impermissible degrees of freedom.');
halt;
end;
if (m mm) then
begin
s:=m;
c:=-0.25*(s+1);
a:=4/power((1+1/s),c);
f:=16/a;
if m>1 then
begin
g:=s-1;
g:=power(((s+1)/g),c)*sqrt((s+s)/g);
end else
g := 1;
mm:=m;
end;
r2:repeat
r:=random;
until r > 0.0;
x:=(2*random-1)*g/r;
v:=x*x;
if (v>(5-a*r)) then
begin
if ((m>=3) and (r*(v+3)>f)) then goto r2;
if (r>power((1+v/s),c)) then goto r2;
end;
tdistribution :=x;
end;
begin
tipe11[1]:=0.2;
tipe11[1]:=0.3;
tipe11[1]:=0.5;
tipe11[1]:=0.8;
tipe11[1]:=1.0;
end.
Untuk mendapatkan program pascal klik disini.

PEMBANGKITAN BILANGAN ACAK PSEUDO-RANDOM NUMBER GENERATION


Bilangan acak adalah bilangan yang dihasilkan dari suatu proses dan hasilnya tidak dapat diketahui secara pasti. Mengapa disebut pseudo-random ?? Disebut pseudo-random atau random yang semu karena barisan bilangan ini dihasilkan melalui suatu rumus atau formula.
Formula yang digunakan adalah :

Dengan :
Xn = bilangan acak ke n
a = konstanta
m = batas maksimum bilangan acak

Misalnya diketahui :
a = 2 ; m = 5 ; X0 = 3
maka :
X1 = 2 (3) mod 5 = 1
X2 = 2 (1) mod 5 = 2
X3 = 2 (2) mod 5 = 4
X4 = 2 (4) mod 5 = 3
Ternyata nilai X4 sama dengan X0, barisan bilangan tersebut akan berulang secara periodik (random yang semu).

BILANGAN BINER
Mengutip dari Wikipedia, Sistem bilangan biner atau sistem bilangan basis dua adalah sebuah sitem penulisan angka dengan menggunakan dua simbol yaitu 0 dan 1. Sistem bilangan ini merupakan dasar dari semua sistem bilangan berbasis digital. Dari sistem biner, kita dapat mengkonversinya ke sistem bilangan Oktal atau Hexadesimal. Sistem ini juga dapat kita sebut dengan istilah bit, atau Binary Digit. Pengelompokan biner dalam komputer selalu berjumlah 8, dengan istilah 1 Byte. Dalam istilah komputer, 1 Byte = 8 bit. Kode-kode rancang bangun komputer, seperti ASCII, American Standard Code for Information Interchange menggunakan sistem peng-kode-an 1 Byte.
Bilangan desimal yang dinyatakan sebagai bilangan biner akan berbentuk sebagai berikut:

2^0=1
2^1=2
2^2=4
dst
Dari rumus dapat dicari konstanta a, yaitu :
a = Xn / m yang berdistribusi Uniform (0,1)