matlab如何编程产生正态分布的随机数的程序?
1个回答
展开全部
可以采用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);
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询