本程序估计只有高手能看懂!谁能挑出错误并改正的?那绝对是高手中的高手!挑战一下吧!!
本程序要求使用学习矢量量化网络,要求给样本分类,每类用不同的线条画出。谁能改进这个算法给出一个更好的算法的?
    close all
   clf reset
   figure(gcf);
   echo on
   clc
   pause
   clc
   disp('请输入样本的数量:')
   n1=input('请你输入:');
   disp('请输入样本的维数(2,3):');
   n2=input('请你输入:');
   disp('请输入样本矢量:');
   P=input('请输入:');
   disp('请输入目标样本矢量:');
   Tc=input('请你输入:');
   T=ind2vec(Tc);    %学习矢量量化网络的输出是单值矢量组,故把下标矩阵转化为单值矢量组形
   disp('请输入竞争层神经元个数:');
   S1=input('请输入:');
   disp('请输入网络输出层神经元个数也即样本的类别数目:')
   S2=input('请输入:');
   disp('请输入输入的样本矢量中每类所占的比例,是S2维的矩阵:');
   PC=input('请输入:');
   disp('请输入学习速率,缺省值为0.01:');
   LR=input('请输入:');
   disp('请输入学习函数:(learnlv1,learnlv2)');
   LF=input('请输入:');
   net=newlvq(minmax(P),S1,PC,LR,LF);
   pause
   clc
   disp('请输入训练次数:');
   net.trainParam.epochs=input('请你输入:');    
   net=train(net,P,T);
   pause
   clc
   figure;    %画样本数据分布图
   w1=net.IW{1}';
   wc=vec2ind(net.LW{2});

   y={'*','+','-'}  %用于给不同的样本画不同的线条
   z={'o','s'};   %用于画出不同样本的权值

   if (n2==2)   %输入的是二维的样本矢量
   for i=1:n1

   m=Tc(i); %这句有错吗?可以这样赋值吗?编译提示是错的!
   plot(P(1,i),P(2,i),y(m),'markersize',10);
   title('样本数据分布图');
   end   %结束for循环
   pause
   clc
   for j=1:S1
   h=wc(j);
   plot(w1(1,j),w1(2,j),z(h),'markersize',5);
   title('inputdata&net weights');
   end
   else 
   for i=1:n1
   m=Tc(i); %编译提示不能从cell转换为double类型。那怎么办??
   plot3(P(1,i),P(2,i),P(3,i),y(m),'markersize',10);
   end  %结束for循环
   for j=1:S1
   h=wc(j);
   plot3(w1(1,j),w1(2,j),w1(3,j),z(h),'markersize',5);
   title('inputdata&net weights');
   end
   end 
   pause
   clc
   Y=sim(net,P);  %网络的仿真输出
   Yc=vec2ind(Y)