【求解答案】
当N= 1000个点数,ln2的近似值 0.6790000000
当N=1000000个点数,ln2的近似值 0.6932850000
当N=1000000000个点数,ln2的近似值 0.6931655110
(精确值,ln2=0.693147180559945)
【求解思路】
1、根据下列定积分
可知ln2可以用下式表示
2、上式的积分部分的数值,就是y=arcsinx/x曲线到Ox轴线在x∈[0,1]间的面积,用较大的随机数x(i),计算得到若干个y(i)=arcsinx(i)/x(i)
3、对y(i)进行累加,再除以随机数的总数,再乘以2/π,得到ln2的近似值。即
res_appro = 2/pi*cnt / N_Lis(n) * S
【MATLAB实现代码及运行结果】
clc %清屏
% 离散化
L = 1.0; % 积分长度
fs = 1 / 1e3; % 采样率
x = 0 : fs : L; %创建x从0到1的一系列数值,其公差为1/1000
S = L * (asin(L)/L); % 样本空间面积
% 在区间内撒样本
N_Lis = [1e3,1e6,1e9]; % 样本个数列表
% 求解定积分
syms x1
res_integ = double(2/pi*int(asin(x1)/x1,0,1)); % 解析解
for n = 1 : length(N_Lis) %分别对 N_Lis = [1e3,1e6,1e9]进行循环计算
cnt = 0; %计数
x_random = L * rand(1, N_Lis(n)); % 随机点x
y_random = asin(L)/L * rand(1, N_Lis(n)); % 随机点y
for i = 1 : N_Lis(n)
%当y(i)<=arcsinx(i)/x(i)时,累加随机数值
if y_random(i) <= asin(x_random(i))/x_random(i);
cnt = cnt + 1;
end
end
N=N_Lis(n);
res_appro = 2/pi*cnt / N_Lis(n) * S; % 近似解
fprintf('当N=%5.0f个点数,ln2的近似值 %12.10f\n',N,res_appro);
end
fprintf('ln2的精确值为 %12.10f\n',res_integ);
End
从计算结果来看,随着N足够大,ln2的近似值越接近于其精确值。
【本题知识点】
1、蒙特卡罗法。
蒙特卡罗法也称统计模拟法、统计试验法。是把概率现象作为研究对象的数值模拟方法。是按抽样调查法求取统计值来推定未知特性量的计算方法。
蒙特卡罗法作为一种计算方法,是由美国数学家乌拉姆与美籍匈牙利数学家冯·诺伊曼在20世纪40年代中叶,为研制核武器的需要而首先提出来的。
蒙特卡罗是摩纳哥的著名赌城,该法为表明其随机抽样的本质而命名,故适用于对离散系统进行计算仿真试验。在计算仿真中,通过构造一个和系统性能相近似的概率模型,并在数字计算机上进行随机试验,可以模拟系统的随机特性。
蒙特卡洛法是描述装备运用过程中各种随机现象的基本方法,而且它特别适用于一些解析法难以求解甚至不可能求解的问题,因而在装备效能评估中具有重要地位。
2、蒙特卡洛法的基本思想:为了求解问题,首先建立一个概率模型或随机过程,使它的参数或数字特征等于问题的解;然后通过对模型或过程的观察或抽样试验来计算这些参数或数字特征,最后给出所求解的近似值。解的精确度用估计值的标准误差来表示。蒙特卡洛法的主要理论基础是概率统计理论,主要手段是随机抽样、统计试验。
3、用蒙特卡洛法求解实际问题的基本步骤:
1) 根据实际问题的特点,构造简单而又便于实现的概率统计模型,使所求的解恰好是所求问题的概率分布或数学期望;
2) 给出模型中各种不同分布随机变量的抽样方法;
3) 统计处理模拟结果,给出问题解的统计估计值和精度估计值。