注意事項
MATLAB/Simulink ファイルの更新について (2023/05/01)
第 1 刷を発刊したのが 2011 年 6 月ですから,それから 10 年以上が経過しました.本書を執筆した時点での最新バージョン R2010b で作成した MATLAB/Simulink ファイルのなかには,仕様の変更などにより,最新バージョンでは動かないものもあります.そこで,今回のホームページの移設作業に伴い,R2018a から現時点での最新バージョン R2023a でも動作するように更新しました!
配布する Simulink モデルのバージョンは 3 種類,用意しています.
R2023a …… ファイル名は "hoge_R2023a.slx"
R2020a …… ファイル名は "hoge_R2020a.slx"
R2018a …… ファイル名は "hoge_R2018a.slx"
ちなみに,以前は
R2020b …… ファイル名は "hoge_R2010b.mdl"
R2007b …… ファイル名は "hoge_R2007b.mdl"
R13SP1 …… ファイル名は "hoge_R13SP1.mdl"
を配布していました.M ファイルの中では,標準で
sim('hoge_R2018a')
% sim('hoge_R2020a')
% sim('hoge_R2023a')
のように記述しています(「%」はコメントアウトしていることを意味します).R2018a 以降であれば,そのままでも実行できるのですが,たとえば,R2019b を使用している場合は R2018a のファイルを,R2022b を使用している場合は R2020a のファイルを使用することができます.必要に応じて,適宜,「% をつける」(コメントアウトする)・「% を外す」の操作を行ってください.
バージョンアップに伴い対応したこと (2023/05/01)
関数 legend について
関数 legend の使用法を修正しました.
以前のバージョンでは,
plot(t,y1,t,y2)
legend('y1','y2',4)
のように入力すれば,凡例がグラフの右下に表示できましたが,最近のバージョンでは,
plot(t,y1,t,y2)
legend({'y1','y2'},'Location','southeast')
のように記述する必要があります.ほかにも,配置したい場所に応じて,south, southwest, north, northeast, northwest などと指定します.
関数 solve について (Symbolic Math Toolbox)
関数 solve の使用法を修正しました.
以前のバージョンでは,
syms x y
sol = solve(2*x+3*y-4, 5*x+6*y-7, 'x,y')
% sol = solve(2*x+3*y==4, 5*x+6*y==7, 'x,y')
という記述で解を求めることができましたが,最近のバージョンでは,
syms x y
sol = solve(2*x+3*y-4, 5*x+6*y-7, {x,y})
% sol = solve(2*x+3*y==4, 5*x+6*y==7, {x,y})
のように記述する必要があります.
Simulink ブロック Repeating Sequence について
p.137 の Simulink モデル "simulink_following_observer.slx" では,Simulink ブロック Repeating Sequence により矩形波を生成していましたが,最近のバージョンでは,同じ時刻で値を変化できなくなりました(たとえば 5 秒で値を 1 から 0 に変化させるなど).そこで,Simulink ブロック Repeating Sequence の代わりに Pulse Generator を使用するよう,修正しました.
Simulink ブロック to workspace について
Simulink ブロック to workspace を利用することで,信号をワークスペースに保存することができますが,R2019a 以降では,標準の設定ですべての信号が構造体にまとめられてしまうようになりました.本書では,Simulink のモデルコンフィギュレーションパラメータで
「単一のシミュレーション出力」のチェックを外す
ことで,R2018b 以前のように使用できます.
YALMIP における LMI (線形行列不等式) の記述について
たとえば,p.195 で示した M ファイル "LMI_multi_objective.m" のように,以前の YALMIP のバージョンでは,
M = A*X + B*F;
LMI = [];
LMI = [LMI, X > 0]; % X > 0
LMI = [LMI, M + M' < 0]; % M + M' < 0
のように,等号なしの LMI を記述することができました.しかし,最近のバージョンでは,
ep = 1e-5;
M = A*X + B*F;
LMI = [];
LMI = [LMI, X >= ep*eye(length(P))]; % X ≧ ep*I (> 0)
LMI = [LMI, M + M' <= -ep*eye(length(P))]; % M + M' ≦ -ep*I (< 0)
のように,十分小さな正数 ep を用いて,等号付きの LMI に置き換える必要があります.