ADMB Documentation  -a65f1c97
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
getbigs.cpp
Go to the documentation of this file.
1 
8 # include <df1b2fun.h>
9 #include <admodel.h>
10 
15 void function_minimizer::get_bigS(int ndvar,int nvar1,int nvar,
16  dmatrix& S,dmatrix& BS,dvector& scale)
17 {
18  dmatrix tv(1,ndvar,1,nvar1);
19  adstring tmpstring="admodel.dep";
20  if (ad_comm::wd_flag)
21  tmpstring = ad_comm::adprogram_name + ".dep";
22  cifstream cif((char*)tmpstring);
23 
24  int tmp_nvar = 0, tmp_ndvar = 0;
25  cif >> tmp_nvar >> tmp_ndvar;
26  if (tmp_nvar!=nvar1)
27  {
28  cerr << " tmp_nvar != nvar1 in file " << tmpstring
29  << endl;
30  ad_exit(1);
31  }
32 
33  int us=nvar1-nvar;
34  int xsize = 0;
35  dmatrix minv(1,us,1,us);
36  dmatrix uhat_prime(1,us,1,nvar);
37  uhat_prime.initialize();
38  int Bnvar=nvar+us;
39  // get l_uu and l_xu for covariance calculations
40  if (lapprox->hesstype !=2)
41  {
42  dmatrix Dux(1,us,1,nvar);
43  int usize = 0;
44  tmpstring = ad_comm::adprogram_name + ".luu";
45  uistream ifs1((char*)(tmpstring));
46  ifs1 >> usize >> xsize;
47  if (!ifs1)
48  {
49  cerr << "Error reading from file " << tmpstring << endl;
50  ad_exit(1);
51  }
52  // check xsize and usize
53  if (xsize !=nvar ||usize !=us)
54  {
55  cerr << "size error in file " << tmpstring << endl;
56  ad_exit(1);
57  }
58  ifs1 >> minv;
59  ifs1 >> Dux;
60  if (!ifs1)
61  {
62  cerr << "Error reading from file " << tmpstring << endl;
63  ad_exit(1);
64  }
65  uhat_prime=-minv*Dux;
66  }
67  else
68  {
69  if (nvar !=lapprox->xsize)
70  {
71  cerr << "error in sizes in mod_sd" << endl;
72  ad_exit(1);
73  }
74  if (us !=lapprox->usize)
75  {
76  cerr << "error in sizes in mod_sd" << endl;
77  ad_exit(1);
78  }
79  xsize=lapprox->xsize;
80  // calculate uhat_prime from the block diagnal matrix
83  int mmin=H.indexmin();
84  int mmax=H.indexmax();
85  for (int i=mmin;i<=mmax;i++)
86  {
87  if (allocated(H(i)))
88  {
89  dmatrix tmp=-inv(H(i))*Dux(i);
90  int rmin=H(i).indexmin();
91  int rmax=H(i).indexmax();
92  int tmpmin=Dux(i).indexmin();
93  int cmin=Dux(i,tmpmin).indexmin();
94  int cmax=Dux(i,tmpmin).indexmax();
95 
96  for (int j=rmin;j<=rmax;j++)
97  {
98  for (int k=cmin;k<=cmax;k++)
99  {
100  int i1=(*lapprox->block_diagonal_re_list)(i,j)-nvar;
101  uhat_prime(i1,(*lapprox->block_diagonal_fe_list)(i,k))=
102  tmp(j,k);
103  }
104  }
105  }
106  }
107  // rescale uhat_prime to be der wrt x
108  {
109  int rmin=uhat_prime.indexmin();
110  int rmax=uhat_prime.indexmax();
111  int cmin=uhat_prime(rmin).indexmin();
112  int cmax=uhat_prime(rmin).indexmax();
113  for (int i=rmin;i<=rmax;i++)
114  {
115  for (int j=cmin;j<=cmax;j++)
116  {
117  uhat_prime(i,j)*=scale(j);
118  }
119  }
120  }
121  }
122  dmatrix Sux=uhat_prime*S;
123  dmatrix Suu=Sux*trans(uhat_prime);
124  if (lapprox->hesstype !=2)
125  {
126  if (lapprox->saddlepointflag==2)
127  {
128  Suu-=minv;
129  }
130  else
131  {
132  Suu+=minv;
133  }
134  }
135  else
136  {
138  int mmin=H.indexmin();
139  int mmax=H.indexmax();
140  for (int i=mmin;i<=mmax;i++)
141  {
142  if (allocated(H(i)))
143  {
144  dmatrix tmp=inv(H(i));
145  int rmin=H(i).indexmin();
146  int rmax=H(i).indexmax();
147 
148  for (int j=rmin;j<=rmax;j++)
149  {
150  for (int k=rmin;k<=rmax;k++)
151  {
152  int j1=(*lapprox->block_diagonal_re_list)(i,j)-nvar;
153  int k1=(*lapprox->block_diagonal_re_list)(i,k)-nvar;
154  if (lapprox->saddlepointflag==2)
155  {
156  Suu(j1,k1)-=tmp(j,k);
157  }
158  else
159  {
160  Suu(j1,k1)+=tmp(j,k);
161  }
162  }
163  }
164  }
165  }
166  }
167  minv.deallocate();
168  BS.initialize();
169  // random effects are never bounded?
170  scale(xsize+1,Bnvar)=1.0;
171 
172  for (int i=1;i<=xsize;i++)
173  {
174  for (int j=1;j<=xsize;j++)
175  {
176  BS(i,j)=S(i,j);
177  }
178  }
179 
180  for (int i=xsize+1;i<=Bnvar;i++)
181  {
182  for (int j=1;j<=xsize;j++)
183  {
184  BS(i,j)=Sux(i-xsize,j);
185  BS(j,i)=BS(i,j);
186  }
187  }
188 
189  for (int i=xsize+1;i<=Bnvar;i++)
190  {
191  for (int j=xsize+1;j<=Bnvar;j++)
192  {
193  BS(i,j)=Suu(i-xsize,j-xsize);
194  }
195  }
196  //
197  // int us=nvar1-nvar;
198  // int xsize,usize;
199  // // get l_uu and l_xu for covariance calculations
200  // tmpstring = ad_comm::adprogram_name + ".luu";
201  // uistream ifs1((char*)(tmpstring));
202  // ifs1 >> usize >> xsize;
203  // if (!ifs1)
204  // {
205  // cerr << "Error reading from file " << tmpstring << endl;
206  // ad_exit(1);
207  // }
208  // // check xsize and usize
209  // if (xsize !=nvar ||usize !=us)
210  // {
211  // cerr << "size error in file " << tmpstring << endl;
212  // ad_exit(1);
213  // }
214  // dmatrix minv(1,usize,1,usize);
215  // dmatrix Dux(1,usize,1,xsize);
216  // int Bnvar=xsize+usize;
217  // ifs1 >> minv;
218  // ifs1 >> Dux;
219  // if (!ifs1)
220  // {
221  // cerr << "Error reading from file " << tmpstring << endl;
222  // ad_exit(1);
223  // }
224  // dmatrix S(1,nvar,1,nvar);
225  // read_covariance_matrix(S,nvar);
226  // dmatrix uhat_prime=minv*Dux;
227  // dmatrix Sux=uhat_prime*S;
228  // dmatrix Suu=Sux*trans(uhat_prime);
229  // Suu+=minv;
230  // //Suu=minv;
231  // minv.deallocate();
232  // BS.initialize();
233  // // random effects are never bounded?
234  //
235  // int i;
236  //
237  // for (i=1;i<=xsize;i++)
238  // {
239  // for (int j=1;j<=xsize;j++)
240  // {
241  // BS(i,j)=S(i,j);
242  // }
243  // }
244  //
245  // for (i=xsize+1;i<=Bnvar;i++)
246  // {
247  // for (int j=1;j<=xsize;j++)
248  // {
249  // BS(i,j)=Sux(i-xsize,j);
250  // BS(j,i)=BS(i,j);
251  // }
252  // }
253  //
254  // for (i=xsize+1;i<=Bnvar;i++)
255  // {
256  // for (int j=xsize+1;j<=Bnvar;j++)
257  // {
258  // BS(i,j)=Suu(i-xsize,j-xsize);
259  // }
260  // }
261 }
laplace_approximation_calculator * lapprox
Definition: admodel.h:1862
void deallocate()
Deallocate dmatrix memory.
Definition: dmat.cpp:363
int indexmax() const
Definition: fvar.hpp:3822
dmatrix trans(const dmatrix &m1)
Author: David Fournier Copyright (c) 2008-2012 Regents of the University of California.
Definition: dmat2.cpp:13
int allocated(const ivector &v)
Author: David Fournier Copyright (c) 2008-2012 Regents of the University of California.
Definition: fvar_a59.cpp:13
Vector of double precision numbers.
Definition: dvector.h:50
int indexmin() const
Definition: fvar.hpp:2917
exitptr ad_exit
Definition: gradstrc.cpp:53
static adstring adprogram_name
Definition: fvar.hpp:8860
prnstream & endl(prnstream &)
Description not yet available.
void get_bigS(int ndvar, int nvar1, int nvar, dmatrix &S, dmatrix &BS, dvector &scale)
Description not yet available.
Definition: getbigs.cpp:15
Description not yet available.
Definition: fvar.hpp:2819
int indexmax() const
Definition: fvar.hpp:2921
Description not yet available.
int indexmin() const
Definition: fvar.hpp:3818
Description not yet available.
Definition: fvar.hpp:3516
Description not yet available.
Definition: fvar.hpp:3727
void initialize(void)
Author: David Fournier Copyright (c) 2008-2012 Regents of the University of California.
Definition: dmat7.cpp:12
static unsigned int wd_flag
Definition: fvar.hpp:8864
df1_one_variable inv(const df1_one_variable &x)
Definition: df11fun.cpp:384