ADMB Documentation  11.5.3197
 All Classes Files Functions Variables Typedefs Friends Defines
model10.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  */
00007 #include <admodel.h>
00008 
00009 #ifdef ISZERO
00010   #undef ISZERO
00011 #endif
00012 #define ISZERO(d) ((d)==0.0)
00013 
00014 //double ndfboundp(double x, double fmin, double fmax, const double& fpen);
00015 
00016 void param_init_number::sd_scale(const dvector& _d, const dvector& x,
00017   const int& _ii)
00018   {
00019     int& ii=(int&) _ii;
00020     dvector& d=(dvector&) _d;
00021     d(ii)=1;
00022     if (!ISZERO(scalefactor)) d(ii)/=scalefactor;
00023     ii++;
00024   }
00025 
00026 void param_init_bounded_number::sd_scale(const dvector& _d, const dvector& x,
00027   const int& _ii)
00028   {
00029     int& ii=(int&) _ii;
00030     dvector& d=(dvector&) _d;
00031     double pen=0;
00032     if(!initial_params::mc_phase)
00033     {
00034       if (ISZERO(scalefactor))
00035         d(ii)=ndfboundp(x(ii),minb,maxb,pen);
00036       else
00037         d(ii)=ndfboundp(x(ii)/scalefactor,minb,maxb,pen)/scalefactor;
00038     }
00039     else
00040     {
00041       if (ISZERO(scalefactor))
00042         d(ii)=ndfboundp_mc(x(ii),minb,maxb,pen);
00043       else
00044         d(ii)=ndfboundp_mc(x(ii)/scalefactor,minb,maxb,pen)/scalefactor;
00045     }
00046     //d(ii)=(boundp(x(ii)+1.e-6,minb,maxb,pen)-
00047     //boundp(x(ii)-1.e-6,minb,maxb,pen))/2.e-6;
00048     ii++;
00049   }
00050 
00051 void param_init_vector::sd_scale(const dvector& _v, const dvector& x,
00052   const int& _ii)
00053   {
00054     if (allocated(*this))
00055     {
00056       int& ii=(int&) _ii;
00057       dvector& v=(dvector&) _v;
00058       int mmin=indexmin();
00059       int mmax=indexmax();
00060       for (int i=mmin;i<=mmax;i++)
00061       {
00062         v(ii)=1.;
00063         if (!ISZERO(scalefactor)) v(ii)/=scalefactor;
00064         ii++;
00065       }
00066     }
00067   }
00068 
00069 void param_init_matrix::sd_scale(const dvector& _v, const dvector& x,
00070   const int& _ii)
00071   {
00072     if (allocated(*this))
00073     {
00074       int& ii=(int&) _ii;
00075       dvector& v=(dvector&) _v;
00076       int mmin=rowmin();
00077       int mmax=rowmax();
00078       for (int i=mmin;i<=mmax;i++)
00079       {
00080         if (allocated((*this)(i)))
00081         {
00082           int cmin=((*this)(i)).indexmin();
00083           int cmax=((*this)(i)).indexmax();
00084           for (int j=cmin;j<=cmax;j++)
00085           {
00086             v(ii)=1.;
00087             if (!ISZERO(scalefactor)) v(ii)/=scalefactor;
00088             ii++;
00089           }
00090         }
00091       }
00092     }
00093   }
00094 
00095 void param_init_bounded_vector::sd_scale(const dvector& _v, const dvector& x,
00096   const int& _ii)
00097   {
00098     if (allocated(*this))
00099     {
00100       int& ii=(int&) _ii;
00101       dvector& v=(dvector&) _v;
00102       int mmin=indexmin();
00103       int mmax=indexmax();
00104       double pen=0;
00105       if(!initial_params::mc_phase)
00106       {
00107         for (int i=mmin;i<=mmax;i++)
00108         {
00109           if (ISZERO(scalefactor))
00110             v(ii)=ndfboundp(x(ii),minb,maxb,pen);
00111           else
00112             v(ii)=ndfboundp(x(ii)/scalefactor,minb,maxb,pen)/scalefactor;
00113           ii++;
00114         }
00115       }
00116       else
00117       {
00118         for (int i=mmin;i<=mmax;i++)
00119         {
00120           v(ii)=ndfboundp_mc(x(ii),minb,maxb,pen);
00121           ii++;
00122         }
00123       }
00124     }
00125   }
00126 
00127 void param_init_bounded_matrix::sd_scale(const dvector& _v, const dvector& x,
00128   const int& _ii)
00129   {
00130     if (allocated(*this))
00131     {
00132       int& ii=(int&) _ii;
00133       dvector& v=(dvector&) _v;
00134       int rmin=rowmin();
00135       int rmax=rowmax();
00136       double pen=0;
00137       for (int i=rmin;i<=rmax;i++)
00138       {
00139         if (allocated((*this)(i)))
00140         {
00141           int cmin=(*this)(i).indexmin();
00142           int cmax=(*this)(i).indexmax();
00143           for (int j=cmin;j<=cmax;j++)
00144           {
00145             if (ISZERO(scalefactor))
00146               v(ii)=ndfboundp(x(ii),minb,maxb,pen);
00147             else
00148               v(ii)=ndfboundp(x(ii)/scalefactor,minb,maxb,pen)/
00149                 scalefactor;
00150             ii++;
00151           }
00152         }
00153       }
00154     }
00155   }
00156 
00157   void param_init_bounded_number::set_minb(double x)
00158   {
00159     minb=x;
00160   }
00161 
00162   double param_init_bounded_number::get_minb(void)
00163   {
00164     return minb;
00165   }
00166 
00167   void param_init_bounded_vector::set_minb(double x)
00168   {
00169     minb=x;
00170   }
00171 
00172   double param_init_bounded_vector::get_minb(void)
00173   {
00174     return minb;
00175   }
00176 
00177   void param_init_bounded_matrix::set_minb(double x)
00178   {
00179     minb=x;
00180   }
00181 
00182   double param_init_bounded_matrix::get_minb(void)
00183   {
00184     return minb;
00185   }