testmisfit.cpp
Go to the documentation of this file.00001 #include "CTestMisfit.h"
00002 #include "CVariableMetric.h"
00003 #include "CSimpleLineSearch.h"
00004 #include <iostream>
00005 #include <vector>
00006 #include <fstream>
00007
00008 using namespace std;
00009 namespace ublas = boost::numeric::ublas;
00010 int main()
00011 {
00012 const int ndata = 1;
00013 const int nmodel = 2;
00014 const int maxit = 100;
00015
00016 ofstream ModelFile("models.out");
00017 CTestMisfit MyMisfit;
00018 CSimpleLineSearch LineSearch;
00019 CVariableMetric Minimizer(ndata,nmodel);
00020 ublas::vector<double> StartData(ndata);
00021 ublas::vector<double> StartModel(nmodel);
00022 cout << "Start X: ";
00023 cin >> StartModel(0);
00024 cout << "Start Y: ";
00025 cin >> StartModel(1);
00026 ublas::matrix<double> DataCov(ndata,ndata);
00027 ublas::matrix<double> ModelCov(nmodel,nmodel);
00028 DataCov(0,0) = 1;
00029 ModelCov(1,1) = 1;
00030 ModelCov(0,0) = 1;
00031 Minimizer.InputData = StartData;
00032 Minimizer.StartModel = StartModel;
00033 Minimizer.MisfitCalculator = &(MyMisfit);
00034 LineSearch.MisfitCalculator = &(MyMisfit);
00035 Minimizer.LineSearch = &LineSearch;
00036
00037 Minimizer.DataCovar.assign(DataCov);
00038 Minimizer.ModelCovar.assign(ModelCov);
00039 Minimizer.Prepare();
00040 for (int j = 0; j < Minimizer.CurrentModel.size(); ++j)
00041 ModelFile << Minimizer.CurrentModel(j) << " ";
00042 ModelFile << endl;
00043 try
00044 {
00045 for (int i = 0; i < maxit; ++i)
00046 {
00047 Minimizer.DoIteration();
00048 for (int j = 0; j < Minimizer.CurrentModel.size(); ++j)
00049 ModelFile << Minimizer.CurrentModel(j) << " ";
00050 ModelFile << endl;
00051 }
00052 }
00053 catch (const exception& e)
00054 {
00055 cerr << "Code has converged !" << endl;
00056 cerr << e.what() << endl;
00057 for (int j = 0; j < Minimizer.CurrentModel.size(); ++j)
00058 ModelFile << Minimizer.CurrentModel(j) << " ";
00059 ModelFile << endl;
00060 }
00061
00062 }