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)

Minggu, September 06, 2009

=><= CONTOH SIMULASI SEDERHANA MENGHITUNG NILAI BIAS PENDUGA =><=

Untuk memperoleh gambaran yang baik mengenai populasi, maka statistik tetha topi (nilai dugaan) yang dipakai untuk menduga parameter tetha (nilai parameter yang sebenarnya) haruslah merupakan penduga yang baik. Salah satu syarat penduga yang baik adalah tak bias.

Nilai dugaan merupakan penduga tak bias dari nilai parameter yang diduga apabila nilai ekspektasi dari dugaan sama dengan nilai parameter yang sebenarnya.

Berikut ini akan dibuat simulator untuk mengetahui apakah varians sampel sama dengan varians populasi dengan menggunakan rumus yang sudah diketahui. Data sampel diambil secara random ditetapkan berdistribusi normal dengan rata-rata 60 dan varians 1.

Algoritma untuk membuat program adalah :

1.      Mulai
2.      Dibangkitkan data  sebanyak 100 sebagai populasi
3.      Diambil n sampel sebanyak 10
Dan dihitung : 
4.      Diulangi langkah 3 sebanyak 1000 kali
5.      Dihitung bias S1 kuadrat, S2 kuadrat, dan dibandingkan
6.      Selesai

=><= CONTOH SIMULASI SEDERHANA MENAKSIR NILAI PHI =><=


Nilai phi yang kita ketahui selama ini adalah bernilai 3,14 atau 22/7. Tetapi apakah nilai ini merupakan nilai yang sebenarnya??
Phi ternyata bukanlah bilangan  rasional.
 

3,14 atau 22/7 merupakan hasil pembulatan dari perhitungan yang kita peroleh. Kita tidak dapat menghitung nilai phi yang sebenarnya, yang dapat kita hitung adalah pendekatan nilai phi-nya.
Berikut ini akan dibuat simulator untuk menaksir nilai phi.
Algoritma untuk membuat program adalah :
1.      Mulai
2.      Ditentukan i = 0
3.      i = i + 1
4.      Dibangkitkan titik  dan
5.      Dihitung
6.      Jika i < 1.000, kembali ke langkah 3
7.      Dihitung
8.      Ditulis phi
9.      Selesai
Dengan menggunakan Pascal, programnya adalah sbb :
Program nilai phi
uses wincrt;
var x,y,p:real;
i,m,n:integer;
begin
randomize;
n:=10000;
m:=0;
for i:=1 to n do
begin
x:=random;
y:=random;
if (x*x+y*y)<=1 then m:=m+1;
end;
p:=4*m/n;
writeln(‘Nilai phi :’,p);
end.
Dari program yang dibuat diatas, diperoleh nilai phi yang bervariasi. Ketelitian nilai phi tersebut bergantung pada mesin pembangkit bilangan acak. 

Agar nilai phi mendekati nilai yang sebenarnya,maka dalam program ditambah variabel s (pengulangan banyaknya sampel yang diambil, misalnya ditentukan sebanyak 1000 kali). Sehingga program yang dibuat menjadi:
Program nilai phi
uses wincrt;
var x,y,p,s:real;
i,j,m,n:integer;
begin
s:=0;
for j:=1 to 1000 do
begin
randomize;
n:=10000;
m:=0;
for i:=1 to n do
begin
x:=random;
y:=random;
if (x*x+y*y)<=1 then m:=m+1;
end;
p:=4*m/n;
s:=s+p;
end;
p:=s/1000;
writeln(‘Nilai phi :’,p);
end.