前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >计算机模拟定积分的定义

计算机模拟定积分的定义

作者头像
fem178
发布2020-07-09 11:14:28
7240
发布2020-07-09 11:14:28
举报

黎曼(Riemann)对定积分的定义是:积分区间划分为无数子区间,子区间内任意一点的函数值乘以子区间的长度得到一个矩形面积,然后将这些矩形面积累加起来可以得到积分值。

计算π的值

定积分的精确定义

对于定积分

I= \int_0^1 \frac{4}{1+x^2} dx

,在[0,1]内随机取一个数r,通过

\frac{4}{1+r^2} dx

转换成矩形的高。再乘以矩形的宽度1,就是一个矩形的面积。

经过多达1000000000次的重复计算,并把这些面积相加,再除以重复计算的次数,得到的值应该是一个接近PI的实数。且计算的次数越多,误差就越小。以下是C++代码


#include <iostream>
#include <iomanip>
#include <random>
#include <cmath>

const size_t n{ 1000000000 };
int main()
{
    std::random_device rd;
    std::default_random_engine rng{ rd() };

    std::uniform_real_distribution< > values{ 0.0, 1.0 };
    //生成随机数种子
    double sum{};

    for (auto counter{ 1 }; counter <= n; ++counter)
    {
        sum += (4 / (1 + pow(values(rng), 2)) );

    }

    std::cout << "the value of PI is:" << 
        std::fixed << std::setprecision(8) << sum / n << std::endl;

    system(" pause ");
    return 0;                                                                                
}

运行结果为

对于uniform_real_distribution是半开范围[ )。也是就是说上面的例子中,能产生0.0,但不会产生1.0。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-07-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数值分析与有限元编程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档