題目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|接受)即是生成隨機變量的質量函數