题目36
证明:利用拒绝方法生成的随机变量所必须需要的迭代次数是几何随机变量,并估计出几何频率函数的参数。证明:为了保证较少的迭代次数选择的必须接近出.
解题思路
参考本题中提到的
假设每次迭代生成的数据值能够被接受的概率为,则需要k次迭代生成一个值的概率是:k-1次被拒绝第k次被接受,这是典型的几何分布参数为
几何分布的期望值为,即越大k越小
估计参数:根据书中公式
要让最大则需要越小,根据前提并且M(x)越小则M(x)越接近
题目37
令时 .
a.说明利用拒绝方法由该密度函数生成随机变量的一个算法,采集试验中有多大比例接受所采取的步骤?
b.编写一个计算机程序实现这个算法.
解题思路
a.首先绘制出本函数曲线
经计算在x=-1时函数达到最大值24
选择一个平均分布随机变量
令.设置.这样为最贴近目标函数并且大于目标函数的平均分布
根据全概率公式 ,套用在本题时Y是离散的分别是接受、拒绝.X是连续的在[-1,1]有定义
b.编写一个计算机程序实现这个算法.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace RandomGen
{
class Program
{
static int n = 100000; //生成随机变量的个数
static int i_total = 0; //统计生成的总数
static Random r = new Random();
static void Main(string[] args)
{
int temp = 0;
while (temp < n)
{
Console.WriteLine(GenerateSRD());
temp++;
}
Console.WriteLine("共生成{0}次,成功{1}次", i_total, n);
Console.Read();
}
/// <summary>
/// 生成一个随机变量
/// </summary>
static double GenerateSRD()
{
L1: double u1 = r.Next(-10000, 10000) / 10000.0000;
double u2 = r.NextDouble();
i_total++;
if (u2 < f(u1)/M(u1))
{
return u1;
}
goto L1; //重新执行
}
static double M(double x)
{
return 24;
}
static double f(double x)
{
double rt = 6 * Math.Pow(x, 2) * Math.Pow(1 - x, 2);
return rt;
}
}
经过多次测试,程序接受次数与总生成次数之比为1:7.5即
题目38
令 和 时 .
a.说明利用拒绝方法由该密度函数生成随机变量的一个算法,
b.编写一个计算机程序实现这个算法.
解题思路
a.说明利用拒绝方法由该密度函数生成随机变量的一个算法,
1. 和 区间内求的最大值
当最大值是
当最大值是
找到一个均匀分布函数
再按标准的拒绝方法进行随机变量的生成。
b.编写一个计算机程序实现这个算法.
略,这个代码比上一题代码多一个参数即可
题目39
证明:如下生成离散型随机变量的方法是可行的(D.R.Fredkin).具体地,假设以概率为令是均匀随机变量,如果,返回,,否则,用代替; 如果新生成的小于,返回,否则,从中减去;然后新生成的与比较,等等。
解题思路
这是逆变化法,
设的累计分布函数是,则服务区间(0,1)上的均匀分布。(参见本书中的命题2.3.3)
根据本书中的命题2.3.4 令是[0,1]上的均匀分布,那么的cdf是F
所以根据上述证明,本题方法生成的随机变量的累计分布函数就是
题目40
假定和是离散的随机变量,具有函数概率质量函数证明:如下步骤可以生成随机变量
a.生成.
b.以概率授受.
c.如果接受,迭代终止,返回,否则,重新回到步骤a.
解题思路
根据题意,需要求P(X=x|接受)即是生成随机变量的质量函数