⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nnimport.m

📁 RBF网络逼近、RBF-建模、RBF网络训练与测试程序
💻 M
📖 第 1 页 / 共 3 页
字号:
               warndlg('The fifth and sixth layers of the neural network plant must no have biases.',...
               'Import Warning','modal');
               return
            end
            if size(ud.ModelData.Plant.Object.inputConnect)~=[6 3] |...
                  sum(sum(ud.ModelData.Plant.Object.inputConnect))~=3 | ...
                  ud.ModelData.Plant.Object.inputConnect(1,1)~=1 | ...
                  ud.ModelData.Plant.Object.inputConnect(3,2)~=1 | ...
                  ud.ModelData.Plant.Object.inputConnect(5,3)~=1
               warndlg('The neural network plant input must be connected to layers 1, 3 and 5.',...
               'Import Warning','modal');
               return
            else
               IW1_1=ud.ModelData.Plant.Object.IW{1,1};
               IW3_2=ud.ModelData.Plant.Object.IW{3,2};
               IW5_3=ud.ModelData.Plant.Object.IW{5,3};
               Ni=max(ud.ModelData.Plant.Object.inputWeights{1,1}.delays)+1;
            end
            if size(ud.ModelData.Plant.Object.outputConnect)~=[1 6] | ...
                  sum(ud.ModelData.Plant.Object.outputConnect)~=1 | ...
                  ud.ModelData.Plant.Object.outputConnect(6)~=1
               warndlg('The neural network plant output must be connected to layer 6.',...
               'Import Warning','modal');
               return
            end
            if size(ud.ModelData.Plant.Object.layerConnect)~=[6 6] | ...
                  sum(sum(ud.ModelData.Plant.Object.layerConnect))~=5 | ...
                  ud.ModelData.Plant.Object.layerConnect(2,1)~=1 | ...
                  ud.ModelData.Plant.Object.layerConnect(6,2)~=1 | ...
                  ud.ModelData.Plant.Object.layerConnect(4,3)~=1 | ...
                  ud.ModelData.Plant.Object.layerConnect(5,4)~=1 | ...
                  ud.ModelData.Plant.Object.layerConnect(6,5)~=1
               warndlg('The neural network plant layers are not correctly connected.',...
               'Import Warning','modal');
               return
            else
               LW2_1=ud.ModelData.Plant.Object.LW{2,1};
               LW4_3=ud.ModelData.Plant.Object.LW{4,3};
               LW5_4=ud.ModelData.Plant.Object.LW{5,4};
               LW6_5=ud.ModelData.Plant.Object.LW{6,5};
               LW6_2=ud.ModelData.Plant.Object.LW{6,2};
               Nj=max(ud.ModelData.Plant.Object.layerWeights{2,1}.delays);
            end
         else
            if ud.ModelData.Plant.Object.numLayers~=2
               warndlg('The neural network plant must have 2 layers.',...
               'Import Warning','modal');
               return
            end
            if ud.ModelData.Plant.Object.numInputs~=1
               warndlg('The neural network plant must have 1 input.',...
               'Import Warning','modal');
               return
            end
            if ud.ModelData.Plant.Object.layers{2}.dimensions~=1
               warndlg('The neural network plant must have one output.',...
               'Import Warning','modal');
               return
            end
            if ~strcmp(ud.ModelData.Plant.Object.layers{1}.transferFcn,'tansig')
               warndlg('The transfer function of the first layer of the neural network plant must be TANSIG.',...
               'Import Warning','modal');
               return
            end
            if ~strcmp(ud.ModelData.Plant.Object.layers{2}.transferFcn,'purelin')
               warndlg('The transfer function of the second layer of the neural network plant must be PURELIN.',...
               'Import Warning','modal');
               return
            end
            S1=ud.ModelData.Plant.Object.layers{1}.dimensions;
            if ud.ModelData.Plant.Object.biasConnect(1)==0
               B1=zeros(S1,1);
            else
               B1=ud.ModelData.Plant.Object.b{1};
            end
            if ud.ModelData.Plant.Object.biasConnect(2)==0
               B2=0;
            else
               B2=ud.ModelData.Plant.Object.b{2};
            end
            if sum(ud.ModelData.Plant.Object.inputConnect==[1;0])~=2
               warndlg('The neural network plant input must be connected to layer 1.',...
               'Import Warning','modal');
               return
            else
               IW=ud.ModelData.Plant.Object.IW{1,1};
               Ni=max(ud.ModelData.Plant.Object.inputWeights{1,1}.delays)+1;
            end
            if sum(ud.ModelData.Plant.Object.outputConnect==[0 1])~=2
               warndlg('The neural network plant output must be connected to layer 2.',...
               'Import Warning','modal');
               return
            end
            if sum(ud.ModelData.Plant.Object.layerConnect(:)==[0; 1; 1; 0])~=4
               warndlg('The neural network plant layers are not correctly connected.',...
               'Import Warning','modal');
               return
            else
               LW1_2=ud.ModelData.Plant.Object.LW{1,2};
               LW2_1=ud.ModelData.Plant.Object.LW{2,1};
               Nj=max(ud.ModelData.Plant.Object.layerWeights{1,2}.delays);
            end
         end
         PlantOK=1;
      end
               
      %---Controller
      if strcmp(ud.Handles.type_net,'nnmodref')
         udControllerEdit = get(ud.Handles.ControllerEdit,'UserData');
         if udControllerEdit.ListIndex~=0, 
            ud.ModelData.Controller.Name = udControllerEdit.String;
            ud.ModelData.Controller.Object = ...
              ud.ListData.Objects{udControllerEdit.ListIndex};
          
            if ud.ModelData.Controller.Object.numLayers~=2
               warndlg('The neural network controller must have 2 layers.',...
               'Import Warning','modal');
               return
            end
            if ud.ModelData.Controller.Object.numInputs~=2
               warndlg('The neural network controller must have 2 inputs.',...
               'Import Warning','modal');
               return
            end
            if ud.ModelData.Controller.Object.layers{2}.dimensions~=1
               warndlg('The neural network controller must have one output.',...
               'Import Warning','modal');
               return
            end
            if ~strcmp(ud.ModelData.Controller.Object.layers{1}.transferFcn,'tansig')
               warndlg('The transfer function of the first layer of the neural network controller must be TANSIG.',...
               'Import Warning','modal');
               return
            end
            if ~strcmp(ud.ModelData.Controller.Object.layers{2}.transferFcn,'purelin')
               warndlg('The transfer function of the second layer of the neural network controller must be PURELIN.',...
               'Import Warning','modal');
               return
            end
            S1c=ud.ModelData.Controller.Object.layers{1}.dimensions;
            if ud.ModelData.Controller.Object.biasConnect(1)==0
               B1_c=zeros(S1,1);
            else
               B1_c=ud.ModelData.Controller.Object.b{1};
            end
            if ud.ModelData.Controller.Object.biasConnect(2)==0
               B2_c=0;
            else
               B2_c=ud.ModelData.Controller.Object.b{2};
            end
            if sum(ud.ModelData.Controller.Object.inputConnect(:)==[1;0;1;0])~=4
               warndlg('The neural network controller input must be connected to layer 1.',...
               'Import Warning','modal');
               return
            else
               IW_r=ud.ModelData.Controller.Object.IW{1,1};
               IW_y=ud.ModelData.Controller.Object.IW{1,2};
               Nrc=max(ud.ModelData.Controller.Object.inputWeights{1,1}.delays)+1;
               Njc=max(ud.ModelData.Controller.Object.inputWeights{1,2}.delays)+1;
            end
            if sum(ud.ModelData.Controller.Object.outputConnect==[0 1])~=2
               warndlg('The neural network controller output must be connected to layer 2.',...
               'Import Warning','modal');
               return
            end
            if sum(ud.ModelData.Controller.Object.layerConnect(:)==[0; 1; 1; 0])~=4
               warndlg('The neural network controller layers are not correctly connected.',...
               'Import Warning','modal');
               return
            else
               IW_u=ud.ModelData.Controller.Object.LW{1,2};
               LW_c=ud.ModelData.Controller.Object.LW{2,1};
               Nic=max(ud.ModelData.Controller.Object.layerWeights{1,2}.delays);
            end
            ControllerOK=1;
         end
      end
      
      figure_variables=get(ud.Handles.parent,'userdata');
      parent_simulink=get(figure_variables.gcbh_ptr,'userdata');
      if PlantOK
         if strcmp(ud.Handles.type_net,'narma_l2')
            set_param(parent_simulink,'IW1_1',mat2str(IW1_1,20));  
            set_param(parent_simulink,'IW3_2',mat2str(IW3_2,20));  
            set_param(parent_simulink,'IW5_3',mat2str(IW5_3,20));  
            set_param(parent_simulink,'LW2_1',mat2str(LW2_1,20));  
            set_param(parent_simulink,'LW4_3',mat2str(LW4_3,20));  
            set_param(parent_simulink,'LW5_4',mat2str(LW5_4,20));  
            set_param(parent_simulink,'LW6_5',mat2str(LW6_5,20));  
            set_param(parent_simulink,'LW6_2',mat2str(LW6_2,20));  
            set_param(parent_simulink,'B1',mat2str(B1,20));  
            set_param(parent_simulink,'B2',mat2str(B2,20));  
            set_param(parent_simulink,'B3',mat2str(B3,20));  
            set_param(parent_simulink,'B4',mat2str(B4,20));  
            set_param(parent_simulink,'S1',mat2str(S1,20));  
%            set_param(parent_simulink,'Ni',mat2str(Ni,20));  
%            set_param(parent_simulink,'Nj',mat2str(Nj,20));  
         else
            set_param(parent_simulink,'IW',mat2str(IW,20));  
            set_param(parent_simulink,'LW1_2',mat2str(LW1_2,20));  
            set_param(parent_simulink,'LW2_1',mat2str(LW2_1,20));  
            set_param(parent_simulink,'B1',mat2str(B1,20));  
            set_param(parent_simulink,'B2',mat2str(B2,20));  
            set_param(parent_simulink,'S1',mat2str(S1,20));  
            set_param(parent_simulink,'Ni',mat2str(Ni,20));  
            set_param(parent_simulink,'Nj',mat2str(Nj,20));  
         end
      end
      if ControllerOK
         set_param(parent_simulink,'IW_y',mat2str(IW_y,20));  
         set_param(parent_simulink,'IW_u',mat2str(IW_u,20));  
         set_param(parent_simulink,'IW_r',mat2str(IW_r,20));  
         set_param(parent_simulink,'LW_c',mat2str(LW_c,20));  
         set_param(parent_simulink,'B1_c',mat2str(B1_c,20));  
         set_param(parent_simulink,'B2_c',mat2str(B2_c,20));  
         set_param(parent_simulink,'S1c',mat2str(S1c,20));  
         set_param(parent_simulink,'Nic',mat2str(Nic,20));  
         set_param(parent_simulink,'Njc',mat2str(Njc,20));  
         set_param(parent_simulink,'Nrc',mat2str(Nrc,20));  
      end
      if PlantOK | ControllerOK
         H=get(ud.Handles.parent,'userdata');
         arg1=get(H.gcbh_ptr,'userdata');
         arg2=get(H.gcb_ptr,'userdata');
         feval(ud.Handles.ret_func,'',arg1,arg2,'');
         delete(fig)   
         return
      end
      
   warndlg('You must define a neural network to be imported.',...
           'Import Warning','modal');
      
   set(fig,'UserData',ud)

   uiresume(fig)
   
end

%-----------------------------Internal Functions--------------------------
%%%%%%%%%%%%%%%%%%%%%%%
%%% LocalFinishLoad %%%
%%%%%%%%%%%%%%%%%%%%%%%
function LocalFinishLoad(ImportFig,ud,FileName,Data)

%---Update the FileNameEdit Userdata
[P,F]=fileparts(FileName);
udNames = get(ud.Handles.FileNameEdit,'UserData');
udNames.PathName=P; 
udNames.FileName=F;
set(ud.Handles.FileNameEdit,'UserData',udNames)

%---Update the Import Figure Userdata
set(ud.Handles.ModelList,'String',Data.Names,'value',1)
ud.ListData=Data;
set(ImportFig,'UserData',ud);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -