Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <iomanip>
- #include <vector>
- #include <cmath>
- using namespace std;
- double sqr(double n) {
- return n * n;
- }
- double mean(vector <double> vec) {
- double sum = 0;
- for (size_t i = 0; i < vec.size(); i++) {
- sum += vec[i];
- }
- return sum / vec.size();
- }
- double variance(vector <double> vec) {
- double m = mean(vec);
- double sumsqr = 0;
- for (size_t i = 0; i < vec.size(); i++) {
- sumsqr += sqr(vec[i]);
- }
- return sumsqr / vec.size() + sqr(m);
- }
- double RMS(vector <double> vec) {
- return sqrt(variance(vec) + sqr(mean(vec)));
- }
- double read_vector(vector <double>& vec, char* filename) {
- ifstream input(filename);
- vec.clear();
- double x;
- while (input >> x) {
- vec.push_back(x);
- }
- }
- int main(int argc, char **argv) {
- if (argc != 3) {
- cout << "Usage: rms <estimator error filename> <true error filename>" << endl;
- return 1;
- }
- vector <double> estim_error, true_error;
- read_vector(estim_error, argv[1]);
- read_vector(true_error, argv[2]);
- if (estim_error.empty() || true_error.empty()) {
- cout << "Files should be non-empty!" << endl;
- return 1;
- }
- if (estim_error.size() != true_error.size()) {
- cout << "Amount of numbers in files must be the same!" << endl;
- return 1;
- }
- vector <double> diff(estim_error.size());
- for (size_t i = 0; i < diff.size(); i++) {
- diff[i] = estim_error[i] - true_error[i];
- }
- cout << setprecision(6) << fixed;
- cout << RMS(diff);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement