overall_system_ode.m

来自「一个matlab的将军模型」· M 代码 · 共 71 行

M
71
字号
function xdot = overall_system_ode(t,x,flag,ode_param,p)

% Get overall system derivative vector for the given the FSM state vector.
%
% Syntax:
%   "xdot = overall_system_ode(t,x,flag,ode_param)"
%
% Description:
%   Return the composite derivative vector "xdot" for the given FSM state
%   vector "q" and the SCSBs information are stored in "SCSBlocks".
%
% Implementation:
%   For the "k"-th SCSB, compute the vector "uk", the outputs of FSMBs in
%   "q" in the order that they feed into the "k"-th SCSB in the Simulink
%   diagram. Use "uk" to call the `switching function` for the SCSB to
%   obtain the derivative vector for that block.  Stack the derivative
%   vectors from the SCSBs together to form the overall (composite)
%   derivative vector.
%
% See Also:
%   piha,overall_system_clock,overall_system_matrix

global GLOBAL_PIHA
global evalnumber

evalnumber=evalnumber+1;
if nargin<=4
    p=[];
end;


q = ode_param;
xdot = [];
startx = 0;
startp = 0;
for k = 1:length(GLOBAL_PIHA.SCSBlocks)
  nx = GLOBAL_PIHA.SCSBlocks{k}.nx;
  np = GLOBAL_PIHA.SCSBlocks{k}.paradim;
  swfunck = GLOBAL_PIHA.SCSBlocks{k}.swfunc;
  uk = q(GLOBAL_PIHA.SCSBlocks{k}.fsmbindices);
  xdot = [xdot; deriv(swfunck,x(startx+1:startx + nx),uk,p(startp+1:startp + np))];
  startx = startx + nx;
  startp = startp + np;
end


return

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

function xdot = deriv(swfunc,x,u,p)

if (nargin(swfunc)>2 & ~isempty(p))

    [sys,type] = feval(swfunc,x,u,p);
else
    [sys,type] = feval(swfunc,x,u);
end;
switch type
  case {'clock','nonlinear'}
    xdot = sys;
  case 'linear',
    % If the differential equation type is linear dx/dt = Ax + b, the returned
    % sys from swfunc is a structure containing the matrix A and the vector b.
    A = sys.A; b = sys.b;
    xdot = A*x + b;
  otherwise,
    error(['Unknown dynamics type ''' type '''!!!'])
end
return

⌨️ 快捷键说明

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