算法笔记—随机化算法计算π值和计算定积分
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1、计算n值
问题描述
设有一半径为r的圆及其外切四边形。向该正方形随机地投掷n个点。设落入圆内的点数为k。由于所投入的点在正方形上均匀分布,因
而所投入的点落入圆内的概率为。所以当n足够大时,
4jt
/T址---
k与n之比就逼近这一概率。从而。
程序具体代码如下:
[cpp] view pla in copy
1. //随机化算法用随机投点法计算n值
2. #include "stdafx.h"
3. #include "RandomNumber.h"
4. #include
5. using namespace std;
6.
6. double Darts( int n);
8.
9. int main()
10. {
11. int n1 = 100,n2 = 1000,n3 = 1000,n4 = 10000,n5 =
12. coutvv "n1=" < 13. coutvv "n2=" v 14. coutvv "n3=" vvn3vv", n 3='vvDarts(n3)vvendl; 15. coutvv "n4=" vvn4vv", n 4='vvDarts(n4)vvendl; 10000000; (a) 16. coutvv "n5=" vvn5 17. return 0; 18. } 19. 20. //用随机投点法计算 n 值 21. double Darts( int n) 22. { 23. static RandomNumber dart; 24. int k = 0; 25. 26. for ( int i=1; iv=n; i++) 27. { 28. double x = dart.fRandom(); 29. double y = dart.fRandom(); 30. if ((x*x + y*y)v=1) 31. { 32. k++; 33. } 34. } 35. 36. return 4*k/ double (n); 37. } 程序运行结果如图: n1_=10U J _ n 1=2 . Q □2=1000,712=3.14 03=1000>7^3=3.128 n4=10O00,X4=3-l€08 n& =18000000v TTS=3.14B7& 请按任意镇继缰.・・・ 2、计算定积分 1)随机投点法计算定积分 例:设 f(x)=x A 2,求 解: Jz fxXfc=、■s z (fc 叶 空 基本思想是在矩形区域上随机均匀的投点实现。本算法的基本思想是在积分区间上随机均匀的产生点,即在[a,b]上随机均匀的取点,求出由这些点产生的函数值的算术平均值,再乘以区间宽度,即可解出定积分得近似解Qk)dXr=(T> 3>—X 尊修玉玛W:tl) 算法具体代码如下: [cpp] view pla in copy 1. //随机化算法用随机投点法计算定积分 2. #include "stdafx.h" 3. #include "RandomNumber.h" 4. #include 5. using namespace std; 6. 7. 8. 9 double Darts( int n, double a, double b); double f( double x); 10. int main() 11. { 12. int n1 =100,n2 = 1000,n3 = 1000,n4 = 10000,n5 = 10000000; 13. double a = 2.0,b = 3.0; 14. cout<< "n1=" < 15. cout<< "n2=" < 16. cout<< "n3=" < 17. cout<< "n4=" vvn4 18. cout<< "n5=" vvn5 19. return 0; 20. } 21. 22. /* 23. *基本思想是在矩形区域内随机均匀投点,求岀由这些点 24. *产生的函数值的算术平均值,再乘以区间宽度,即可得 25. *出定积分的近似解 26. */ 27. double Darts( int n, double a, double b) 28. { 29. static RandomNumber dart; 30. double sum = 0.0; 31. for ( int i=0; i 32. { 33. double x = (b-a)*dart.fRandom() + a; // 产生[a,b) 之间的随机数 34. sum = sum + f(x); 35. } 36. return (b-a)*sum/n; 37. } 38. 38. double f( double x) 39. { 40. return x*x; 41. } 程序运行结果如图: 2)概率法法计算定积分 设f:[a,b] ~[c连续函数(如图2所示),则由曲线y=f(x)以及x轴和 直线x=a,x=b围成的面积由定积分巴严烬给出。根据几何概型可知Lu—事件区塩人的画积 心尸飞无聞HL。假设向矩形区域随机均匀的投镖n次,落入阴影为K次,又设M为x=a、x=b、y=c、y=d所围成的矩形面积,s为定积 分面积,则M「,所以s= k/n WI。