3

関数内で使用する場合、「線形化」のために Matlab でソース ワークスペースを定義する方法はありますか?

ここに短い最小限の作業例があります:

clear all
sys = 'watertank';
open(sys)
sys_io(1)   = linio('watertank/PID Controller',1,'input');
sys_io(2)   = linio('watertank/Water-Tank System',1,'openoutput');
linsys      = GetLinsys(sys,sys_io);
disp(linsys.a)

機能は次のとおりです。

function linsys = GetLinsys(sys,sys_io)
A       = 10;
linsys  = linearize(sys,sys_io);
end

出力は

-0.0500

linearize、「現在の」ワークスペースの値 (A=10) ではなく、「ベース」ワークスペースの A の初期値 (A=20) を使用するためです。

しかし、私は期待します

-0.1000

これは、関数のコードがスクリプトに含まれている場合に取得されます。

clear all
sys = 'watertank';
open(sys)
sys_io(1)   = linio('watertank/PID Controller',1,'input');
sys_io(2)   = linio('watertank/Water-Tank System',1,'openoutput');
A           = 10;
linsys      = linearize(sys,sys_io);
disp(linsys.a)

したがって、問題は次のとおりです。関数を使用して同じ結果を得るにはどうすればよいですか?

コマンドの場合sim、これはオプションを介して実行できます。

options = simset('SrcWorkspace','current');
sim('modelname',[],options)

ここを参照してください。ただし、線形化オプションで同様のものを見つけることができませんでした。

助けや提案をありがとう!

4

2 に答える 2