发布时间 : 星期二 文章推荐数学建模matlab方法整理更新完毕开始阅读4ba3bd99763231126edb11fb
%将矩阵a按照第3列的降序排列,其他列将跟随着第3列 的变化,保持一一对应。 data = 1 3 2 7 6 5 4 9 8
sortrows(data,1) ans = 1 3 2 4 9 8 7 6 5
sortrows(data,-1) ans = 7 6 5 4 9 8 1 3 2
corrcoef
corrcoef(x,y)表示序列x和序列y的相关系数,得到的结果是一个2*2矩阵,其中对角线上的元素分别表示x和y的自相关,非对角线上的元素分别表示x与y的相关系数和y
与x的相关系数,两个是相等的。
Sim
sim函数用来运行Simulink模型。需要注意的是,用户无法控制其仿真过程(例如暂停、继续),一旦运行就会直到达到结束条件为止——这一点和通过模型窗口界面运行仿真不同。 调用格式:
[t,x,y] = sim(model,timespan,options,ut);
[t,x,y1, y2, ..., yn] = sim(model,timespan,options,ut); 输入参数:
model:模型的名字,用单引号括起来(注意不带扩展名.mdl); timespan:指定仿真时间范围,可以有几种情况:
标量tFinal,指定仿真结束时间。这种情况下开始时间为0; 两个元素的向量[tStart tFinal],同时指定开始时间和结束时间;
向量[tStart OutputTimes tFinal],除起止时间外,还指定输出时间点(通常输出时间t会包含更多点,这里指定的点相当于附加的点)。
options:指定仿真选项,是一个结构体,该结构体通过simset创建,包括模型求解器、误差控制等都可以通过这个参数指定(不修改模型,但使用和模型对话框里设置的不同选择)。 ut:指定外部输入,对应于根模型的Inport模块。
除第一个输入参数外,其他参数都可以用空矩阵([])来表示模型的默认值。 输出参数:
t:仿真时间向量;
x:状态矩阵,每行对应一个时刻的状态,连续状态在前,离散状态在后;
y:输出矩阵,每行对应一个时刻;每列对应根模型的一个Outport 模块(如果Outport模块的输入是向量,则在y中会占用相应的列数)。
y1, y2, ..., yn:把上面的y分开,每个yi对应一个Outport模块。
BP网络
1、BP网络构建 (1)生成BP网络
net ? newff(PR,[S1 S2...SNl],{TF1 TF2...TFNl},BTF,BLF,PF)
PR:由R维的输入样本最小最大值构成的R?2维矩阵。
[S1 S2...SNl]:各层的神经元个数。
{TF1 TF2...TFNl}:各层的神经元传递函数。
BTF:训练用函数的名称。
(2)网络训练
[net,tr,Y,E,Pf,Af] ? train(net,P,T,Pi,Ai,VV,TV)
(3)网络仿真
[Y,Pf,Af,E,perf] ? sim(net,P,Pi,Ai,T)
Vec2ind与ind2vec
vec2ind, “向量变索引”,
假设一个3*6的稀疏矩阵T(1,:)=[0 1 0 0 1 0];T(2,:)=[1 0 1 1 0 0];T(3,:)=[0 0 0 0 0 1],
通过vec2ind(T)将会得到什么?
因为通过矩阵知道T是6列的,
T =
0 1 0 0 1 0 1 0 1 1 0 0 0 0 0 0 0 1
vec2ind(T)得到的是1行6列的向量,该向量对应的元素分别是T中第1列到第6列中数字\对应的行号,因例子中的T矩阵,在第一列中第2行对应的是\则vec2ind(T)的第一个元素是2,同理,T中第二列中“1”在第1行,则vec2ind(T)的第二个元素是\,依次类推,T中第3列至第6列中“1”对应行数分别是“2\。 因此,vec2ind(T)=[2 1 2 2 1 3];
ind2vec则反过来理解即可,如一个索引适量A=[1 3 2 2 2 1 2 1],求ind2vec?
从A可以看出A是1行8列的(如果实在不知道,就用size(A)查看),从A中元素最大值\可以看出,索引对应的向量是3行的,还不理解?那就用最基本的方法,因A中元素对应的是行号,设B=ind2vec(A),意味着B(1,1),B(3,2),B(2,3),B(2,4), B(2,5), B(1,6),B(2,7),B(1,8)
对应的值是\,其余元素均为\即
1 0 0 0 0 1 0 1 B=ind2vec(A)= 0 0 1 1 1 0 1 0 0 1 0 0 0 0 0 0 神经网络中:
a = sim(net,P) 后运行的结果是:a =
(10,1) 1 %表示输入第1个测试样本数据,10号神经元获胜(我用的是hextop建立的竟争层)
(10,2) 1 %表示输入第2个测试样本数据,10号神经元获胜 (9,3) 1 %表示输入第3个测试样本数据,9号神经元获胜 (8,4) 1 %表示输入第4个测试样本数据,8号神经元获胜 (8,5) 1 。。。。。。 (29,6) 1 (40,7) 1 (50,8) 1 (60,9) 1 (60,10) 1
用ac = vec2ind(a) 后可得: ac =
Columns 1 through 10
10 10 9 8 8 29 40 50 60 60
这样可以更清晰地看出来从第一个样本到最后一个样本,分别是那个神经元获胜。