annotate armadillo-2.4.4/examples/example_lsq.cpp @ 36:cc18e9a13fe8
slimline
Fix failure to set hasTimestamp on final part
author |
Chris Cannam |
date |
Wed, 16 May 2012 11:44:39 +0100 |
parents |
8b6102e2a9b0 |
children |
|
rev |
line source |
max@0
|
1 // Tutorial for linear least square fitting
|
max@0
|
2 // Author: Pierre Moulon
|
max@0
|
3 // Date: 8 December 2009
|
max@0
|
4 // Objective:
|
max@0
|
5 // Fit a 2D line with to a set of points
|
max@0
|
6 // Specifically, find a and b in the model y = ax + b
|
max@0
|
7 //
|
max@0
|
8 // Direct application of the example in:
|
max@0
|
9 // http://en.wikipedia.org/wiki/Linear_least_squares#Motivational_example
|
max@0
|
10
|
max@0
|
11
|
max@0
|
12 #include <iostream>
|
max@0
|
13
|
max@0
|
14 #include "armadillo"
|
max@0
|
15
|
max@0
|
16 using namespace arma;
|
max@0
|
17 using namespace std;
|
max@0
|
18
|
max@0
|
19
|
max@0
|
20
|
max@0
|
21 int main(int argc, char** argv)
|
max@0
|
22 {
|
max@0
|
23 // points to which we will fit the line
|
max@0
|
24 mat data = "1 6; 2 5; 3 7; 4 10";
|
max@0
|
25
|
max@0
|
26 cout << "Points used for the estimation:" << endl;
|
max@0
|
27 cout << data << endl;
|
max@0
|
28
|
max@0
|
29 // Build matrices to solve Ax = b problem:
|
max@0
|
30 vec b(data.n_rows);
|
max@0
|
31 mat C(data.n_rows, 2);
|
max@0
|
32
|
max@0
|
33 for(u32 i=0; i<data.n_rows; ++i)
|
max@0
|
34 {
|
max@0
|
35 b(i) = data(i,1);
|
max@0
|
36
|
max@0
|
37 C(i,0) = 1;
|
max@0
|
38 C(i,1) = data(i,0);
|
max@0
|
39 }
|
max@0
|
40
|
max@0
|
41 cout << "b:" << endl;
|
max@0
|
42 cout << b << endl;
|
max@0
|
43
|
max@0
|
44 cout << "Constraint matrix:" << endl;
|
max@0
|
45 cout << C << endl;
|
max@0
|
46
|
max@0
|
47 // Compute least-squares solution:
|
max@0
|
48 vec solution = solve(C,b);
|
max@0
|
49
|
max@0
|
50 // solution should be "3.5; 1.4"
|
max@0
|
51 cout << "solution:" << endl;
|
max@0
|
52 cout << solution << endl;
|
max@0
|
53
|
max@0
|
54
|
max@0
|
55 cout << "Reprojection error:" << endl;
|
max@0
|
56
|
max@0
|
57 for(u32 i=0; i<data.n_rows; ++i)
|
max@0
|
58 {
|
max@0
|
59 cout << " residual: " << ( data(i,1) - (solution(0) + solution(1) * data(i,0)) ) << endl;
|
max@0
|
60 }
|
max@0
|
61
|
max@0
|
62 return 0;
|
max@0
|
63 }
|
max@0
|
64
|