シミュレーション実行中のエラー発生の解決法

2 Ansichten (letzte 30 Tage)
Taka
Taka am 22 Jun. 2023
Kommentiert: Taka am 6 Jul. 2023
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
解決法をご教授いただけますよう、何卒よろしくお願いします.
  2 Kommentare
stozaki
stozaki am 5 Jul. 2023
エラーメッセージにおいて、代数ループが原因のような記述が見えます。
エラーメッセージの後半(図では隠れて見えませんが。。)にヒントが記載されておりませんか?
代数ループが原因であれば、以下の回答を参考にしては如何でしょうか?
また、代数ループに関する説明は以下が参考になると思われます。
Taka
Taka am 6 Jul. 2023
ご回答ありがとうございます.
シミュレーション全体のメッセージとエラーメッセージの後半の記載をさせていただきます.
推奨アクションの1番目に記載されているアルゴリズムの切り替えを行った際,意図していないデータを取得していました.次に2番目に記載されている固定ステップサイズを小さくすることは行いましたが,解決に至りませんでした.
ICブロックをmemoryブロックに変更した所,動作自体は可能でしたが,意図していないデータを取得していました.

Melden Sie sich an, um zu kommentieren.

Antworten (0)

Kategorien

Mehr zu Simulink finden Sie in Help Center und File Exchange

Produkte

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!