加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

蒙特卡洛C标准差的通用函数

发布时间:2020-12-16 05:02:19 所属栏目:百科 来源:网络整理
导读:我应该在一些蒙特卡罗模拟中计算标准偏差函数.公式是这样的: 我认为我的结果与他们的结果相去甚远.我的函数使用boost库中的元组,它看起来像这样: double add_square(double prev_sum,double new_val){ return prev_sum + new_val*new_val;}template typena
我应该在一些蒙特卡罗模拟中计算标准偏差函数.公式是这样的:

我认为我的结果与他们的结果相去甚远.我的函数使用boost库中的元组,它看起来像这样:

double add_square(double prev_sum,double new_val)
{
  return prev_sum + new_val*new_val;
}

template <typename V>
double vec_add_squares(const V<double>& v)
{
  return std::accumulate(v.begin(),v.end(),0.0,add_square);
}

    template <class T> 
    boost::tuple<double,double> get_std_dev_and_error(const vector<T>& input,double r,double N)
{
 double M = double(input.size());

 double sum = std::accumulate(input.begin(),input.end(),0.0);
 double Squared_sum = vec_add_squares(input);

 std::cout << "sum " << Squared_sum << endl;

 // Calls Sum
 double term1 = Squared_sum - (sum/M)*sum;

 double SD = (sqrt(term1) * exp(-2.0 * r *N))/(M-1) ;
 double SE = SD/sqrt(M);
 std::cout << "SD = " << SD << endl;
 std::cout << "SE = " << SE << endl;

 return boost::tuple<double,double>(SD,SE) ;
 }

>谁能在这里看到任何错误?
>此外,STL库中还有“累积”功能 – 是否存在累积平方(容器成员)?

解决方法

只需使用 Boost.Accumulators(因为你已经使用了boost):
#include <boost/accumulators/accumulators.hpp>
#include <boost/accumulators/statistics.hpp>
#include <boost/range/algorithm.hpp>
#include <iostream>
#include <ostream>

using namespace boost;
using namespace boost::accumulators;
using namespace std;

int main()
{
    accumulator_set<double,stats<tag::sum,tag::variance,tag::mean > > acc;
    double data[] = {1.,2.,3.};
    acc = for_each(data,acc);
    cout << "sum = " << sum(acc) << endl;
    cout << "variance = " << variance(acc) << endl;
    cout << "sqrt(variance()) = " << sqrt(variance(acc)) << endl;
    cout << "mean = " << mean(acc) << endl;
}

输出是:

sum = 6
variance = 0.666667
sqrt(variance()) = 0.816497
mean = 2

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读