Advertisement
Guest User

Untitled

a guest
Nov 28th, 2015
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.50 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <iomanip>
  4.  
  5. #include <vector>
  6.  
  7. #include <cmath>
  8.  
  9. using namespace std;
  10.  
  11. double sqr(double n) {
  12.     return n * n;
  13. }
  14.  
  15. double mean(vector <double> vec) {
  16.     double sum = 0;
  17.  
  18.     for (size_t i = 0; i < vec.size(); i++) {
  19.         sum += vec[i];
  20.     }
  21.  
  22.     return sum / vec.size();
  23. }
  24.  
  25. double variance(vector <double> vec) {
  26.     double m = mean(vec);
  27.     double sumsqr = 0;
  28.  
  29.     for (size_t i = 0; i < vec.size(); i++) {
  30.         sumsqr += sqr(vec[i]);
  31.     }
  32.  
  33.     return sumsqr / vec.size() + sqr(m);
  34. }
  35.  
  36. double RMS(vector <double> vec) {
  37.     return sqrt(variance(vec) + sqr(mean(vec)));
  38. }
  39.  
  40. double read_vector(vector <double>& vec, char* filename) {
  41.     ifstream input(filename);
  42.     vec.clear();
  43.     double x;
  44.  
  45.     while (input >> x) {
  46.         vec.push_back(x);
  47.     }
  48. }
  49.  
  50. int main(int argc, char **argv) {
  51.     if (argc != 3) {
  52.         cout << "Usage: rms <estimator error filename> <true error filename>" << endl;
  53.         return 1;
  54.     }
  55.  
  56.     vector <double> estim_error, true_error;
  57.     read_vector(estim_error, argv[1]);
  58.     read_vector(true_error, argv[2]);
  59.  
  60.     if (estim_error.empty() || true_error.empty()) {
  61.         cout << "Files should be non-empty!" << endl;
  62.         return 1;
  63.     }
  64.  
  65.     if (estim_error.size() != true_error.size()) {
  66.         cout << "Amount of numbers in files must be the same!" << endl;
  67.         return 1;
  68.     }
  69.  
  70.     vector <double> diff(estim_error.size());
  71.     for (size_t i = 0; i < diff.size(); i++) {
  72.         diff[i] = estim_error[i] - true_error[i];
  73.     }
  74.  
  75.     cout << setprecision(6) << fixed;
  76.     cout << RMS(diff);
  77.    
  78.     return 0;
  79. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement