📄 nnimport.m
字号:
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 + -