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

📄 mld2mat.m

📁 由matlab开发的hybrid系统的描述语言
💻 M
字号:
%===============================================================================
% function [A,B1,B2,B3,C,D1,D2,D3,E1,E2,E3,E4,E5,Ext] = mld2mat(m, Options)
%
% Title:        mld2mat.m                                             	
%                                                                       
% Project:      Hybrid systems   
%                                                             
% Purpose:      Representation of MLD Systems in matrix form, from the data
%               data structure MLDsystem
%               
% Author:       Domenico Mignone
%                                                                       
% History:      date         subject                                       
%               2000.10.18   initial version
%               2001.05.25   TG added robust handling of non-complilant MLDs
%               2002.08.26   FT added support for MLD struct v2
% 
% Usage:        Given the MLD system in the MLDsystem structure, computes the
%               matrices of the MLD form
%
%               The additional output Ext has the following fields:
%
%               Ext.nu
%               Ext.nd
%               Ext.nz
%               Ext.nx
%               Ext.ne
%               Ext.ny  ..... dimensions of inputs, deltas, etc.
%
%               Ext.binaryinputs ..... binary inputs
%
% Contact:      Tobias Geyer
%               Automatic Control Laboratory
%               ETH Zentrum, 
%               Zurich, Switzerland
%
%               geyer@aut.ee.ethz.ch
%
%               Comments and bug reports are highly appreciated
%
%===============================================================================


function [A,B1,B2,B3,C,D1,D2,D3,E1,E2,E3,E4,E5,Ext] = mld2mat(m,Options)

% extract MLD model out of structure m
% ------------------------------------

if ~isfield(m,'ny')
   m.ny = 1;
end;

if isfield(m,'A')
   A = m.A;
elseif isfield(m,'Ac')
   A = [m.Ac, m.Ad];
elseif isfield(m,'Acc')
   A = [m.Acc m.Acd; m.Adc m.Add];
else
   error('invalid MLD model: A is wrong')       
end 
  
if isfield(m,'B1')
   B1 = m.B1;
elseif isfield(m,'B1c')
   B1 = [m.B1c, m.B1d];
elseif isfield(m,'B1cc')
   B1 = [m.B1cc m.B1cd; m.B1dc m.B1dd]; 
else     
   error('invalid MLD model: B1 is wrong')   
end

if isfield(m,'B2')
   B2 = m.B2;
elseif isfield(m,'B2cd')
   B2 = [m.B2cd; m.B2dd];   
else
   error('invalid MLD model: B2 is wrong')   
end   

if isfield(m,'B3')
   B3 = m.B3;
elseif isfield(m,'B3cc')
   B3 = [m.B3cc; m.B3dc];   
else
   error('invalid MLD model: B3 is wrong')   
end   
  
if isfield(m,'C')
   C = m.C;
elseif isfield(m,'Cc')
   C = [m.Cc, m.Cd];
elseif isfield(m,'Ccc')
   C = [m.Ccc m.Ccd; m.Cdc m.Cdd];
else
   %error('invalid MLD model: C is wrong')       
   C = zeros(m.ny, m.nx);
end 
  
if isfield(m,'D1')
   D1 = m.D1;
elseif isfield(m,'D1c')
   D1 = [m.D1c, m.D1d];
elseif isfield(m,'D1cc')
   D1 = [m.D1cc m.D1cd; m.D1dc m.D1dd]; 
else     
   %error('invalid MLD model: D1 is wrong') 
   D1 = zeros(m.ny, m.nu);  
end

if isfield(m,'D2')
   D2 = m.D2;
elseif isfield(m,'D2cd')
   D2 = [m.D2cd; m.D2dd];   
else
   %error('invalid MLD model: D2 is wrong')  
   D2 = zeros(m.ny, m.nd); 
end   

if isfield(m,'D3')
   D3 = m.D3;
elseif isfield(m,'D3cc')
   D3 = [m.D3cc; m.D3dc];   
else
   %error('invalid MLD model: D3 is wrong')   
   D3 = zeros(m.ny, m.nz);
end   

if isfield(m,'E1')
   E1 = m.E1;
else
   error('invalid MLD model: E1 is wrong')   
end  
 
if isfield(m,'E2')
   E2 = m.E2;
else
   error('invalid MLD model: E2 is wrong')   
end   

if isfield(m,'E3')
   E3 = m.E3;
else
   error('invalid MLD model: E3 is wrong')   
end

if isfield(m,'E4')
   E4 = m.E4;
else
   error('invalid MLD model: E4 is wrong')   
end  
 
if isfield(m,'E5')
   E5 = m.E5;
else
   error('invalid MLD model: E5 is wrong')   
end

if isfield(m,'binaryinputs')
   Ext.binaryinputs = m.binaryinputs;
elseif isfield(m,'nur')
   Ext.binaryinputs = m.nur+1:m.nu;	
else
   warning('binaryinputs not defined, assuming []')
   Ext.binaryinputs = []; 
end

% derive dimensions
% -----------------

Ext.nu  = size(B1,2);   
Ext.nd  = size(B2,2);
Ext.nz  = size(B3,2);  
Ext.nx  = size(A,2);   
Ext.ne  = size(E5,1);
Ext.ny  = size( C,1);

⌨️ 快捷键说明

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