simulink内で被覆制御を実現しようと考えています.
しかし,このようなエラーが表示され,実行することが出来ません.
simulink内は添付画像のようになっています.
シミュレーションの設定は以下のようになっています.
MASCCver4はLevel-2 MATLAB S-Functionを使用しています.
プログラムはこのようになっています.
function setup(block)
% Setup number of ports (Input & Output) ======================= %
% S-Functionブロックの入出力データ数を入力
block.NumInputPorts = 2; % 入力データ数
block.NumOutputPorts = 1; % 出力データ数
% Setup the each ports properties to be inherited or dynamic === %
block.SetPreCompInpPortInfoToDynamic;
block.SetPreCompOutPortInfoToDynamic;
% Seup the each Input ports properties ========================= %
% 入力データの大きさを設定
% エージェントの位置p
block.InputPort(1).Dimensions = [8 1];
block.InputPort(1).SamplingMode = 'Sample';
%エージェントの個数
block.InputPort(2).Dimensions = 1;
block.InputPort(2).SamplingMode = 'Sample';
% Seup the Output port properties ============================== %
% 出力データの大きさを設定
block.OutputPort(1).Dimensions = [8 1];
block.OutputPort(1).SamplingMode = 'Sample';
% Setup the Sampling Time ====================================== %
% サンプリング周期を設定(Simulinkと同じ場合は「-1」)
block.SampleTime = [-1 0];
block.RegBlockMethod('Update', @Update);
end
function Update(block)
% 入力データを取得 ============================================= %
p = block.InputPort(1).Data;
N = block.InputPort(2).Data;
% 出力データの計算 ============================================= %
phi = @(q,p) min( ...
sqrt(sum((q - reshape(p,2,N)).^2)));
phiv = @(X,Y,p) arrayfun(@(x,y) phi([x,y]',p),X,Y);
J = @(p) quad2d( @(X,Y) phiv(X,Y,p), ...
0, 1, 0, 1, 'Singular', false);
dJdp = @(p) numjac( @(t,p) J(p), ...
0, p, J(p), 1e-6*ones(2*N, 1), [], 0);
% 出力データを設定 ============================================== %
block.OutputPort(1).Data = dJdp(p)';
end
解決法をご教授いただけますよう、何卒よろしくお願いします.