00001
00002
00003
00004
00005
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
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
00077
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 }