LoginSignup
15
12

どのToolboxがいるの?って言われたときのMATLAB術

Last updated at Posted at 2024-05-26

目次

はじめに
関数のリンク先
コードの中身について
概要
関数の定義と説明
関数のドキュメント
入力処理
ツールボックスの特定
まとめ
注意点
おわりに

はじめに

こんにちは、HerniaBabyです。
皆さん、こんなことないですか?
せっかく作ったMATLABコードを他の人に渡すとき、先方にこんなセリフを吐かれてしまうなんてこと…

「必要なToolboxしか入れたくないんだけど?どれがいるん?」

今回はそんなワガママベイビーな方々の要望にかなえる関数を作成しました。

関数のリンク先

File Exchangeにも掲載中です。

View findRequiredToolboxes on File Exchange

GitHub Link :findRequiredToolboxes

コードの中身について

ChatGPTに説明させます笑

概要

このMATLABコードは、指定されたMATLABスクリプトや関数ファイルに必要なツールボックスを特定するための関数findRequiredToolboxesを定義しています。

この関数は、.m.mlx、および.slxファイルタイプに対応しています。以下にコードの詳細な説明を示します。

関数の定義と説明

function requiredToolboxes = findRequiredToolboxes(scriptPath)
  • findRequiredToolboxes は関数名です。
  • scriptPath は入力引数で、MATLABスクリプトや関数のファイルパスを表します。
  • requiredToolboxes は出力で、必要なツールボックスのリストが入ります。

関数のドキュメント

    % findRequiredToolboxes - 指定されたMATLABスクリプトや関数に必要なツールボックスを特定します。
    % 
    % Syntax: requiredToolboxes = findRequiredToolboxes(scriptPath)
    % 
    % Inputs:
    %    scriptPath - 必要なツールボックスを特定したいMATLABスクリプトや関数のファイルパス
    % 
    % Outputs:
    %    requiredToolboxes - 必要なツールボックスのリスト
  • この部分では、関数の簡単な説明、構文、入力、および出力について説明しています。

入力処理

switch nargin
    case 0
        [file,path] = uigetfile( ...
            {'*.m;*.mlx;*.slx', ...
            'MATLAB Files (*.m,*.mlx,*.slx)'; ...
            '*.*',  'All Files (*.*)'},'Select a file');
        if isequal(file,0)
            disp('User selected Cancel');
            msg = 'You need to select a file.';
            error(msg)
        else
            path = fullfile(path,file);
        end
    case 1
        path = scriptPath;
end
  • ここでは、入力引数scriptPathの処理を行っています。
  • 入力引数が提供されていない場合 (nargin == 0)、ファイル選択ダイアログ (uigetfile) がユーザーに表示されます。
    • ユーザーがファイル選択をキャンセルした場合、エラーメッセージが表示されます。
    • ファイルが選択された場合、そのフルパスが構築されます。
  • 入力引数が提供されている場合 (nargin == 1)、pathscriptPathに設定されます。

ツールボックスの特定

[~,~,ext] = fileparts(path);
if ext == ".slx"
    sList = dependencies.toolboxDependencyAnalysis(path);
    reqiredToolboxes = string(sList)';
else
    [~, pList] = matlab.codetools.requiredFilesAndProducts(path);
    Tbox = string({pList.Name}');
    Certain = cell2mat({pList.Certain}');
    reqiredToolboxes = Tbox(Certain);
end
  • 次に、指定されたファイルの拡張子をfilepartsを使って取得します。
  • ファイルがSimulinkモデル(.slx)の場合:
    • dependencies.toolboxDependencyAnalysis(path) を使って必要なツールボックスを特定します。
    • 結果を文字列配列に変換し、転置します。
  • ファイルがMATLABスクリプトや関数(****.m または .mlx****)の場合:
    • matlab.codetools.requiredFilesAndProducts(path) を使って必要なファイルと製品を特定します。
    • 製品名を文字列配列 Tbox に抽出します。
    • Certain フラグが真のツールボックスのみを最終リスト requiredToolboxes に含めます。

まとめ

  • findRequiredToolboxes 関数は、MATLABスクリプト、関数、またはSimulinkモデルに必要なツールボックスを特定するのに役立ちます。
  • ファイルパスを直接入力するか、GUIダイアログを使用して選択する柔軟性があります。
  • 異なるファイルタイプ(.m.mlx.slx)に適切に対応し、必要なツールボックスを特定します。

注意点

試行段階で気づいたんですが、スクリプトの中に関数を入れるとSimulinkが追加されます。

SampleScriptの中身と結果

clc, clear;
disp('This is Sample Code')
txt = findRequiredToolboxes(fullfile(pwd,"SampleScript.m"));
fprintf('This code needs %s \n',txt)

出力

This is Sample Code
This code needs MATLAB 
This code needs Simulink 

おわりに

ChatGPTすげえ…笑

15
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
12