25 #include "libmesh/statistics.h" 
   26 #include "libmesh/int_range.h" 
   27 #include "libmesh/libmesh_logging.h" 
   40   const dof_id_type n = cast_int<dof_id_type>(this->size());
 
   42     normsq += ((*
this)[i] * (*
this)[i]);
 
   51   LOG_SCOPE (
"minimum()", 
"StatisticsVector");
 
   53   const T min = *(std::min_element(this->begin(), this->
end()));
 
   64   LOG_SCOPE (
"maximum()", 
"StatisticsVector");
 
   66   const T max = *(std::max_element(this->begin(), this->
end()));
 
   77   LOG_SCOPE (
"mean()", 
"StatisticsVector");
 
   79   const dof_id_type n = cast_int<dof_id_type>(this->size());
 
   85       the_mean += ( static_cast<Real>((*
this)[i]) - the_mean ) /
 
   86         static_cast<Real>(i + 1);
 
   98   const dof_id_type n = cast_int<dof_id_type>(this->size());
 
  103   LOG_SCOPE (
"median()", 
"StatisticsVector");
 
  105   std::sort(this->begin(), this->
end());
 
  115       the_median = static_cast<Real>((*
this)[lhs]);
 
  120       the_median = ( static_cast<Real>((*
this)[lhs]) +
 
  121                      static_cast<Real>((*
this)[rhs]) ) / 2.0;
 
  130 template <
typename T>
 
  141 template <
typename T>
 
  144   const dof_id_type n = cast_int<dof_id_type>(this->size());
 
  146   LOG_SCOPE (
"variance()", 
"StatisticsVector");
 
  148   Real the_variance = 0;
 
  152       const Real delta = ( static_cast<Real>((*
this)[i]) - mean_in );
 
  153       the_variance += (delta * delta - the_variance) /
 
  154         static_cast<Real>(i + 1);
 
  158     the_variance *= static_cast<Real>(n) / static_cast<Real>(n - 1);
 
  164 template <
typename T>
 
  167   const dof_id_type n = cast_int<dof_id_type>(this->size());
 
  168   const Real max = this->maximum();
 
  171     (*
this)[i] = static_cast<T>((*
this)[i] / max);
 
  178 template <
typename T>
 
  185   const dof_id_type n = cast_int<dof_id_type>(this->size());
 
  187   std::sort(this->begin(), this->
end());
 
  191   Real min      = static_cast<Real>(this->minimum());
 
  192   Real max      = static_cast<Real>(this->maximum());
 
  193   Real bin_size = (max - min) / static_cast<Real>(n_bins);
 
  195   LOG_SCOPE (
"histogram()", 
"StatisticsVector");
 
  197   std::vector<Real> bin_bounds(n_bins+1);
 
  199     bin_bounds[i] = min + 
Real(i) * bin_size;
 
  204   bin_bounds.back() += 1.e-6 * bin_size;
 
  207   bin_members.resize(n_bins);
 
  217           Real current_val = static_cast<Real>( (*
this)[i] );
 
  222           if (current_val < min)
 
  231           if (current_val > bin_bounds[j+1]) 
 
  251   const dof_id_type n_binned = std::accumulate(bin_members.begin(),
 
  253                                                static_cast<dof_id_type>(0),
 
  254                                                std::plus<dof_id_type>());
 
  258       libMesh::out << 
"Warning: The number of binned entries, n_binned=" 
  260                    << 
", did not match the total number of entries, n=" 
  261                    << n << 
"." << std::endl;
 
  270 template <
typename T>
 
  272                                          const std::string & filename,
 
  276   std::vector<dof_id_type> bin_members;
 
  277   this->histogram(bin_members, n_bins);
 
  280   T min      = this->minimum();
 
  281   T max      = this->maximum();
 
  282   T bin_size = (max - min) / static_cast<T>(n_bins);
 
  287       std::ofstream out_stream (filename.c_str());
 
  289       out_stream << 
"clear all\n";
 
  290       out_stream << 
"clf\n";
 
  297           out_stream << min + (
Real(i)+0.5)*bin_size << 
" ";
 
  299       out_stream << 
"];\n";
 
  302       for (
auto bmi : bin_members)
 
  304           out_stream << bmi << 
" ";
 
  306       out_stream << 
"];\n";
 
  307       out_stream << 
"bar(x,y);\n";
 
  313 template <
typename T>
 
  315                                     unsigned int n_bins)
 const 
  319   return sv.
histogram(bin_members, n_bins);
 
  325 template <
typename T>
 
  328   LOG_SCOPE (
"cut_below()", 
"StatisticsVector");
 
  330   const dof_id_type n = cast_int<dof_id_type>(this->size());
 
  332   std::vector<dof_id_type> cut_indices;
 
  333   cut_indices.reserve(n/2);  
 
  337       if ((*
this)[i] < cut)
 
  339           cut_indices.push_back(i);
 
  349 template <
typename T>
 
  352   LOG_SCOPE (
"cut_above()", 
"StatisticsVector");
 
  354   const dof_id_type n = cast_int<dof_id_type>(this->size());
 
  356   std::vector<dof_id_type> cut_indices;
 
  357   cut_indices.reserve(n/2);  
 
  360     if ((*
this)[i] > cut)
 
  361       cut_indices.push_back(i);
 
  373 #ifdef LIBMESH_DEFAULT_TRIPLE_PRECISION 
  376 #ifdef LIBMESH_DEFAULT_QUADRUPLE_PRECISION