Matlabのソースワークスペースを定義し、関数内で使用すると「線形化」する方法はありますか?MATLABのソースワークスペースを 'linearize'に変更するにはどうしたらいいですか?
ここ短い最小実施例:
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
linearize
が中Aのinital値を使用するため、出力が
あります'現在の'作業領域(A = 10)の値ではなく、 'ベース'作業領域(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)
はhereを参照してください。 しかし、私は線形化のオプションで同様のものを見つけることができませんでした。
ご協力いただきありがとうございます。
ご意見ありがとうございます。しかし、ベースワークスペースの変数を変更することは、私がその関数によって避けたいものです。 simコマンドでも可能なので、linearizeコマンドの解決策もあります。 –
私は、関数呼び出しの前にベースワークスペースに存在する変数 'A 'を保存して復元する回避策を含んでいました。洗練されたソリューションではありませんが、仕事をしています。たぶん(うまくいけば!)誰かがこれを行う組み込みの、簡単な方法を思い付く - 私は本当にこの解決策が嫌いです。 – hbaderts
ありがとうございました!しかし、もう一度:問題は、現在のワークスペースに変更する方法であり、ベースワークスペースをどのように操作するかではありません.-)誰かが考えてくれることを願っています。 –