Run in your browser で試してみよう!
このブログのコードを実際にブラウザー上で実行することが出来ます。
この記事の終りに「Run in your browser」というボタンがありますが、これをクリックするとこの記事がライブ スクリプトとしてブラウザー上のMATLABで開きます。実際に実行してみて体験してみてください。※スマホのブラウザーには対応していません。パソコン上のChromeでお試しください。
Name=Value 構文
やはり、最初に取り上げたいのは、プロパティーを定義する新しい構文 Name=Value です。新しい関数は毎リリースたくさんありますが、新しい構文というのは珍しいです。
他の言語で目にしたことのある構文かもしれませんが、MATLABでは新鮮ですね。特に設定するプロパティーが多い場合、可読性が上がります。もちろん、今までの "Name", Value 構文はそのまま使えます。参考までに、従来の構文はコメントとして残しています。
plot((1:10)+randn(1,10), ...
Marker = "o", ... % "Marker", "o", ...
MarkerSize = 10, ... % "MarkerSize", 10, ...
MarkerFaceColor = "red", ... % "MarkerFaceColor", "red", ...
MarkerEdgeColor = "black", ... % "MarkerEdgeColor", "black", ...
LineStyle = "-.", ... % "LineStyle", "-.", ...
LineWidth = 2) % "LineWidth, 2)
アニメーション再生
次は、ライブ エディター内のお気に入り機能の一つです。
ライブ エディターの中で for ループなどを使ったアニメーションを表示するのは前からできましたが、R2021aではそのアニメーションを再生することができる様になりました。つまり、アニメーションのコードを再実行する必要がなくなったのです。
ここでは跳ねるボールをシミュレーションしてみました。ご覧の通り、コードを実行したあと、再生ボタンが表示されます。再生速度も調整可能です。"Run in your browser" で是非試してみてください。
init_cond = [0 2 0 10]; % [x0 vx0 y0 vy0]
opt = odeset(Events = @(t,y) hitEvent(t,y,XLimits));
[t,y,~,~,ie] = ode45(@projectile,0:0.05:5,init_cond,opt);
[T,X,Y] = appendData(T,X,Y,t,y);
init_cond = calcNewInit(y,init_cond,ie);
h2 = animatedline(X(1),Y(1),MaximumNumPoints = 20);
axis([min(X) max(X) min(Y) max(Y)])
addpoints(h2,X(id-1:id),Y(id-1:id));
ライブ エディターのフォントをプログラムで変更
少しマニアックな機能ですが、ライブ エディターで使われているフォントをプログラムで変更できるようになりました。
実は2018年ころからプログラムでMATLABのフォント(codefontなど)を変更することが可能になりました。今回はライブ エディターのフォントもいじれるようになったという事です。
例えば、見出し1のフォント カラーとサイズを変えるには
s.matlab.fonts.editor.heading1.Color.PersonalValue = [0 0 255 1];
s.matlab.fonts.editor.heading1.Size.PersonalValue = 25;
元に戻すには
s.matlab.fonts.editor.heading1.Color.clearPersonalValue
s.matlab.fonts.editor.heading1.Size.clearPersonalValue
uilabel でHTMLマークアップ
ちょっと地味目の新機能ですが、ラベル(uilabel)のテキストで HTML マークアップが使える様になりました。私個人的には HTML の方がいろいろカスタマイズしやすいので気に入っています。uilabel は uifigure でしか使えないのでご注意。figure では使えません。これを機に uifigure に移行してみませんか?
"プロットの作成" ライブ エディター タスク
- "どんな可視化がベストなのか分からない"
- "どのオプションをいじれば良いのか分からない"
という場合は試してみてください。
tick label の自動回転
tick labelの角度は xtickangle や ytickangle で指定できることを知っている方はいるかもしれません。これは、ラベルが重ならないように角度をつけるためですが、 R2021a ではラベルの角度を自動的に調整してくれます。しかも、figure のサイズをマウスで変更した時もリアルタイムで調整してくれます。
Class Diagram Viewer
MATLAB でオブジェクト指向プログラミングをされている方にとっては必見です。クラス実装の詳細、メソッドやプロパティの属性、スーパークラスやサブクラスの関係性などについて可視化したいと思ったことありませんか?複数のメンバーとソフトウェア開発を行っている場合は、この様な情報の共有は必須となります。Class Diagram Viewer では、クラスの詳細を可視化することができます。
おわりに
以上、R2021aの個人的な一押しMATLAB新機能でした。
でも実は、R2021aには今回紹介した物の10倍以上の数の新機能があります。私は毎回リリースノートを読むのを楽しみにしています。皆さんも読書リストにMATLAB リリースノートを追加してみては如何でしょう。
補助関数
放物運動の ode 関数
function dYdt = projectile(t,Y)
地面や壁に当たったイベントを検出するためのイベント関数
function [position,isterminal,direction] = hitEvent(t,Y,xlimits)
position = [Y(3);Y(1)-xlimits(1);Y(1)-xlimits(2)];
シミュレーション結果を集約するための関数
function [T,X,Y] = appendData(T,X,Y,t,y)
新しい初期値を計算するための関数
function init_cond = calcNewInit(y,init_cond,ie)
if isempty(ie) % イベント検出しなかった。地面や壁に当たらなかった
init_cond = [y(end,1) init_cond(2) y(end,3) -y(end,4)*0.9];
elseif ie == 2 || ie == 3 % 壁に当たった
init_cond = [y(end,1) -init_cond(2) y(end,3) y(end,4)];
Comments
To leave a comment, please click here to sign in to your MathWorks Account or create a new one.