rand(‘state‘, sum(clock))

首先要知道一点计算机生成的随机数都是伪随机数,当然malab也不例外
而这些伪随机数是怎样生成的呢?大多是用同余来生成比如x_n+1=(25173*x_n+13849) (mod 65536),而这些伪随机数都需要一个初值x_0,这样才能迭代这个x_0就是此处的’state’参数,所以rand(‘state’,sum(clock))的作用是定义一个随时间变化的初值x_0。clock返回一个6个元素的向量分辨是年月日时分秒,sum(clock),sum加起来就作为随机数的状态,因为你每次运行程序的时间不同,所以得到的随机数序列就不同

1.设置初始状态

rand('seed', S)
rand('state', S)
rand('twister', S)

seed表示采用v4版本的随机数产生器,state是v5版本的随机数产生器,最后的twister用的则是Mersenne Twister随机数产生器

2.更新

2012及以后的版本默认采用Mersenne Twister随机数产生器rng(S)函数表示设定初始状态,rng(‘shuffle’) 表示随机分配一个初始状态

 
>> rng(1);
>> rand(3,1)

ans =

    0.4170
    0.7203
    0.0001

>> rand(3,1)

ans =

    0.3023
    0.1468
    0.0923

>> rng(1)
>> rand(3,1)

ans =

    0.4170
    0.7203
    0.0001
共有七个完整算法 % 1.基于聚类的RBF 网设计算法 % 一维输入,一维输出,逼近效果很好! SamNum = 100; % 总样本数 TestSamNum = 101; % 测试样本数 InDim = 1; % 样本输入维数 ClusterNum = 10; % 隐节点数,即聚类样本数 Overlap = 1.0; % 隐节点重叠系数 % 根据目标函数获得样本输入输出 rand('state',sum(100*clock)) NoiseVar = 0.1; Noise = NoiseVar*randn(1,SamNum); SamIn = 8*rand(1,SamNum)-4; SamOutNoNoise = 1.1*(1-SamIn+2*SamIn.^2).*exp(-SamIn.^2/2); SamOut = SamOutNoNoise + Noise; TestSamIn = -4:0.08:4; TestSamOut = 1.1*(1-TestSamIn+2*TestSamIn.^2).*exp(-TestSamIn.^2/2); figure hold on grid plot(SamIn,SamOut,'k+') plot(TestSamIn,TestSamOut,'r--') xlabel('Input x'); ylabel('Output y'); Centers = SamIn(:,1:ClusterNum); NumberInClusters = zeros(ClusterNum,1); % 各类中的样本数,初始化为零 IndexInClusters = zeros(ClusterNum,SamNum); % 各类所含样本的索引号 while 1, NumberInClusters = zeros(ClusterNum,1); % 各类中的样本数,初始化为零 IndexInClusters = zeros(ClusterNum,SamNum); % 各类所含样本的索引号 % 按最小距离原则对所有样本进行分类 for i = 1:SamNum AllDistance = dist(Centers',SamIn(:,i)); [MinDist,Pos] = min(AllDistance); NumberInClusters(Pos) = NumberInClusters(Pos) + 1; IndexInClusters(Pos,NumberInClusters(Pos)) = i; end % 保存旧的聚类中心 OldCenters = Centers; for i = 1:ClusterNum Index = IndexInClusters(i,1:NumberInClusters(i)); Centers(:,i) = mean(SamIn(:,Index)')'; end % 判断新旧聚类中心是否一致,是则结束聚类 EqualNum = sum(sum(Centers==OldCenters)); if EqualNum == InDim*ClusterNum, break, end end % 计算各隐节点的扩展常数(宽度) AllDistances = dist(Centers',Centers); % 计算隐节点数据中心间的距离(矩阵) Maximum = max(max(AllDistances)); % 找出其中最大的一个距离 for i = 1:ClusterNum % 将对角线上的0 替换为较大的值 AllDistances(i,i) = Maximum+1; end Spreads = Overlap*min(AllDistances)'; % 以隐节点间的最小距离作为扩展常数 % 计算各隐节点的输出权值 Distance = dist(Centers',SamIn); % 计算各样本输入离各数据中心的距离 SpreadsMat = repmat(Spreads,1,SamNum); HiddenUnitOut = radbas(Distance./SpreadsMat); % 计算隐节点输出阵 HiddenUnitOutEx = [HiddenUnitOut' ones(SamNum,1)]'; % 考虑偏移 W2Ex = SamOut*pinv(HiddenUnitOutEx); % 求广义输出权值 W2 = W2Ex(:,1:ClusterNum); % 输出权值 B2 = W2Ex(:,ClusterNum+1); % 偏移 % 测试 TestDistance = dist(Centers',TestSamIn); TestSpreadsMat = repmat(Spreads,1,TestSamNum); TestHiddenUnitOut = radbas(TestDistance./TestSpreadsMat); TestNNOut = W2*TestHiddenUnitOut+B2; plot(TestSamIn,TestNNOut,'b-') W2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值