Selasa, 24 November 2009

Pembangkitan Data

Sebelum menjelang UTS, berbagai persiapan telah dilakukan. Salah satunya belajar bagaimana cara pembangkitan data,baik diskrit maupun kontinu.
Dengan berpikir keras akhirnya q dapat menjalankan beberapa pembangkitan data. Berikut ini syntax untuk random data:
1. RANDOM DATA DISTRIBUSI UNIFORM
program proguniform;
uses wincrt;
var i,n:integer;a,b,x:real;

function uniform(a,b:real):real;
var u:real;
begin
u:=random;
uniform:=(b-a)*u+a;
end;

begin
write('a= ');readln(a);
write('b= ');readln(b);
write('n= ');readln(n);
for i:=1 to n do
begin
x:=uniform(a,b);
writeln(i,'.','',x:2:5);
end;
end.

2. RANDOM DATA DISTRIBUSI BERNOULLI
program progbernoulli;
uses wincrt;

var i,n:integer;x,p:real;

function bernoulli(p:real):real;
var u:real;
begin
u:=random;
if u<=p then bernulli:=1 else bernoulli:=0
end;

begin
write('p= ');readln(p);
write('n= ');readln(n);
for i:=1 to n do
begin
x:=bernoulli(p);
writeln(i,'.','',x:2:3);
end;
end.

3. RANDOM DATA DISTRIBUSI BINOMIAL
program progbinom;
uses wincrt;

var i,n:integer;x,p:real;

function bernoulli(p:real):real;
var u:real;
begin
u:=random;
if u<=p then bernoulli:=1 else bernoulli:=0
end;

function binom(n:integer;p:real):real;
var u,sum:real;i:integer;
begin
sum:=0;
for i:=1 to n do
begin
u:=bernoulli(p);
sum:=sum+u;
end;
binom:=sum;
end;


begin
write('p= ');readln(p);
write('n= ');readln(n);
for i:=1 to n do
begin
x:=binom(n,p);
writeln(i,'.','',x:2:3);
end;
end.

4. RANDOM DATA DISTRIBUSI EXPONENSIAL
program progeksp;
uses wincrt;

var i,n:integer;x,beta:real;

function eksponen(beta:real):real;
var u:real;
begin
u:=random;
eksponen:=-beta*ln(u);
end;

begin
write('beta= ');readln(beta);
write('n= ');readln(n);
for i:=1 to n do
begin
x:=eksponen(beta);
writeln(i,'.','',x:2:3);
end;
end.

5. SERTA DISTRIBUSI YANG LAIN
program tugasaqcampur;
uses wincrt;

var varians,rata2,z1,z2,x,z1n1,z1n2,alfa,beta,alfa1,alfa2,a,b,y,p:real;
i,n,pilih:integer;mau:char;

procedure inisialisasi;
begin
x:=0;
end;

Function Exp (b : real) : real;
Var u : real;
Begin
u := random;
Exp := -b * ln(u);
End;

Procedure Normal (rata2,varians : real ; Var z1,z2 : real);
Var u1,u2,v1,v2,w,y,x1,x2 : real;
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 (varians) * x1 + rata2;
z2 := sqrt (varians) * x2 + rata2;
end
Until w <= 1;
End;

procedure lognormal(rata2,varians : real;
Var zln1,zln2 : real);
Var y1, y2 : real;
begin
Normal (rata2,varians,y1,y2);
zln1 := exp(y1);
zln2 := exp(y2);
end;

Function Gamma (alfa,beta : real):real;
Var kelar : boolean;
a,b,u,p,y,q,teta,d,u1,u2,v,w,z : real;
Begin
if alfa < 1 then
begin
b := 1 + alfa/exp(1);
Repeat
kelar := false;
u := random;
p := b * u;
if p > 1 then
begin
y := -ln((b-p)/alfa);
u := random;
if exp((alfa-1)*ln(y)) >= u then
begin
Gamma := beta * y;
kelar := true
end
end
else
begin
y := exp (ln(p)/alfa);
u := random;
if exp(-y) >= u then
begin
Gamma := beta * y;
kelar := true
end
end
Until kelar;
end
else
if (alfa > 0.99999999) and (alfa < 1.0000001) then
begin
y := Exp(1);
Gamma := beta * y;
end
else
begin
a := 1 / sqrt(2*alfa-1);
b := alfa - ln(4);
q := alfa + 1/a;
teta := 4.5;
d := 1 + ln(teta);
Repeat
kelar := false;
u1 := random;
u2 := random;
v := a * ln(u1/(1-u1));
y := alfa * exp(v);
z := sqr(u1) * u2;
w := b + q * v - y;
if (w+d-teta*z >= 0) then
begin
Gamma := beta * y;
kelar := true;
end
else
if w >= ln(z) then
begin
Gamma := beta * y;
kelar := true
end
Until kelar;
end
End;

Function FBeta (alfa1,alfa2,a,b : real):real;
Var u1,u2,y : real;
Begin
u1 := Gamma (alfa1,1);
u2 := Gamma (alfa2,1);
y := u1/(u1+u2);
Fbeta := a + (b-a) * y;
End;

Function Geometri (p : real) : real;
Var u : real;
Begin
u :=random;
Geometri := ln(u) / ln(1-p);
End;

begin
writeln('mau bangkitkan distribusi apa?');
writeln('1. distribusi normal');
writeln('2. distribusi lognormal');
writeln('3. distribusi gamma');
writeln('4. distribusi beta');
writeln('5. distribusi geometri');
writeln('jadi mau apa?');
readln(pilih);
case pilih of
1: begin
write('varian='); readln(varians);
write('rata2='); readln(rata2);
write('n ='); readln(n);
for i:=1 to n do begin
Normal(rata2,varians,z1,z2);
writeln(i,'.',z1:5:3,' ',z2:5:3);
end;
end;
2: begin
write('rata2 ='); readln(rata2);
write('varian ='); readln(varians);
write('n ='); readln(n);
for i:=1 to n do begin
lognormal(rata2,varians,z1n1,z1n2);
writeln(i,'.',z1n1:5:3,' ',z1n2:5:3);
end;
end;
3: begin
write('alfa='); readln(alfa);
write('beta='); readln(beta);
write('n='); readln(n);
for i:=1 to n do
begin
x:=gamma(alfa,beta);
writeln(i,'.',x:5:3);
end;
end;
4: begin
write('alfa1 ='); readln(alfa1);
write('alfa2 ='); readln(alfa2);
write('a ='); readln(a);
write('b ='); readln(b);
write('n ='); readln(n);
for i:=1 to n do
begin
x:=Fbeta(alfa1,alfa2,a,b);
writeln(i,'.',x:5:3);
end;
end;
5: begin
writeln('masukan banyak data yang diinginkan:');
readln(n);
writeln('peluang sukses=');
readln(p);
for i:=1 to n do
begin
x:=Geometri(p);
writeln('data bangkitan :',x:0:3);
end;
end;
end;
end.



;;