📄 mld2mat.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 + -