0

連続状態空間モデルのために、s-function で m ファイルを呼び出しています。24行目のスイッチでフラグを使用するとエラーが発生します。

function [sys,x0,str,ts] = latitude(t,x,u,flag)
% CSFUNC An example M-file S-function for defining a system of
% continuous state equations:
% x' = Ax + Bu
% y = Cx + Du
%
% Generate a continuous linear system:
A=[0.08774    7.315    81.13    6.589
   0.01938   0.4011    15.58    1.182
   0.0986     2.04    73.46  0.01816
   0        1  -0.1425        0];
B=[  0.5264
     0.1163
     0.5916
     0];
C=[1      0      0      0
   0      1      0      0
   0      0      1      0
   0      0      0      1];
D=[0
   0
   0
   0];
switch flag,
case 0,
[sys,x0,str,ts]=latInitializeSizes(A,B,C,D); % Initialization
case 1,
sys = latDerivatives(t,x,u,A,B,C,D); % Calculate derivatives
case 3,
sys = latOutputs(t,x,u,A,B,C,D); % Calculate outputs
case { 2, 4, 9 } % Unused flags
sys = [];
otherwise
error(['Unhandled flag = ',num2str(flag)]); % Error handling
end

エラーは次のとおりです。

"??? 入力引数 "フラグ" が定義されていません。 ==> 緯度 24 スイッチ フラグのエラー"

メインの m ファイルのサブ関数は次のとおりです。

01:

function [sys,x0,str,ts] = latInitializeSizes(A,B,C,D)
%
% Call simsizes for a sizes structure, fill it in and convert it
% to a sizes array.
%
sizes = simsizes;
sizes.NumContStates = 4;
sizes.NumDiscStates = 0;
sizes.NumOutputs = 4;
sizes.NumInputs = 1;
sizes.DirFeedthrough = 0; % Matrix D is nonempty.
sizes.NumSampleTimes = 1;
sys = simsizes(sizes);
%
% Initialize the initial conditions.
%
x0 = zeros(4,1);
%
% str is an empty matrix.
%
str = [];
%
% Initialize the array of sample times; in this example the sample
% time is continuous, so set ts to 0 and its offset to 0.
%
ts = [0 0];
end
% End of mdlInitializeSizes.

02:

function sys = latDerivatives(t,x,u,A,B,C,D)
A=[0.08774    7.315    81.13    6.589
   0.01938   0.4011    15.58    1.182
   0.0986     2.04    73.46  0.01816
   0        1  -0.1425        0];
B=[  0.5264
     0.1163
     0.5916
     0];
u=[1];
 x=[0
  0
   0
   0];
sys = A*x + B*u;
end
% End of mdlDerivatives.

03:

function sys = latOutputs(t,x,u,A,B,C,D)

C=[1      0      0      0
   0      1      0      0
   0      0      1      0
   0      0      0      1];
D=[0
   0
   0
   0];
u=[1]; 
x=[0
   0
   0
   0];
sys = C*x + D*u;
end

サブ関数はエラーを出していません。

4

0 に答える 0