tmain.cpp - numeric - C++ library with numerical algorithms
(HTM) git clone git://src.adamsgaard.dk/numeric
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) LICENSE
---
tmain.cpp (1845B)
---
1 #include <iostream>
2 #include <armadillo>
3 #include <functional>
4 #include "header.h"
5 #include "functions.h"
6 #include "downhill_simplex.h"
7 using namespace arma;
8 using namespace std;
9
10 int main(int argc, char* argv[])
11 {
12 // Namespace declarations
13 using std::cout;
14
15 // Calculate machine precision
16 double eps = 1.0f;
17 while (1.0f + eps != 1.0f)
18 eps /= 2.0f;
19
20 cout << "\n\033[1;36m## Minimization with downhill-simplex, part A ##\033[0m\n";
21
22 // Try amoeba on Rosenbrock's valley function
23 cout << "\n\033[1;33m--- Rosenbrock's valley function ---\033[0m\n";
24 int d = 2;
25 vec p(2); p[0]=5; p[1]=6;
26 p.print("Initial simplex is chosen around the point:");
27 vector<vec> simplex;
28 for(int i=0; i<d+1; ++i)
29 simplex.push_back(p);
30 double dx = 1;
31 for(int i=0; i<d; ++i)
32 simplex[i][i] += dx;
33 amoeba A(rosenbrock, simplex);
34 ncalls = 0;
35 A.downhill(10.0f*eps);
36 A.low().print("Lowest point:");
37 cout << "Amoeba converged after " << ncalls << " calls\n"
38 << "(Newton's root-finding method did this in 4181 calls)\n";
39
40 // Try amoeba on Himmelblau's function
41 cout << "\n\033[1;33m--- Himmelblau's function ---\033[0m\n";
42 vec p2(2); p2[0]=5; p2[1]=6;
43 p2.print("Initial simplex is chosen around the point:");
44 vector<vec> simplex2;
45 for(int i=0; i<d+1; ++i)
46 simplex2.push_back(p2);
47 double dx2 = 1;
48 for(int i=0; i<d; ++i)
49 simplex2[i][i] += dx2;
50 amoeba A2(himmelblau, simplex2);
51 ncalls = 0;
52 A2.downhill(10.0f*eps);
53 A2.low().print("Lowest point:");
54 cout << "Amoeba converged after " << ncalls << " calls\n"
55 << "(Newton's root-finding method did this in 33 calls)\n";
56
57 // Return successfully
58 return 0;
59 }
60
61 void check(const bool statement)
62 {
63 using std::cout;
64 if (statement == true)
65 cout << "\t\033[0;32mPassed\033[0m\n";
66 else
67 cout << "\t\033[1;31mFail!!\033[0m\n";
68 }