c_cpp 【随机化算法】计算定积分【7.2.2】

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 【随机化算法】计算定积分【7.2.2】相关的知识,希望对你有一定的参考价值。

//随机化算法 用随机投点法计算定积分
#include "stdafx.h"
#include "RandomNumber.h"
#include <iostream>
using namespace std;
 
double Darts(int n,double a,double b);
double f(double x);
 
int main()
{
	int n1 = 100,n2 = 1000,n3 = 1000,n4 = 10000,n5 = 10000000;
	double a = 2.0,b = 3.0;
	cout<<"n1="<<n1<<",r1="<<Darts(n1,a,b)<<endl;
	cout<<"n2="<<n2<<",r2="<<Darts(n2,a,b)<<endl;
	cout<<"n3="<<n3<<",r3="<<Darts(n3,a,b)<<endl;
	cout<<"n4="<<n4<<",r4="<<Darts(n4,a,b)<<endl;
	cout<<"n5="<<n5<<",r5="<<Darts(n5,a,b)<<endl;
	return 0;
}
 
/*
 * 基本思想是在矩形区域内随机均匀投点,求出由这些点
 * 产生的函数值的算术平均值,再乘以区间宽度,即可得
 * 出定积分的近似解
 */
double Darts(int n,double a,double b)
{
	static RandomNumber dart;
	double sum = 0.0;
	for(int i=0; i<n; i++)
	{
		double x = (b-a)*dart.fRandom() + a;//产生[a,b)之间的随机数
		sum = sum + f(x);
	}
	return (b-a)*sum/n;
}
 
double f(double x)
{
	return x*x;
}

以上是关于c_cpp 【随机化算法】计算定积分【7.2.2】的主要内容,如果未能解决你的问题,请参考以下文章

c_cpp 本本法的基本思想是在积分区间上随机均匀的产生点,即在[a,b]上随机均匀的取点,求出由这些点产生的函数值的算术平均值,再乘以区间宽度,即可解出定积分得近似解。

c_cpp 【随机化算法】随机数【7.1】

c_cpp 【随机化算法】跳跃表【7.3.3】舍伍德(舍伍德)算法

c_cpp 【随机化算法】线性时间选择算法【7.3.1】舍伍德(舍伍德)算法

c_cpp 【随机化算法】素数测试【7.5.3】蒙特卡罗(Monte Carlo)算法

c_cpp 【随机化算法】搜索有序表【7.3.2】舍伍德(舍伍德)算法