24小时热门版块排行榜    

CyRhmU.jpeg
查看: 2631  |  回复: 9
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

田山东

捐助贵宾 (著名写手)

[求助] matlab如何生成不同的随机数

程序1.下面这个程序生成的随机数都是相同的
h=zeros(10,10);
t=1;
fid1=fopen('tyh4.dat','a');
for jj=1:4
rand('state',sum(1000000*clock));
x=rand(1,10)-0.5;
%fprintf(fid2,'%f\n',x);
for  j=1:10;
    H(j,j)=x(j)*t;
    fprintf(fid1,'%f\n', H(j,j));
end  
end
把文件打开看下,4次生成的随机数相同。
去掉rand('state',sum(1000000*clock));
h=zeros(10,10);
t=1;
fid1=fopen('tyh4.dat','a');
for jj=1:4
x=rand(1,10)-0.5;
%fprintf(fid2,'%f\n',x);
for  j=1:10;
    H(j,j)=x(j)*t;
    fprintf(fid1,'%f\n', H(j,j));
end  
end
4次循环生成的随机数不同,但是多次运行程序会发现,每次得到的文件内容都是相同的。
目的:每次jj循环得到不同的随机数,每次运行程序得到不同的随机数,怎么能实现呢?
回复此楼
everythinghasitsseason.enjoyyourlife.
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

田山东

捐助贵宾 (著名写手)

引用回帖:
9楼: Originally posted by libralibra at 2012-12-12 20:21:48
整那么复杂干嘛?我用下面的代码run了几次,每次的数也不一样,同一次10次循环得到的也不一样.
for i=1:10
    fprintf(1,'%f\n',rand(1));
end

结果:
>> temp
0.757740
0.743132
0.392227
0.65547 ...

超级郁闷,我用的是2011b,linux下装的是2010b,
for i=1:10
    fprintf(1,'%f\n',rand(1));
end
在2011b下完全是正确的,但是在2010下就悲剧了!!

找个最新版的matlab装下吧。没办法了
everythinghasitsseason.enjoyyourlife.
10楼2012-12-13 16:47:35
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 10 个回答

田山东

捐助贵宾 (著名写手)

送鲜花一朵
这样就可以,大侠解释下吧
h=zeros(10,10);
t=1;
fid1=fopen('tyh66.dat','a');
for jj=1:4
rng('shuffle')
x=rand(1,10)-0.5;
%fprintf(fid2,'%f\n',x);
for  j=1:10;
    H(j,j)=x(j)*t;
    fprintf(fid1,'%f\n', H(j,j));
end  
end
everythinghasitsseason.enjoyyourlife.
2楼2012-12-12 10:14:40
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

田山东

捐助贵宾 (著名写手)

在2011下可以了,我linux下用的是r2010b,为什么有这个提示呢?Undefined function or method 'rng' for input arguments of type 'char'
everythinghasitsseason.enjoyyourlife.
3楼2012-12-12 10:31:22
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

田山东

捐助贵宾 (著名写手)

最后没有办法只能让系统产生一个大的随机数数组,没循环一次调用这个大数组里面的一行或一列,一直调用下去,反正大数组是大的随机数,不会重复。
everythinghasitsseason.enjoyyourlife.
4楼2012-12-12 11:04:50
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
信息提示
请填处理意见