Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007 #include <admodel.h>
00008
00009 int adkdelta(int i,int j)
00010 {
00011 return i == j ? 1 : 0;
00012 }
00013
00014 void param_init_number::dev_correction(const dmatrix& H, const int& _ii)
00015 {
00016 int& ii=(int&) _ii;
00017 ii++;
00018 }
00019
00020 void param_init_matrix::dev_correction(const dmatrix& H, const int& _ii)
00021 {
00022 int& ii=(int&) _ii;
00023 ii+=size_count();
00024 }
00025
00026 void param_init_d3array::dev_correction(const dmatrix& H, const int& _ii)
00027 {
00028 int& ii=(int&) _ii;
00029 ii+=size_count();
00030 }
00031
00032 void param_init_vector::dev_correction(const dmatrix& H, const int& _ii)
00033 {
00034 int& ii=(int&) _ii;
00035 ii+=size_count();
00036 }
00037
00038 void param_init_bounded_vector::dev_correction(const dmatrix& H, const int& _ii)
00039 {
00040 int& ii=(int&) _ii;
00041 ii+=size_count();
00042 }
00043
00044 void param_init_bounded_dev_vector::dev_correction(const dmatrix& _H,
00045 const int& _ii)
00046 {
00047 dmatrix& H=(dmatrix&) _H;
00048 int& ii=(int&) _ii;
00049 int lmin=ii;
00050 int n=size();
00051 int lmax=lmin+n-1;
00052 dmatrix Htmp(lmin,lmax,lmin,lmax);
00053 double ninv=1.0/double(n);
00054 int i,j,k,l;
00055 for (i=lmin;i<=lmax;i++)
00056 {
00057 for (j=lmin;j<=lmax;j++)
00058 {
00059 double tmp=0.0;
00060 for (k=lmin;k<=lmax;k++)
00061 {
00062 for (l=lmin;l<=lmax;l++)
00063 {
00064 tmp+=(adkdelta(i,k)-ninv)*(adkdelta(j,l)-ninv)*H(k,l);
00065 }
00066 }
00067 Htmp(i,j)=tmp;
00068 }
00069 }
00070 for (i=lmin;i<=lmax;i++)
00071 {
00072 for (j=lmin;j<=lmax;j++)
00073 {
00074 H(i,j)=Htmp(i,j);
00075 }
00076 }
00077 ii+=n;
00078 }