ADMB Documentation  11.5.3197
 All Classes Files Functions Variables Typedefs Friends Defines
ranfill2.cpp
Go to the documentation of this file.
00001 /*
00002  * $Id$
00003  *
00004  * Author: David Fournier
00005  * Copyright (c) 2008-2012 Regents of the University of California
00006  */
00011 #include <fvar.hpp>
00012 
00013 #ifdef __TURBOC__
00014   #pragma hdrstop
00015   #include <iostream.h>
00016 #endif
00017 
00018 #ifdef __ZTC__
00019   #include <iostream.hpp>
00020 #endif
00021 
00022 #include <math.h>
00023 
00024 double auto_rand(long int& idum, int reset);
00025 void reinitialize_auto_rand();
00026 double randn(long int& n);
00027 
00032   void dvar_vector::fill_randu(long int& n)
00033   {
00034     long int nn;
00035     RETURN_ARRAYS_INCREMENT();
00036     nn=n;
00037     for (int i=indexmin(); i<=indexmax(); i++)
00038     {
00039       elem(i)=auto_rand(nn,1);
00040     }
00041     reinitialize_auto_rand();
00042     RETURN_ARRAYS_DECREMENT();
00043   }
00044 
00049   void dvar_vector::fill_randbi(long int& n, double p)
00050   {
00051     if ( p<0 || p>1)
00052     {
00053       cerr << "Error in dvar_vector::fill_randbi proportions of"
00054        " successes must lie between 0 and 1\n";
00055       ad_exit(1);
00056     }
00057     long int nn;
00058     RETURN_ARRAYS_INCREMENT();
00059     nn=n;
00060     for (int i=indexmin(); i<=indexmax(); i++)
00061     {
00062       if (auto_rand(nn,1)<=p)
00063       {
00064         elem(i)=1.;
00065       }
00066       else
00067       {
00068         elem(i)=0.;
00069       }
00070     }
00071     reinitialize_auto_rand();
00072     RETURN_ARRAYS_DECREMENT();
00073   }
00074 
00079 void dvar_matrix::colfill_randu(const int &j, long int &n)
00080   {
00081     long int nn;
00082     RETURN_ARRAYS_INCREMENT();
00083     nn=n;
00084     for (int i=rowmin(); i<=rowmax(); i++)
00085     {
00086       elem(i,j)=auto_rand(nn,1);
00087     }
00088     reinitialize_auto_rand();
00089     RETURN_ARRAYS_DECREMENT();
00090   }
00091 
00096 void dvar_matrix::rowfill_randu(const int& i, long int& n)
00097   {
00098     long int nn;
00099     RETURN_ARRAYS_INCREMENT();
00100     nn=n;
00101     for (int j=colmin(); j<=colmax(); j++)
00102     {
00103       elem(i,j)=auto_rand(nn,1);
00104     }
00105     RETURN_ARRAYS_DECREMENT();
00106     reinitialize_auto_rand();
00107   }
00108 
00113   void dvar_vector::fill_randn(long int& n)
00114   {
00115     long int nn;
00116     RETURN_ARRAYS_INCREMENT();
00117     nn=n;
00118     for (int i=indexmin(); i<=indexmax(); i++)
00119     {
00120       elem(i)=randn(nn);
00121     }
00122     reinitialize_auto_rand();
00123     RETURN_ARRAYS_DECREMENT();
00124   }
00125 
00130 void dvar_matrix::colfill_randn(const int &j, long int &n)
00131   {
00132     long int nn;
00133     RETURN_ARRAYS_INCREMENT();
00134     nn=n;
00135     for (int i=rowmin(); i<=rowmax(); i++)
00136     {
00137       elem(i,j)=randn(nn);
00138     }
00139     reinitialize_auto_rand();
00140     RETURN_ARRAYS_DECREMENT();
00141   }
00142 
00147 void dvar_matrix::rowfill_randn(const int& i, long int& n)
00148   {
00149     long int nn;
00150     RETURN_ARRAYS_INCREMENT();
00151     nn=n;
00152     for (int j=colmin(); j<=colmax(); j++)
00153     {
00154       elem(i,j)=randn(nn);
00155     }
00156     reinitialize_auto_rand();
00157     RETURN_ARRAYS_DECREMENT();
00158   }
00159 
00164   void dvar_matrix::fill_randn(long int& n)
00165   {
00166     long int nn=n;
00167     RETURN_ARRAYS_INCREMENT();
00168     for (int i=rowmin(); i<=rowmax(); i++)
00169     {
00170       elem(i).fill_randn_ni(nn);
00171       nn+=2;
00172     }
00173     reinitialize_auto_rand();
00174     RETURN_ARRAYS_DECREMENT();
00175   }
00176 
00181   void dvar_matrix::fill_randu(long int& n)
00182   {
00183     long int nn=n;
00184     RETURN_ARRAYS_INCREMENT();
00185     for (int i=rowmin(); i<=rowmax(); i++)
00186     {
00187       elem(i).fill_randn_ni(nn);
00188       nn+=2;
00189     }
00190     reinitialize_auto_rand();
00191     RETURN_ARRAYS_DECREMENT();
00192   }
00193 
00198   void dvar3_array::fill_randn(long int& n)
00199   {
00200     long int nn;
00201     nn=n;
00202     for (int i=slicemin(); i<=slicemax(); i++)
00203     {
00204       elem(i).fill_randn_ni(nn);
00205       nn+=2;
00206     }
00207     reinitialize_auto_rand();
00208   }
00209 
00214   void dvar3_array::fill_randu(long int& n)
00215   {
00216     long int nn;
00217     nn=n;
00218     for (int i=slicemin(); i<=slicemax(); i++)
00219     {
00220       elem(i).fill_randu_ni(nn);
00221       nn+=2;
00222     }
00223     reinitialize_auto_rand();
00224   }