Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007 #include <admodel.h>
00008
00009 #ifdef ISZERO
00010 #undef ISZERO
00011 #endif
00012 #define ISZERO(d) ((d)==0.0)
00013
00014
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
00047
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 }