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

📄 nnimport.m

📁 神经网络预测控制程序的源代码
💻 M
📖 第 1 页 / 共 3 页
字号:
   nncontrolutil('nnimport','workspace',gcbf);
   
elseif strcmp(cmd,'cancel')
   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;
   
elseif strcmp(cmd,'windowstyle')
   set(fig,'visible','on','WindowStyle',arg2)
   return;
   
elseif strcmp(cmd,'radiobutton')
   val = get(gcbo,'Value');
   sibs = get(gcbo,'UserData');
   
   if ~val,
      set(gcbo,'Value',1);
   elseif val==1,
      set(sibs,'Value',0);
      set(ud.Handles.FileNameEdit,'String','', ...
         'UserData',struct('FileName',[],'PathName',[]));
      if strcmp(ud.Handles.type_net,'nnmodref')
         set([ud.Handles.PlantEdit,...
            ud.Handles.ControllerEdit],'String','','UserData',...
            struct('ListIndex',0,'String',''));
      else
         set(ud.Handles.PlantEdit,'String','','UserData',...
            struct('ListIndex',0,'String',''));
      end
   end % if/else val
   
elseif strcmp(cmd,'editcallback'),
   %---Callback for the Plant and Controller Edit boxes
   %---These boxes should contain an index into the List Box string
   %---The Index should be zero when an invalid name is entered
   TryString = get(gcbo,'String');
   udEdit = get(gcbo,'UserData');
   
   if isempty(TryString), % empty value, leave it that way
      udEdit.ListIndex=0;
      udEdit.String='';
   else      
      IndList = strmatch(TryString,ud.ListData.Names,'exact');
      
      if isempty(IndList),
          % Revert to last valid entry
         if isempty(udEdit.ListIndex),
            set(gcbo,'String','');
         else
            set(gcbo,'String',udEdit.String);
         end, %if/else isempty(udEdit)
         WarnStr=['You must enter a network object from the list box.'];
         warndlg(WarnStr,'Import Warning','modal');
      else, % Store the list index
         udEdit.ListIndex=IndList;
         udEdit.String=TryString;
      end % if/else isempty(IndList);
   end % if/else isempty(TryString);
   set(gcbo,'UserData',udEdit);
   
elseif strcmp(cmd,'matfile'),
   set(ud.Handles.ModelText,'string','MAT-file Contents');
   set([ud.Handles.FileNameText,...
         ud.Handles.FileNameEdit,...
         ud.Handles.BrowseButton],'enable','on');
   set(ud.Handles.FileNameText,'String','MAT-filename:');
   set(ud.Handles.BrowseButton,'Callback','nncontrolutil(''nnimport'',''browsemat'',gcbf);');
   set(ud.Handles.FileNameEdit,...
      'Callback','nncontrolutil(''nnimport'',''clearpath'',gcbf);nncontrolutil(''nnimport'',''matfile'',gcbf);');
   
   FileName = get(ud.Handles.FileNameEdit,'String');   
   if isempty(FileName),
      Data=struct('Names','','Objects',[]);
   else
      try
         VAR=load(FileName);
         WorkspaceVars=whos('-file',FileName);
         sysvar=cell(size(WorkspaceVars));
         s=0;
         for ct=1:size(WorkspaceVars,1),
            VarClass=WorkspaceVars(ct).class;
            if (strcmp(VarClass,'network')) & isequal(2,length(WorkspaceVars(ct).size)),
               % Only look for Non-array (TF, SS, and ZPK) LTI objects
               s=s+1;
               sysvar(s)={WorkspaceVars(ct).name};
            end % if isa
         end % for ct
         sysvar=sysvar(1:s);
         
         DataObjects = cell(2,1);
         for ctud=1:s,
            DataObjects{ctud} = eval(cat(2,'VAR.',sysvar{ctud}));
         end % for
         Data = struct('Names',{sysvar},'Objects',{DataObjects});
         
      catch
         warndlg(lasterr,'Import Warning','modal'); 
         set(ud.Handles.FileNameEdit,'String','');
         FileName='';
         Data=struct('Names','','Objects',[]);
      end % try/catch
   end % if/else check on FileName
   
   LocalFinishLoad(fig,ud,FileName,Data)
   
elseif strcmp(cmd,'workspace')
   set(ud.Handles.ModelText,'string','Workspace Contents');
   set([ud.Handles.FileNameText,...
         ud.Handles.FileNameEdit,...
         ud.Handles.BrowseButton],'enable','off');
   
   %----Look for all workspace variables of class 'ss', 'tf', or 'zpk'
   WorkspaceVars=evalin('base','whos');
   sysvar=cell(size(WorkspaceVars));
   s=0;
   for ct=1:size(WorkspaceVars,1),
      VarClass=WorkspaceVars(ct).class;
      if (strcmp(VarClass,'network'))  & isequal(2,length(WorkspaceVars(ct).size)),
         % Only look for Non-array (TF, SS, and ZPK) LTI objects
         s=s+1;
         sysvar(s,1)={WorkspaceVars(ct).name};
      end % if isa
   end % for ct
   sysvar=sysvar(1:s,1);
   
   DataObjects = cell(s,1);
   for ctud=1:s,
      DataObjects{ctud} = evalin('base',sysvar{ctud});
   end
   
   Data = struct('Names',{sysvar},'Objects',{DataObjects});
   
   set(ud.Handles.ModelList,'String',sysvar)
   
   %---Update the Import Figure Userdata
   ud.ListData=Data;
   set(fig,'UserData',ud);
      
elseif strcmp(cmd,'browsemat')
   filterspec = '*.mat';
   
   udFileEdit = get(ud.Handles.FileNameEdit,'UserData');
   LastPath = udFileEdit.PathName;
   CurrentPath=pwd;
   if ~isempty(LastPath),
      cd(LastPath);
   end
   [filename,pathname] = uigetfile(filterspec,'Import file:');
   if ~isempty(LastPath),
      cd(CurrentPath);
   end
   
   if filename,
      if ~strcmpi(pathname(1:end-1),CurrentPath)
         ImportStr = [pathname,filename(1:end-4)];
      else
         ImportStr = filename(1:end-4);
      end
      set(ud.Handles.FileNameEdit,'String',ImportStr);
      nncontrolutil('nnimport','matfile',fig);
      if strcmp(ud.Handles.type_net,'nnmodref')
         set([ud.Handles.PlantEdit,...
            ud.Handles.ControllerEdit],'String','','UserData',...
            struct('ListIndex',0,'String',''));
      else
         set(ud.Handles.PlantEdit,'String','','UserData',...
            struct('ListIndex',0,'String',''));
      end
   end
   
elseif strcmp(cmd,'clearpath') & (fig)
   %---Callback for the SImulink File box
   %    Whenever a new name is entered, update the Userdata
   NewName = get(gcbo,'String');
   indDot = findstr(NewName,'.');
   if ~isempty(indDot),
      NewName=NewName(1:indDot(end)-1);
      set(ud.Handles.FileNameEdit,'String',NewName)   
   end
      
elseif strcmp(cmd,'buttoncallback')
   %---Callback for the Arrow Buttons
   EditBox = get(gcbo,'UserData');
   AllNames = get(ud.Handles.ModelList,'String');
   if ~isempty(AllNames), % Make sure these is something in the list
      SelectedName = get(ud.Handles.ModelList,'Value');
      udEdit = get(EditBox ,'UserData');
      udEdit.String = AllNames{SelectedName};
      udEdit.ListIndex = SelectedName;
      set(EditBox,'String',AllNames{SelectedName},'UserData',udEdit);
   end
   
elseif strcmp(cmd,'apply'), % Send the new Feedback structure to the Parent's Userdata
      PlantOK=0;ControllerOK=0;
      %---Plant
      udPlantEdit = get(ud.Handles.PlantEdit,'UserData');
      if udPlantEdit.ListIndex~=0, 
         ud.ModelData.Plant.Name = udPlantEdit.String;
         ud.ModelData.Plant.Object = ...
           ud.ListData.Objects{udPlantEdit.ListIndex};
         
         if strcmp(ud.Handles.type_net,'narma_l2')
            if ud.ModelData.Plant.Object.numLayers~=6
               warndlg('The neural network plant must have 6 layers.',...
               'Import Warning','modal');
               return
            end
            if ud.ModelData.Plant.Object.numInputs~=3
               warndlg('The neural network plant must have 3 inputs.',...
               'Import Warning','modal');
               return
            end
            if ud.ModelData.Plant.Object.layers{6}.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') | ...
                  ~strcmp(ud.ModelData.Plant.Object.layers{3}.transferFcn,'tansig')
               warndlg('The transfer function of the first and third layer on the neural network plant must be TANSIG.',...
               'Import Warning','modal');
               return
            end
            if ~strcmp(ud.ModelData.Plant.Object.layers{2}.transferFcn,'purelin') | ...
                  ~strcmp(ud.ModelData.Plant.Object.layers{4}.transferFcn,'purelin') | ...
                  ~strcmp(ud.ModelData.Plant.Object.layers{5}.transferFcn,'purelin') | ...
                  ~strcmp(ud.ModelData.Plant.Object.layers{6}.transferFcn,'purelin')
               warndlg('The transfer function of the second, fourth, fifth and sixth Layer on 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 ud.ModelData.Plant.Object.biasConnect(3)==0
               B3=zeros(S1,1);
            else
               B3=ud.ModelData.Plant.Object.b{3};
            end
            if ud.ModelData.Plant.Object.biasConnect(4)==0
               B4=0;
            else
               B4=ud.ModelData.Plant.Object.b{4};
            end
            if ud.ModelData.Plant.Object.biasConnect(5)~=0 ...
                  ud.ModelData.Plant.Object.biasConnect(6)~=0

⌨️ 快捷键说明

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