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

📄 augment_poly_constraints.m

📁 CheckMate is a MATLAB-based tool for modeling, simulating and investigating properties of hybrid dyn
💻 M
字号:
function [C_total,d_total] = augment_poly_constraints(scsbHandle,pthb)

% Augment constraints to the overall system order
%
% Syntax:
%   "[C_total,d_total] = augment_poly_constraints(scsbHandle,pthb)"
%
% Description:
%   "augment_poly_constraints(scsbHandle,pthb)" returns the constraints
%   from the polyhedral threshold block (PTHB) "pthb" with respect to the
%   overall system order.  "scsbHandle" is a list of handles to all
%   switched continuous system blocks (SCSBs) in the system, and is
%   used to determine the overall order of the system.
%
% See Also:
%   piha

% Get the (C,d) matrix-vector pair for the specified PTHB
poly_pthb = evalin('base',get_param(pthb,'polyhedron'));
[CE,dE,C_pthb,d_pthb] = linearcon_data(poly_pthb);
if ~isempty(CE) | ~isempty(dE)
  blockname = get_param(pthb,'name');
  error(['Invalid constraints for polyhedral threshold block ''' ...
	blockname '''.'])
end

% Find the SCSBs feeding to the input of the specified PTHB
input_scsb = trace_pthb_input(pthb);

% Extract the columns of C_pthb corresponding to each input SCSB
C_input_scsb = {};
nx_total = 0;
for k = 1:length(input_scsb)
  nx = eval(get_param(input_scsb(k),'nx'));
  if strcmp(get_param(input_scsb(k),'use_sd'),'on')
      nx = nx+eval(get_param(input_scsb(k),'nz'));
  end
  C_input_scsb{k} = C_pthb(:,nx_total+1:nx_total+nx);
  nx_total = nx_total + nx;
end

% Rearrange the columns according to the overall SCSB in the system.
C_total = [];
for k = 1:length(scsbHandle)
  % Check if the kth SCSB is part of the input to pthb
  found = 0;
  for l = 1:length(input_scsb)
    if (scsbHandle(k) == input_scsb(l))
      found = 1;
      break;
    end
  end
  if found
    % if found, append the columns corresponding to the kth SCSB
    C_total = [C_total C_input_scsb{l}];
  else
    % if not, append the zero columns
    nx = eval(get_param(scsbHandle(k),'nx'));
    C_total = [C_total zeros(size(C_pthb,1),nx)];
  end
end

d_total = d_pthb;
return

⌨️ 快捷键说明

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