matlab如何编程产生正态分布的随机数的程序?

不能调用函数normrnd(),需要自己通过反函数法或其他方法编程,急求!!谢谢... 不能调用函数normrnd(),需要自己通过反函数法或其他方法编程,急求!!谢谢 展开
 我来答
dbb627
推荐于2017-11-27 · TA获得超过1.2万个赞
知道大有可为答主
回答量:2127
采纳率:88%
帮助的人:1355万
展开全部

可以采用Box_Muller的方法。

Box-Muller方法是以两组独立的随机数U和V,这两组数在(0,1]上均匀分布,用U和V生成两组独立的标准常态分布随机变量X和Y

x=sqrt((-2)*ln(U))*cos(2*pi*V);  

Y=sqrt((-2)*ln(U))*sin(2*pi*V);  


matlab 程序

function Norm_Distribution_Box_Muller
clear all;clc;%清屏 
m=input('请输入平均值:');
n=input('请输入标准差:'); 
t=input('请输入数据长度:'); %产生正态分布的随机数 
for i=1:t    
    a=rand;     
    b=rand;     
    X1(i)=sqrt((-2)*log(a))*cos(2*pi*b);    
    X2(i)=sqrt((-2)*log(a))*sin(2*pi*b);   
    Y1=X1*n+m;    
    Y2=X2*n+m; 
end
disp(Y1); %求平均值和标准差
M1=mean(Y1); N1=std(Y1); disp(M1); disp(N1); disp(Y1); %求平均值和标准差 
M2=mean(Y2); N2=std(Y2); disp(M2); disp(N2);  %将数据写入文本文件  
fid=fopen('xiefei1.dat','w'); Z1=Y1;  fprintf(fid,'%f\t',Z1);
fclose(fid); %将数据写入文本文件 
fid=fopen('xiefei2.dat','w'); Z2=Y2; 
fprintf(fid,'%f\t',Z2); fclose(fid); 
%绘图 
subplot(2,1,1); histfit(Y1);
xlabel('随机数'); ylabel('出现的次数'); 
%绘图
subplot(2,1,2);histfit(Y2);
xlabel('随机数');ylabel('出现的次数');
%检验 
h1=lillietest(Y1);%若结果h1为1,则说明零假设不成立,拒绝零假设;否则,结果为0,零假设成立,即原分布为正态分布
disp(h1);
h2=lillietest(Y2);%若结果h2为1,则说明零假设不成立,拒绝零假设;否则,结果为0,零假设成立,即原分布为正态分布 
disp(h2);
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式