MATLAB ユーザーコミュニティー

MATLAB & Simulink ユーザーコミュニティー向け日本語ブログ

気になる R2022b 新機能

こんにちは,道家です.秋ですね.夜も気持ちよく眠れるようになりましたね.
秋といえば,先日待ちに待った R2022b がリリースされました!毎度行うリリースノートの熟読をしたところ,今回もありました.私が気になった新機能.これは,私の個人的な観点からの新機能紹介です.

新データ型:dictionary

すでに SNS でも話題に挙がっている dictionarycontainers.Map よりも高速にキーによる値のルックアップができる新しいデータ型です.
units = [“inch”, “feet”, “yard”, “mm”, “m”, “km”];
scale = [1/2.54, 1/2.54/12, 1/2.54/12/3, 10, 0.01, 0.00001];
fromCMto = dictionary(units,scale)
fromCMto =
6 個のエントリをもつ dictionary (string –> double):
“inch” –> 0.3937
“feet” –> 0.0328
“yard” –> 0.0109
“mm” –> 10
“m” –> 0.0100
“km” –> 1.0000e-05
dictionary 変数を作成すると,キーによるルックアップが簡単にできます.
height = 175; % cm
heightInFeet = height * fromCMto(“feet”)
heightInFeet = 5.7415
コマンド補完もちゃんとやってくれます.
dictionary 型についてはまた後日別の記事で詳しく紹介しますのでお楽しみに.

対話型コントロール:数値スピナー

数値スピナー?もうすでに “数値スライダー” があるじゃないか!
両方ほぼ同じ用途に活用できますが,スピナーだとマウスをそれほど動かさずにポチポチと変えられます.お好きな方をお選びください.
spinner.gif

コード アナライザー アプリ

コード アナライザー レポートがモダンになりました.検出された問題を種類またはファイルごとにに表示するか,エラーだけ表示する,など見やすくなりました.レポートは従来通りホームタブからも起動できますが,アプリタブからも起動できるようになりました.

codeIssues

コード アナライザー レポートのアップデートに加え,検出されたコードの問題をオブジェクトとして格納する codeIssues というコマンドが導入されました.
issues = codeIssues
issues =
codeIssues のプロパティ:

Date: 2022/09/27 00:00:46
Release: “R2022b”
Files: [6×1 string]
CodeAnalyzerConfiguration: “active”
Issues: [6×9 table]
SuppressedIssues: [0×10 table]

Issues table プレビュー

Location Severity Description CheckID LineStart LineEnd ColumnStart ColumnEnd FullFilename
_______________________ ________ ___________________________________________________________________________________ _______ _________ _______ ___________ _________ _____________________________________________
“doubleMassSpringFcn.m” warning “関数の引数ブロックの後で入力引数が使用されていない可能性があります。” INUSA 5 5 5 5 “C:\R2022b_NewFeatures\doubleMassSpringFcn.m”
“r2022bNewFeatures.mlx” info “出力を非表示にするには、(スクリプト内で) ステートメントの後にセミコロンを追加してください。” NOPTS 3 3 10 10 “C:\R2022b_NewFeatures\r2022bNewFeatures.mlx”
“r2022bNewFeatures.mlx” info “出力を非表示にするには、(スクリプト内で) ステートメントの後にセミコロンを追加してください。” NOPTS 5 5 14 14 “C:\R2022b_NewFeatures\r2022bNewFeatures.mlx”
“r2022bNewFeatures.mlx” info “出力を非表示にするには、(スクリプト内で) ステートメントの後にセミコロンを追加してください。” NOPTS 6 6 8 8 “C:\R2022b_NewFeatures\r2022bNewFeatures.mlx”
“twoDOF_livescript.mlx” warning “関数は使用されていない可能性があります。” DEFNU 77 77 17 22 “C:\R2022b_NewFeatures\twoDOF_livescript.mlx”
“twoDOF_livescript.mlx” warning “入力引数が使用されていない可能性があります。代わりに、引数を ~ に置き換えることを検討してください。” INUSD 77 77 24 24 “C:\R2022b_NewFeatures\twoDOF_livescript.mlx”

checkcode をもう少し使いやすくしたものですね.

出力引数の検証

R2019b に「入力引数の検証」という新機能が出たときにもブログ記事を書きましたが,今回はその姉妹機能「出力引数の検証」です.正直まだこの機能をフル活用できる自信はありませんが,関数の検証,デバッグのしやすさ,コードの読みやすさなどのメリットがあります.特に,ソフトウェア開発をしているとき,関数の入出力(インターフェース)をはっきり定義しておく必要があります.その仕様を引数の検証機能で定義することによって,入出力が期待通りになることを保障できます(つまり,仕様に反する入出力はエラーとなる).
簡単な例を見てみましょう.多項式の解は roots 関数で求められますが,実数の解の時のみ解が返され複素数の解の時はエラーが生成されるような関数を作成したいと思います.通常のエラーチェックを実装した関数はこんな感じになります.(簡単な例なので,これでも十分大丈夫だと思いますが...)
function r = realPolyRoots(p)
validateattributes(p,“double”,“vector”)
 
r = roots(p);
 
if ~isreal(r)
error(“複素数の解が含まれています”)
end
end
これを,入出力の検証を活用すると以下のようになります.
function r = realPolyRoots(p)
arguments (Input)
p double {mustBeVector}
end
arguments (Output)
r {mustBeReal}
end
r = roots(p);
end
関数の冒頭に入出力の条件が明確になっているというのが良いですね.更に条件が増えてくるとコード内で行うエラーチェックが複雑になってくるので,入出力の検証によってコードの可読性が向上します.どのようなエラーになるか見てみましょう.

ビルドツール

こちらは今後試してみたい機能.Build Tool を使うとソフトウェア開発のビルド工程を容易にしてくれます.ビルドの中で,先ほど紹介した codeIssues でコードに問題ないか確認したり,テスト フレームワークのユニット テストを実行したり,様々なタスクを順次に実行することができます.今や MATLAB は専門的なソフトウェア開発ツールとしても活用されるようになってます.

変数エディターでのスパークライン(MATLAB Online のみ)

最後に MATLAB Online からの新機能です.実は新機能の中には先にMATLAB Onlineで導入されるものがあります.R2022a のMATLAB Onlineで導入されたダークモードもその一つです.
このリリースから, table 型もしくは timetable 型のデータを変数エディターで開いたときにスパークラインとデータの概要情報が自動的に表示されます.スパークラインは対話的でマウスをかざすと値を確認することができます.
MLOnlineSparklines.gif

おわりに

いかがでしたでしょうか.今回は MATLAB の中の個人的に選んだ新機能紹介でしたが,MATLAB だけでもまだほんの一部の機能しか紹介できていません.私の興味分野の可視化・アプリ開発の新機能もまだまだたくさんあります.その他多くの Toolbox にも新機能が満載であり,Medical Imaging Toolbox のような新 Toolbox も出ました.是非,R2022b をエクスプロアしてみてください!

|
  • print

댓글

댓글을 남기려면 링크 를 클릭하여 MathWorks 계정에 로그인하거나 계정을 새로 만드십시오.