ADMB Documentation  11.5.3197
 All Classes Files Functions Variables Typedefs Friends Defines
df1b2f25.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  */
00012 #include <df1b2fun.h>
00013 #include <admodel.h>
00014 
00015 #ifdef ISZERO
00016   #undef ISZERO
00017 #endif
00018 #define ISZERO(d) ((d)==0.0)
00019 
00020 //double ndfboundp( double x, double fmin, double fmax,const double& fpen);
00021 
00026   int initial_df1b2params::stddev_scale(const dvector& d,const dvector& x)
00027   {
00028     int ii=1;
00029     for (int i=0;i<num_initial_df1b2params;i++)
00030     {
00031       if (withinbound(0,(varsptr[i])->phase_start,current_phase))
00032         (varsptr[i])->sd_scale(d,x,ii);
00033     }
00034     return ii-1;
00035   }
00036 
00041 void df1b2_init_number::sd_scale(const dvector& _d,const dvector& x,
00042   const int& _ii)
00043   {
00044     int& ii=(int&) _ii;
00045     dvector& d=(dvector&) _d;
00046     d(ii)=1;
00047     if (!ISZERO(scalefactor)) d(ii)/=scalefactor;
00048     ii++;
00049   }
00050 
00055 void df1b2_init_bounded_number::sd_scale(const dvector& _d,const dvector& x,
00056   const int& _ii)
00057   {
00058     int& ii=(int&) _ii;
00059     dvector& d=(dvector&) _d;
00060     double pen=0;
00061     if(!initial_params::mc_phase)
00062     {
00063       if (ISZERO(scalefactor))
00064         d(ii)=ndfboundp(x(ii),minb,maxb,pen);
00065       else
00066         d(ii)=ndfboundp(x(ii)/scalefactor,minb,maxb,pen)/scalefactor;
00067     }
00068     else
00069     {
00070       if (ISZERO(scalefactor))
00071         d(ii)=ndfboundp_mc(x(ii),minb,maxb,pen);
00072       else
00073         d(ii)=ndfboundp_mc(x(ii)/scalefactor,minb,maxb,pen)/scalefactor;
00074     }
00075 
00076     //d(ii)=(boundp(x(ii)+1.e-6,minb,maxb,pen)-
00077     //boundp(x(ii)-1.e-6,minb,maxb,pen))/2.e-6;
00078     ii++;
00079   }
00080 
00085 void df1b2_init_vector::sd_scale(const dvector& _v,const dvector& x,
00086   const int& _ii)
00087   {
00088     if (allocated())
00089     {
00090       int& ii=(int&) _ii;
00091       dvector& v=(dvector&) _v;
00092       int mmin=indexmin();
00093       int mmax=indexmax();
00094       for (int i=mmin;i<=mmax;i++)
00095       {
00096         v(ii)=1.;
00097         if (!ISZERO(scalefactor)) v(ii)/=scalefactor;
00098         ii++;
00099       }
00100     }
00101   }
00102 
00107 void df1b2_init_matrix::sd_scale(const dvector& _v,const dvector& x,
00108   const int& _ii)
00109   {
00110     if (allocated())
00111     {
00112       int& ii=(int&) _ii;
00113       dvector& v=(dvector&) _v;
00114       int mmin=indexmin();
00115       int mmax=indexmax();
00116       for (int i=mmin;i<=mmax;i++)
00117       {
00118         if (::allocated((*this)(i)))
00119         {
00120           int cmin=((*this)(i)).indexmin();
00121           int cmax=((*this)(i)).indexmax();
00122           for (int j=cmin;j<=cmax;j++)
00123           {
00124             v(ii)=1.;
00125             if (!ISZERO(scalefactor)) v(ii)/=scalefactor;
00126             ii++;
00127           }
00128         }
00129       }
00130     }
00131   }
00132 
00137 void df1b2_init_bounded_vector::sd_scale(const dvector& _v,const dvector& x,
00138   const int& _ii)
00139   {
00140     if (allocated())
00141     {
00142       int& ii=(int&) _ii;
00143       dvector& v=(dvector&) _v;
00144       int mmin=indexmin();
00145       int mmax=indexmax();
00146       double pen=0;
00147       if(!initial_params::mc_phase)
00148       {
00149         for (int i=mmin;i<=mmax;i++)
00150         {
00151           if (ISZERO(scalefactor))
00152             v(ii)=ndfboundp(x(ii),minb,maxb,pen);
00153           else
00154             v(ii)=ndfboundp(x(ii)/scalefactor,minb,maxb,pen)/scalefactor;
00155           ii++;
00156         }
00157       }
00158       else
00159       {
00160         for (int i=mmin;i<=mmax;i++)
00161         {
00162           v(ii)=ndfboundp_mc(x(ii),minb,maxb,pen);
00163           ii++;
00164         }
00165       }
00166     }
00167   }
00168 
00173 void df1b2_init_bounded_matrix::sd_scale(const dvector& _v,const dvector& x,
00174   const int& _ii)
00175   {
00176     if (allocated())
00177     {
00178       int& ii=(int&) _ii;
00179       dvector& v=(dvector&) _v;
00180       int rmin=indexmin();
00181       int rmax=indexmax();
00182       double pen=0;
00183       for (int i=rmin;i<=rmax;i++)
00184       {
00185         if (::allocated((*this)(i)))
00186         {
00187           int cmin=(*this)(i).indexmin();
00188           int cmax=(*this)(i).indexmax();
00189           for (int j=cmin;j<=cmax;j++)
00190           {
00191             if (ISZERO(scalefactor))
00192               v(ii)=ndfboundp(x(ii),minb,maxb,pen);
00193             else
00194               v(ii)=ndfboundp(x(ii)/scalefactor,minb,maxb,pen)/
00195                 scalefactor;
00196             ii++;
00197           }
00198         }
00199       }
00200     }
00201   }
00202 
00207 int allocated(const df1b2vector& _x)
00208 {
00209   ADUNCONST(df1b2vector,x)
00210   return x.allocated();
00211 }
00212 
00217 int allocated(const df1b2_init_vector& _x)
00218 {
00219   ADUNCONST(df1b2_init_vector,x)
00220   return x.allocated();
00221 }
00222 
00227 int allocated(const df1b2_init_matrix& _x)
00228 {
00229   ADUNCONST(df1b2_init_matrix,x)
00230   return x.allocated();
00231 }
00232 
00237 int allocated(const df1b2matrix& _x)
00238 {
00239   ADUNCONST(df1b2matrix,x)
00240   return x.allocated();
00241 }