1 #include <utl/NumericalErrorPropagator.h>
2 #include <utl/CovarianceMatrix.h>
11 NumericalErrorPropagator::operator()(vector<double>& oVec,
13 const vector<double>& iVec,
18 const unsigned int nInput = iVec.size();
22 const unsigned int nOutput = oVec.size();
24 double jacobi[nOutput][nInput];
26 vector<double> xp(iVec), xm(iVec);
27 vector<double> fp(nOutput), fm(nOutput);
29 if (quality == eFaster)
31 for (
unsigned inp = 0; inp < nInput; ++inp) {
35 xp [inp-1] = iVec[inp-1];
36 xm [inp-1] = iVec[inp-1];
41 const double dx = 0.1*iCov.Std(inp);
49 for (
unsigned out = 0;
out < nOutput; ++
out)
50 jacobi[
out][inp] = ( fp[
out] - fm[
out] ) / (2*dx);
54 for (
unsigned out = 0;
out < nOutput; ++
out)
55 jacobi[
out][inp] = 0.0;
61 vector<double> xpp(iVec), xmm(iVec);
62 vector<double> fpp(nOutput), fmm(nOutput);
64 for (
unsigned inp = 0; inp < nInput; ++inp) {
68 xpp[inp-1] = iVec[inp-1];
69 xp [inp-1] = iVec[inp-1];
70 xm [inp-1] = iVec[inp-1];
71 xmm[inp-1] = iVec[inp-1];
76 const double dx = 0.1*iCov.Std(inp);
88 for (
unsigned out = 0;
out < nOutput; ++
out)
89 jacobi[
out][inp] = ( -fpp[
out] + 8*fp[
out] - 8*fm[
out] + fmm[
out] ) / (12*dx);
93 for (
unsigned out = 0;
out < nOutput; ++
out)
94 jacobi[
out][inp] = 0.0;
101 for (
unsigned int i=0;i<nOutput;++i)
102 for (
unsigned int j=0;j<nOutput;++j)
105 for (
unsigned int k=0;k<nInput;++k)
106 for (
unsigned int l=0;l<nInput;++l)
107 oCov(i,j) += jacobi[i][k] * jacobi[j][l] * iCov(k,l);
vector< t2list > out
output of the algorithm: a list of clusters
void SetExtent(const unsigned int n)