1 |
|
#include "NLModel.hpp" |
2 |
+ |
#include <math.h> |
3 |
|
|
4 |
|
/** |
5 |
|
* calculate gradient using backward finite difference |
22 |
|
//tempX[i] = x[i] + hi; |
23 |
|
tempX[i] -= hi; |
24 |
|
|
25 |
< |
fminus = (*objfunc)(tempX); |
25 |
> |
fminus = calcF(tempX); |
26 |
|
|
27 |
|
partialGrad[i] = (fx - fminus) / hi; |
28 |
|
|
37 |
|
tempX[i] -= hi; |
38 |
|
} |
39 |
|
|
40 |
< |
fminus = (*objfunc)(tempX); |
40 |
> |
fminus = calcF(tempX); |
41 |
|
|
42 |
|
if(procMappingArray[i] == myRank){ |
43 |
|
partialGrad[i] = (fx - fminus) / hi; |
73 |
|
//tempX[i] = x[i] + hi; |
74 |
|
tempX[i] += hi; |
75 |
|
|
76 |
< |
fplus = (*objfunc)(tempX); |
76 |
> |
fplus = calcF(tempX); |
77 |
|
|
78 |
|
partialGrad[i] = (fplus - fx) / hi; |
79 |
|
|
89 |
|
tempX[i] += hi; |
90 |
|
} |
91 |
|
|
92 |
< |
fminus = (*objfunc)(tempX); |
92 |
> |
fminus = calcF(tempX); |
93 |
|
|
94 |
|
if(procMappingArray[i] == myRank){ |
95 |
|
partialGrad[i] = (fx - fminus) / hi; |
125 |
|
//tempX[i] = x[i] + hi |
126 |
|
tempX[i] += hi; |
127 |
|
|
128 |
< |
fplus = (*objfunc)(tempX); |
128 |
> |
fplus = calcF(tempX); |
129 |
|
|
130 |
|
//tempX[i] = x[i] -hi |
131 |
|
tempX[i] -= 2*hi; |
132 |
< |
fminus = (*objfunc)(tempX); |
132 |
> |
fminus = calcF(tempX); |
133 |
|
|
134 |
|
partialGrad[i] = (fplus + fminus) / (2*hi); |
135 |
|
|
145 |
|
tempX[i] += hi; |
146 |
|
} |
147 |
|
|
148 |
< |
fplus = (*objfunc)(tempX); |
148 |
> |
fplus = calcF(tempX); |
149 |
|
|
150 |
|
if(procMappingArray[i] == myRank){ |
151 |
|
partialGrad[i] = (fx - fminus) / hi; |
179 |
|
vector<double> tempX; |
180 |
|
vector<double> fi(ndim); |
181 |
|
vector<double> hi; |
182 |
< |
double fij; |
182 |
> |
double fii, fij; |
183 |
|
|
184 |
|
tempX = x; |
185 |
|
|
194 |
|
|
195 |
|
fi[i] = calcF(tempX); |
196 |
|
|
197 |
< |
tempX[i] -= hi; |
197 |
> |
tempX[i] -= hi[i]; |
198 |
|
|
199 |
|
#else |
200 |
|
|
222 |
|
|
223 |
|
fii = calcF(tempX); |
224 |
|
|
225 |
< |
H(i,j) = ((fx - fi[i]) + (fii - fi[i])) / (hi[i]*hi[i]); |
225 |
> |
H(i, i) = ((fx - fi[i]) + (fii - fi[i])) / (hi[i]*hi[i]); |
226 |
|
|
227 |
|
tempX[i] -= hi[i]; |
228 |
|
|
232 |
|
|
233 |
|
fij = calcF(tempX); |
234 |
|
|
235 |
< |
H(i,j) = ((f - fi[i]) + (fij - fi[j])) / (hi[i]*hi[j]); |
235 |
> |
H(i,j) = ((fx - fi[i]) + (fij - fi[j])) / (hi[i]*hi[j]); |
236 |
|
|
237 |
|
tempX[j] -= hi[j]; |
238 |
|
} |
249 |
|
|
250 |
|
fii = calcF(tempX); |
251 |
|
|
252 |
< |
H(i,j) = ((fx - fi[i]) + (fii - fi[i])) / (hi[i]*hi[i]); |
252 |
> |
H(i,i) = ((fx - fi[i]) + (fii - fi[i])) / (hi[i]*hi[i]); |
253 |
|
|
254 |
|
if(procMappingArray[i] == myRank){ |
255 |
|
tempX[i] -= hi[i]; |
262 |
|
} |
263 |
|
|
264 |
|
fij = calcF(tempX); |
265 |
< |
H(i,j) = ((f - fi[i]) + (fij - fi[j])) / (hi[i]*hi[j]); |
265 |
> |
H(i,j) = ((fx - fi[i]) + (fij - fi[j])) / (hi[i]*hi[j]); |
266 |
|
|
267 |
|
if(procMappingArray[j] == myRank){ |
268 |
|
tempX[j] -= hi[j]; |