实验十二 计算机随即模拟与基因遗传问题
[实验目的]
学会用计算机模拟方法来解决随即性问题;
用计算机模拟方法研究基因遗传问题,
§1 背景介绍
计算机模拟就是用计算机来模仿真实系统运行,对其进行分析、计算,了解系统的各种特性,从而进行判断与决策。
计算机模拟具有直观性强、简便易行的特点。对于那些具有随机性的问题,由于变量见错综复杂的内外联系,使问题很难用适当的数学形式来表达。此时计算机模拟困难是获得问题答案的方法。随着计算机技术的不断发展及模拟软件的不断完善,计算机模拟方法在自然科学 、社会科学及管理科学中越来越受到重视。在本实验中,主要是对随机现象进行模拟。 遗传问题是生物学的一个重要课题。遗传问题之所以重要,主有以下三个方面的原因。第一,遗传学描述了生物进化的基本机制,如有害昆虫种群回逐渐地对杀虫剂产生抗体,使药剂的效力降低。第二,物种数量遗传原理的应用具有特殊的重要性,在改进农作物和畜牧育种方面有许多成功的例子。第三,在人类这一有不同种族构成的群体中,遗传学知识可指导人们去认识遗传疾病,提高人口素质,在本实验中,将重点研究基金遗传方面的一些随机性问题。
§2 实验内容与练习
2.1 随机数的产生
要进行随机模拟,一个重要的过程就是产生随机数。用 Mathematica软件可以很方便的产生随机数。我们已经介绍了产生均匀随机数的命令,下面介绍如何用 Mathmatica软件产生非均匀分布随机数。
连续分布随机数的产生
给定了一个连续分布随机变量以后,可以通过程序给出这个随即变量的随即数,这些程序一般比较复杂。在 Mathematica中,常用的连续分布函数已经写入程序中,可以直接调用。在本实验§3中,介绍了Mathematica中常用的连续分布函数。
用Mathematica 软件产生连续分布随机数,必须先调用连续分布的程序库,起命令为:
《 Statistics`ContinuousDistribution`
调用此程序库后,就可以产生常见的各种连续分布的随即数,例如
Random[NormalDistribution[0,1]]
给出一个标准正态分布随机数。
下面的程序给出一个正态分布随机数的集合;
<
A={};
Do[A=Append[A,Random[NormalDistrbution[0,1]]],{I,1,4}];
A
运行该程序得
{-1。74821, -0。646468 0。689262 -0。945783}
注意,在不同的时间之下运行该程序得到的结果一般不一样,对于其他产生随即数的命令也有类似的问题。
练习1 用Mathematica的程序库产生T分布G(3.2,2)的100个随即数(命令参考§3)。
离散分布随即数的产生
在Mathematica 中产生离散分布的随即数可以用两中方法 。
方法一 由于离散分布在形式上比较简单,可以直接编写程序产生随即数。
如果知道离散随即变量ξ的概率分布:P{ξ=xk}=pk(k=1,2,…),产生随即变量ξ的随即数时可简单的按如下算法:
(1)将区间[0,1]依次分为长度为P1,P2,……的小区间,I1,I2 ……
(2)产生[0,1]的均匀分布随数R,若R∈Ik,则令X∈X K,
重复(2)即得离散随即变量ε的随即数序列。
下面介绍一个用方法一产生离散分布随即数的例子。
表12。1 给出了离散分布ε的概率分布表,试产生100个随即数。
表12。1ε的概率分表
XK
1
3
5
7
9
PK
0.5
0.05
0.2
0.05
0.2
解 将[0 1]分为5个区间:
I1 =[0,0.5] I2 =[0.5,0.55] I3 =[0.55,0.75] I4 =[0.75.0.80] I5 =[0.80,1.00]
产生100个U(0,1)随即数ri,若 ri xi ,令εi=xi
上述产生随即数的过程可以用Mathematica软件来实现,程序如下;
Clear[x,p,a,aa,b,k,s];
n=100(*模拟次数*)
Array[s,n](* 数组s 存放产生的随即数*);
Array[a,6](*数组a存放区间的端点*);
Array[b,6](*b[k]表示取值x[[k]]的随即数的个数*);
x={1,3,5,7,9}
p={0.5,0.05,0.2,0.05,0.2}
Do[b[k]]=0,{k,1,5};
A[1]=0
Do[b[k]]=a[k-1]+p[