with Ada.Text_Io; use Ada.Text_IO ;
with Ada.Long_Float_Text_IO ; use Ada.Long_Float_Text_IO ;
with Ada.Command_Line; use Ada.Command_Line;
with Interfaces.C; use Interfaces.C ;
with Interfaces.C.Strings; use Interfaces.C.Strings ;
with gsl ;
with gsl.rng ;
with gsl.randist ;
procedure bigauss is
rng : access gsl.rng.gsl_rng ;
sigma_x : double := 1.0 ;
sigma_y : double := 1.0 ;
rho : double := 0.9 ;
outfile : File_Type ;
procedure Create(fn : String ) is
begin
Create(outfile, Out_File, fn );
Set_Output(outfile);
end Create ;
procedure Close is
begin
Close(outfile);
Set_Output(Standard_Output);
end Close;
procedure TestBivariateGaussian is
x , y : aliased double ;
begin
Put(Interfaces.C.Strings.Value( gsl.rng.name(rng) ));
New_Line;
Create (Value(gsl.rng.name(rng)) & ".bi.txt");
for i in 1..1024
loop
gsl.randist.bivariate_gaussian(rng,sigma_x, sigma_y , rho , x'access , y'access );
Put(Long_Float(x)); Put(" ; "); Put(Long_Float(y));
New_Line;
end loop ;
Close ;
end TestBivariateGaussian ;
procedure TestBivariateGaussianPdf is
x : double := -2.0 ;
xdelta : double := 2.0 * abs(x) / 1024.0 ;
y : double := -2.0 ;
ydelta : double := 2.0 * abs(x) / 1024.0 ;
pd : double ;
begin
Put(Interfaces.C.Strings.Value( gsl.rng.name(rng) ));
New_Line;
Create (Value(gsl.rng.name(rng)) & ".bi.pdf.txt");
for i in 1..1024
loop
y := -2.0 ;
for j in 1..1024
loop
pd := gsl.randist.bivariate_gaussian_pdf(x,y,sigma_x, sigma_y , rho );
Put(Long_Float(x)); Put(" ; ");
Put(Long_Float(y)); Put(" ; ");
Put(Long_Float(pd));
New_Line;
y := y + ydelta ;
end loop ;
x := x + xdelta ;
end loop ;
Close ;
end TestBivariateGaussianPdf ;
begin
Put_Line("Default Random Number Generator ");
Put_Line("Setup from environment");
rng := gsl.rng.alloc(gsl.rng.env_setup);
if Argument_Count > 0
then
sigma_x := double'Value(Argument(1));
if Argument_Count > 1
then
sigma_y := double'Value(Argument(2));
if Argument_Count > 2
then
rho := double'Value(Argument(3));
end if ;
end if ;
end if;
TestBivariateGaussian;
TestBivariateGaussianPdf;
gsl.rng.free(rng);
end bigauss ;