-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathfilter_aux.cpp
More file actions
129 lines (91 loc) · 2.93 KB
/
filter_aux.cpp
File metadata and controls
129 lines (91 loc) · 2.93 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#include "filter_aux.hpp"
#include "eigen_csv.hpp"
using namespace std;
using namespace Eigen;
void save_rmse(
const VectorXd& t,
const vector<vector<VectorXd>>& xtru,
const vector<vector<VectorXd>>& xest,
const string& filename
) {
int steps, trials, nx;
steps = t.size();
trials = xest.size();
nx = xtru.front().front().size();
MatrixXd err(nx, trials), table(steps, nx+1);
table.col(0) = t;
for (int k = 0; k < steps; k++) {
for (int j = 0; j < trials; j++)
err.col(j) = xest[j][k] - xtru[j][k];
table.row(k).tail(nx) = err.array().square().rowwise().mean().sqrt();
}
vector<string> header(nx+1);
header[0] = "TIME";
for (int i = 1; i <= nx; i++) {
header[i] = "RMSE X";
header[i] += to_string(i);
}
EigenCSV::write(table, header, filename);
}
void save_abs_err(
const VectorXd& t,
const vector<vector<VectorXd>>& xtru,
const vector<vector<VectorXd>>& xest,
const string& filename
) {
int steps, trials, nx;
steps = t.size();
trials = xest.size();
nx = xtru.front().front().size();
MatrixXd err(nx, trials), table(steps, 3*nx+1);
VectorXd avg_err(nx), std_err(nx), lb_err(nx), ub_err(nx);
table.col(0) = t;
for (int k = 0; k < steps; k++) {
for (int j = 0; j < trials; j++)
err.col(j) = xest[j][k] - xtru[j][k];
avg_err = err.rowwise().mean();
std_err = (err.colwise() - avg_err).cwiseAbs2().rowwise().mean()
.cwiseSqrt();
ub_err = avg_err + std_err;
lb_err = avg_err - std_err;
table.row(k).segment(1, nx) = avg_err;
table.row(k).segment(1+nx, nx) = lb_err;
table.row(k).segment(1+2*nx, nx) = ub_err;
}
vector<string> header(3*nx+1);
header[0] = "TIME";
for (int i = 1; i <= nx; i++) {
header[i] = "AVG ERR X";
header[i] += to_string(i);
}
for (int i = 1; i <= nx; i++) {
header[nx+i] = "LB ERR X";
header[nx+i] += to_string(i);
}
for (int i = 1; i <= nx; i++) {
header[2*nx+i] = "UB ERR X";
header[2*nx+i] += to_string(i);
}
EigenCSV::write(table, header, filename);
}
void save_abs_err_lump(
const Eigen::VectorXd& t,
const std::vector<std::vector<Eigen::VectorXd>>& xtru,
const std::vector<std::vector<Eigen::VectorXd>>& xest,
const std::string& filename
) {
int steps, trials, nx;
steps = t.size();
trials = xest.size();
nx = xtru.front().front().size();
MatrixXd table(steps*trials, nx);
for (int i = 0; i < trials; i++)
for (int j = 0; j < steps; j++)
table.row(i*steps+j) = (xest[i][j] - xtru[i][j]).cwiseAbs();
vector<string> header(nx);
for (int i = 0; i < nx; i++) {
header[i] = "DX";
header[i] += to_string(i+1);
}
EigenCSV::write(table, header, filename);
}