matlab编写随机数程序,自己编写产生随机数函数--MATLAB实现

这学期选了《现代数字信号处理》这门课,全是信号的东东,本科完全没有接触过这个东东,听起来有点费劲,作业还是用matlab做,第一个作业就用到了随机数,本来matlab有自己带的产生随机数的函数,但是老师说要自己写一个函数,好吧,还是自己写一个吧:

各种上网找资料,首先找到了一个用汇编写的,比较牛,链接贴出来:

http://www.luocong.com/articles/show_article.asp?Article_ID=24

Matlab产生均匀分布的随机数:

一般我们用计算机产生的随机数都不是真正的随机数,称作伪随机数,但是计算方法合理的话,产生的伪随机数接近于真正的随机数,满足一般的需求。

均匀分布的随机数是其他随机数的基础,最长用的产生均匀分布随机数的方法是采用除留余数法。

模型如下:

y[n+1] = (y[n]*m+c) mod M;

这里的mod表示取余数,通俗的解释,就是用前一个随机数y[n]乘上一个权值w,加上一个增量c,对M取余数。

c和M都是非负的。

Matlab代码:

Matlab 产生正态(高斯)分布的随机数:

原理没太懂,直接写代码:

%产生一个N(0,1)正态分布随机数

%采用筛选法,精度较高

%其他方法可参阅《现代应用数学手册--概率统计与随机过程卷》清华大学出版社马振华主编

%function y=riddling()

function y=m_gauss()

sign=0;

while 1

x=rand(1,2);%产生两个[0,1]间均匀分布的随机数

v1=2*x(1)-1;v2=2*x(2)-1;

s=v1^2+v2^2;

if s<=1

a=sqrt(-2*log(s)/s);

y=v1*a;

sign=1;

end

if sign==1

break;

end

end

%产生n个N(a,b)正态分布随机数

%其中a为均值,b为方差

%function x=normal(a,b,n)

function x=normal(a,b,n)

m=48;%m应尽量大,m取12时近似程度已较好

for i=1:n

r=rand(1,m);

x(i)=a+sqrt(b)*(sum(r)-m/2)/sqrt(m/12);

end参考:

http://bbs.sjtu.edu.cn/bbstcon,board,MathTools,reid,1071206851.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值