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

📄 cmbrowse.m

📁 CheckMate is a MATLAB-based tool for modeling, simulating and investigating properties of hybrid dyn
💻 M
📖 第 1 页 / 共 2 页
字号:
	      node.children(k).evalstr = [node.evalstr node.children(k).name];
	      node.children(k).class = evalin('base', ...
		  ['class(' node.children(k).evalstr ')']);
	      node.children(k).path = [node.path k];
	      node.children(k).children = [];
	    end
	  else
	    names = fieldnames(node_var);
	    if ~isempty(names)
	      for k = 1:length(names)
		node.children(k).name = ['.' names{k}];
		node.children(k).evalstr = [node.evalstr '.' names{k}];
		node.children(k).class = evalin('base', ...
		    ['class(' node.children(k).evalstr ')']);
		node.children(k).path = [node.path k];
		node.children(k).children = [];
	      end
	    else
	      refresh = 0;
	    end
	  end
	end
      case 'cell'
	node_var = evalin('base',node.evalstr);
	if isempty(node_var) | ...
	      (length(size(node_var)) > 2) | (sum(size(node_var) > 1) > 1)
	  refresh = 0;
	else
	  for k = 1:length(node_var)
	    node.children(k).name = ['{' num2str(k) '}'];
	    node.children(k).evalstr = [node.evalstr node.children(k).name];
	    node.children(k).class = evalin('base', ...
		['class(' node.children(k).evalstr ')']);
	    node.children(k).path = [node.path k];
	    node.children(k).children = [];
	  end
	end
      otherwise
	refresh = 0;
    end
    set_node(fig,path,node);
  end
  if refresh
    refresh_tree_display(fig)
  end
end
set_browser_data(fig,'previous_select',current_select);
refresh_content_display(fig)

return

% -----------------------------------------------------------------------------

function refresh_tree_display(fig)

content_display = findobj(fig,'Tag','Content Display');
set(content_display,'String','<please wait...>');
drawnow

listbox = findobj(fig,'Tag','Hierachy Display');
set(listbox,'Enable','inactive')
set(listbox,'UserData',{})
tree = get_browser_data(fig,'tree');
for k = 1:length(tree)
  display_tree(fig,tree(k));
end
list = get(listbox,'UserData');
set(listbox,'String',list)
set(listbox,'Enable','on')

return

% -----------------------------------------------------------------------------

function refresh_content_display(fig)

content = findobj(fig,'Tag','Content Display');
listbox = findobj(fig,'Tag','Hierachy Display');
val = get(listbox,'Value');
path = get_browser_data(fig,['map{' num2str(val) '}']);
node = get_node(fig,path);
if ~isempty(node.children)
  set(content,'String','<not available>')
else
  node_var = evalin('base',node.evalstr);
  node_class = node.class;
  if length(size(node_var)) > 2
    node_class = 'multidimensional';
  end
  switch node_class
    case 'double'
      if isempty(node_var)
	set(content,'String','<empty>')
      else
	set(content,'String',double2cellstr(node_var));
      end
    case 'char'
      if isempty(node_var)
	set(content,'String','<empty>')
      else
	str = {};
	for k = 1:size(node_var,1)
	  str{length(str)+1} = sprintf('''%s''',node_var(k,:));
	end
	set(content,'String',str)
      end
    case 'linearcon'
      set(content,'String',linearcon2cellstr(node_var))
    case 'region'
      set(content,'String',region2cellstr(node_var))
    case 'vertices'
      set(content,'String',vertices2cellstr(node_var))
    case 'polyhedron'
      set(content,'String',polyhedron2cellstr(node_var))
    case {'struct','cell'}
      if isempty(node_var)
	set(content,'String','<empty>')
      else
	set(content,'String','<not available>')
      end
    otherwise,
      if isempty(node_var)
	set(content,'String','<empty>')
      else
	set(content,'String','<not supported>')
      end
  end
end
return

% -----------------------------------------------------------------------------

function set_browser_data(fig,field,val)

browser_data = get(fig,'UserData');
eval(['browser_data.' field ' = val;'])
set(fig,'UserData',browser_data);
return

% -----------------------------------------------------------------------------

function val = get_browser_data(fig,field)

browser_data = get(fig,'UserData');
eval(['val = browser_data.' field ';'])
return

% -----------------------------------------------------------------------------

function out = double2cellstr(n)

str = num2str(n);
out = {};
for k = 1:size(str,1)
  out{k} = ['[' str(k,:) ']'];
end
return

% -----------------------------------------------------------------------------

function str = linearcon2cellstr(con)

[CE,dE,CI,dI] = linearcon_data(con);

if isempty(CE) & isempty(CI)
  str = sprintf('<empty>');
  return
end

str = {};

Cstr = num2str([CE; CI]);
dstr = num2str([dE; dI]);
for k = 1:length(dE)
  str{length(str)+1} = sprintf('[%s]x  = %s',Cstr(k,:),dstr(k,:));
end

for k = 1:length(dI)
  str{length(str)+1} = sprintf('[%s]x <= %s', ...
      Cstr(k+length(dE),:),dstr(k+length(dE),:));
end

return

% -----------------------------------------------------------------------------

function str = region2cellstr(s)

nstate = get_region_param(s,'nstate');

str = {};
str{length(str)+1} = ...
    sprintf('total number of states: %d',nstate);
str{length(str)+1} = sprintf('states in region: ');

if isempty(s)
  str{length(str)+1} = '';
  str{length(str)+1} = 'none';
elseif isuniverse(s)
  str{length(str)+1} = '';
  str{length(str)+1} = 'all';
else
  line = '';
  count = 0;
  for k = 1:nstate
    if isinregion(s,k)
      count = count + 1;
      if count > 1
	line = [line ' '];
      end
      if (rem(count-1,20) == 0)
	str{length(str)+1} = line;
	line = '';
      end
      line = [line sprintf('%d',k)];
    end
  end
  if ~isempty(line)
    str{length(str)+1} = line;
  end
end

return

% -----------------------------------------------------------------------------

function str = vertices2cellstr(v)

if isempty(v) 
  str = '<empty>';
else
  str = {};
  for k = 1:length(v)
    str{length(str)+1} = sprintf('v%d = %s''',k,mat2str(v(k)'));
  end
end

% -----------------------------------------------------------------------------

function str = polyhedron2cellstr(p)

CE = get_param(p,'CE');
dE = get_param(p,'dE');
CI = get_param(p,'CI');
dI = get_param(p,'dI');
VE = get_param(p,'VE');
VI = get_param(p,'VI');

if isempty(dE) & isempty(dI)
  str = '<empty>';
  return
end

str = {};
if ~isempty(dE)
  str{length(str)+1} = sprintf('Equality Constraints');
  str{length(str)+1} = sprintf('--------------------');
  for k = 1:length(dE)
    n = CE(k,:); b = dE(k);
    str{length(str)+1} = [sprintf('Constraint %d:  ',k) ...
	    mat2str(n) 'x = ' mat2str(b)];
    str{length(str)+1} = sprintf('Vertices:');
    for l = 1:length(VE{k})
      str{length(str)+1} = [sprintf('  v%d = %s''',l,mat2str(VE{k}(l)')) ...
	    sprintf('  cTv = %f',n*VE{k}(l))];
    end    
  end
end

if ~isempty(dI)
  if ~isempty(dE)
    str{length(str)+1} = '';
  end
  str{length(str)+1} = sprintf('Inequality Constraints');
  str{length(str)+1} = sprintf('----------------------');
  for k = 1:length(dI)
    n = CI(k,:); b = dI(k);
    str{length(str)+1} = [sprintf('Constraint %d:  ',k+length(dE)) ...
	    mat2str(n) 'x <= ' mat2str(b)];
    str{length(str)+1} = sprintf('Vertices:');
    for l = 1:length(VI{k})
      str{length(str)+1} = [sprintf('  v%d = %s''',l,mat2str(VI{k}(l)')) ...
	    sprintf('  cTv = %f',n*VI{k}(l))];
    end    
  end
end

return

⌨️ 快捷键说明

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