http://blog.163.com/symphony_sol/blog/static/30279623200751841822500/ 
两种不同的随机数算法
seed是matlab4的,matlab5及以后用的是state

seed 现在也是有的,
实际上现在用的随机数是伪随机数,由一定的规则产生
比如z_{k+1}=f(z_{k}),z_{k}即为我们得到的随机数,
比如之前得到的随机数是0.5, 再用randn命令得到的随机数是0.6
那么如果下次得到随机数0.5,那么之后的随机数还是0.6
seed是产生这个随机数的种子,也就是初始值z_{0},seed不同,得到的随机数列也不同,
取定了seed之后,随机数列也就确定了,只不过这个数列非常大,看起来就象是随机产生的,
举例:
seed=x1
得到随机数列 y1,....ym
seed=x2
得到随机数列 z1,.....zn
关于state:指定随机数的状态,
我的理解是类似于指定了这个随机数列数组的下标
比如:randn('state',100)
然后产生一个随机数为 r0
然后中间再产生了若干随机数
然后再键入命令randn('state',100)
这时再产生的随机数还是r0
http://blog.sina.com.cn/s/blog_6c00b0e30100rmyy.html 
(2)RANDN产生伪随机数的语法:
发生器的状态决定所产生数的序号。
S = RANDN('state') 是一个二元向量,包括标准发生器的状态;
RANDN('state',S):设置发生器的状态为S(即标准状态);
RANDN('state',0):设置发生器的初始状态;
RANDN('state',J):J为整数,设置发生器到J阶状态;

(3)MATlAB 4.X应用一个单独的种子来产生随机数:
RANDN('seed',0) and RANDN('seed',J)作用与RANDN('state',0)和RANDN('state',J)一样,但使用Matlab 4.x随机数发生器。
RANDN('seed'):返回MATlAB 4.X发生器的当前种子。


以上部分是转自其他网友的分析。
下面是我对这randn或rand的理解。

例如:randn('state',0);,表明选定了一个初状态,再定义随机数列x=randn(1,100),x的值会确定下来,不会每运行一次而产生不同的随机数。
例如: "E:\other\matlab 2007a\work\function\rand_"

a1 =2     3     1
b1 =     4     1     3     2
c1 =   1     3     4     5     2
重新运行还是这个结果

do_exp_MNIST_SSH_BRE_ITQ中半监督hashingSSH 重新跑一次,除了Training timeTest Time还是这个结果,因为有rand('seed',0);
rand('seed',0)
randn('state',0): do_exp_MNIST_SSH_BRE_ITQ中CCA-ITQ加randn('state',0)重新跑一次,除了Training timeTest Time还是这个结果rand('state',0)不行,因为ITQ函数中用的randn不是rand
20160120谷歌搜索:randperm seed,找一个连接https://www.mathworks.com/matlabcentral/newsreader/view_thread/171653,有如下语句:If we initialize rand with some seed (say
rand('seed',1)) then the result of randperm(n) is always same after the initialization.
经过如下语句测试,没有任何问题:
rand('seed',1);
a = randperm(10);
i=2;
rand('seed',i);
b = randperm(20);
rand('seed',1);
c = randperm(10);
i=2;
rand('seed',i);
d = randperm(20);
sum(a==c)
sum(b==d)