matlab - 如何检查脚本/函数中已安装的 MATLAB 工具箱?

标签 matlab

如何在脚本/函数中检查已安装的 MATLAB 工具箱? (检查工具箱版本也很好!)当有人试图在没有所需工具箱的情况下运行脚本时,这可以提供快速且有用的错误消息。

想到的一个快速但粗略的解决方案是解析 ver 的文本输出。命令。我想知道是否有更好的方法。

一些快速搜索显示 ver productlicense带有 'test' 参数的函数可能有用,但我找不到工具箱名称(即 'Image Processing Toolbox')到产品名称(即。 'control') 或功能名称(即 image_toolbox)。

此外,当我运行 license('inuse') 时,我只收到以下内容:

>> a = license('inuse'); a

a = 

    feature: 'matlab'
       user: <username>

我希望得到一个我可以访问的许多工具箱的列表。

这个问题是通过尝试尽早测试同事脚本而提出的。不幸的是,它需要我目前缺少的图像处理工具箱。一条有用的错误消息可以节省诊断问题的时间。现在我将等待编译版本,然后再进行测试。

最佳答案

ver 的一个缺点功能是它只告诉您什么是安装,而不是什么有可用许可证。可能安装了工具箱但没有使用它的许可证(或者其他用户可以 checkout 所有可用许可证)。更好的选择是 license功能,(正如您所指出的)需要一个独特的 "feature string"对于每个工具箱。

这是从现在已不存在的 newsgroup thread 中获取的各种工具箱的功能字符串的旧列表。 (链接现已失效):

featureStr = {'Aerospace_Blockset'; ...
              'Aerospace_Toolbox'; ...
              'Bioinformatics_Toolbox'; ...
              'Communication_Blocks'; ...
              'Communication_Toolbox'; ...
              'Compiler'; ...
              'Control_Toolbox'; ...
              'Curve_Fitting_Toolbox'; ...
              'Data_Acq_Toolbox'; ...
              'Database_Toolbox'; ...
              'Datafeed_Toolbox'; ...
              'Dial_and_Gauge_Blocks'; ...
              'Distrib_Computing_Toolbox'; ...
              'Econometrics_Toolbox'; ...
              'EDA_Simulator_Link_DS'; ...
              'Embedded_Target_c166'; ...
              'Embedded_Target_c2000'; ...
              'Embedded_Target_c6000'; ...
              'Embedded_Target_MPC555'; ...
              'Excel_Link'; ...
              'Filter_Design_HDL_Coder'; ...
              'Filter_Design_Toolbox'; ...
              'Fin_Derivatives_Toolbox'; ...
              'Financial_Toolbox'; ...
              'Fixed_Income_Toolbox'; ...
              'Fixed_Point_Toolbox'; ...
              'Fixed-Point_Blocks'; ...
              'Fuzzy_Toolbox'; ...
              'GADS_Toolbox'; ...
              'IDE_Link_MU'; ...
              'Identification_Toolbox'; ...
              'Image_Acquisition_Toolbox'; ...
              'Image_Toolbox'; ...
              'Instr_Control_Toolbox'; ...
              'Link_for_Incisive'; ...
              'Link_for_ModelSim'; ...
              'Link_for_Tasking'; ...
              'Link_for_VisualDSP'; ...
              'MAP_Toolbox'; ...
              'MATLAB'; ...
              'MATLAB_Builder_for_dot_Net'; ...
              'MATLAB_Builder_for_Java'; ...
              'MATLAB_Distrib_Comp_Engine'; ...
              'MATLAB_Excel_Builder'; ...
              'MATLAB_Link_for_CCS'; ...
              'MATLAB_Report_Gen'; ...
              'MBC_Toolbox'; ...
              'MPC_Toolbox'; ...
              'NCD_Toolbox'; ...
              'Neural_Network_Toolbox'; ...
              'OPC_Toolbox'; ...
              'Optimization_Toolbox'; ...
              'PDE_Toolbox'; ...
              'Power_System_Blocks'; ...
              'Real-Time_Win_Target'; ...
              'Real-Time_Workshop'; ...
              'RF_Blockset'; ...
              'RF_Toolbox'; ...
              'Robust_Toolbox'; ...
              'RTW_Embedded_Coder'; ...
              'Signal_Blocks'; ...
              'Signal_Toolbox'; ...
              'SimBiology'; ...
              'SimDriveline'; ...
              'SimElectronics'; ...
              'SimEvents'; ...
              'SimHydraulics'; ...
              'SimMechanics'; ...
              'Simscape'; ...
              'SIMULINK'; ...
              'Simulink_Control_Design'; ...
              'Simulink_Design_Verifier'; ...
              'Simulink_HDL_Coder'; ...
              'Simulink_Param_Estimation'; ...
              'SIMULINK_Report_Gen'; ...
              'SL_Verification_Validation'; ...
              'Spline_Toolbox'; ...
              'Stateflow'; ...
              'Stateflow_Coder'; ...
              'Statistics_Toolbox'; ...
              'Symbolic_Toolbox'; ...
              'SystemTest'; ...
              'Video_and_Image_Blockset'; ...
              'Virtual_Reality_Toolbox'; ...
              'Wavelet_Toolbox'; ...
              'XPC_Embedded_Option'; ...
              'XPC_Target'};

这涵盖了许多常见的,但并不详尽,也不包括较新工具箱的功能字符串。对于所有 MathWorks 工具箱,似乎没有任何现成的当前特征字符串列表。我相信您可以在许可证文件的“INCREMENT”行中找到它们,或者(as vlee mentions in a comment)您可以从给定的工具箱中调用一个函数,然后使用 license('inuse') 来获取当前正在使用的工具箱显示列表中的特征字符串。但是,上述两个选项都已经需要可用的许可证。

使用上面的特征字符串列表和函数 license ,您可以检查您有使用许可的工具箱。以下代码检查上面整个列表的许可证:

index = cellfun(@(f) license('test', f), featureStr);
availableFeatures = featureStr(logical(index));

但是,上面只是确认许可证存在,而不是可以check out。许可证可能已过期或所有可用许可证可能已被其他用户 checkout 。为了绝对确定您将能够使用可用的工具箱,您实际上可以尝试 checkout 所需工具箱的许可证并进行测试以查看是否成功。以下代码尝试检查上面找到的所有可用工具箱的许可证:

index = cellfun(@(f) license('checkout', f), availableFeatures);
checkedOutFeatures = availableFeatures(logical(index));

警告词!

As Jason S mentions in a comment below , 随意检查许可证是个坏主意,因为在您关闭 MATLAB 之前它们不会被释放。 您应该只 checkout 您知道给定应用程序需要的许可证!通常,在您尝试使用给定工具箱中的功能之前,不会 checkout 许可证。例如:

>> license('inuse')
matlab
>> gaussFilter = fspecial('gaussian');  % An Image Processing Toolbox function
>> license('inuse')
image_toolbox
matlab

关于matlab - 如何检查脚本/函数中已安装的 MATLAB 工具箱?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2060382/

相关文章:

matlab - 检查矩阵是否是Matlab中的单位矩阵

matlab - 如何从 MATLAB 中的 .fig 文件中提取数据?

matlab - 填充曲线下的边界区域

matlab - 构造由基矩阵的不同幂组成的 block 矩阵

python - Matlab 到 Matplotlib

image - 使用预定义点在 MATLAB 中叠加图像

python - 如何在 Python 中仅在特定点进行平滑样条插值设置导数?

Matlab 模特定行为

向量/一维数组的 MATLAB 索引约定

matlab - 在不使用内置函数的情况下在 matlab 中进行互相关?