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

vle*_*lee 34 matlab

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

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

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

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

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

a = 

    feature: 'matlab'
       user: <username>

我希望有一个我可以访问的许多工具箱的列表.

试图通过尽早测试同事脚本来提出这个问题.不幸的是,它需要我目前缺乏的图像处理工具箱.一个有用的错误消息将节省时间来尝试诊断问题.现在我将在测试之前等待编译版本.

gno*_*ice 27

ver功能的一个缺点是它只告诉您安装了什么,而不是具有可用许可证的内容.可以安装工具箱而无需使用它(或者其他用户可以检出所有可用的许可证).更好的选择是license函数,(正如您所指出的)每个工具箱都需要一个唯一的"特征字符串".

这是从现已解散的新闻组线程中获取的各种工具箱的旧功能字符串列表(链接现已死亡):

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'};
Run Code Online (Sandbox Code Playgroud)

这涵盖了许多常见的,但并非详尽无遗,并且不包含新工具箱的功能字符串.对于所有MathWorks工具箱,似乎没有任何现成的当前要素字符串列表.我相信您可以在许可证文件中的"INCREMENT"行中找到它们,或者(如注释中提到的那样)您可以从给定工具箱中调用函数,然后使用license('inuse')从当前显示的工具箱列表中获取要素字符串正在使用.但是,上述两个选项都需要可用的许可证.

使用上面的功能字符串列表和功能license,您可以检查您拥有许可证使用的工具箱.以下代码检查上述整个列表的许可证:

index = cellfun(@(f) license('test', f), featureStr);
availableFeatures = featureStr(logical(index));
Run Code Online (Sandbox Code Playgroud)

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

index = cellfun(@(f) license('checkout', f), availableFeatures);
checkedOutFeatures = availableFeatures(logical(index));
Run Code Online (Sandbox Code Playgroud)

警告之词!:

正如Jason S在下面的评论中提到的那样,不管多久都要检查许可证是个坏主意,因为在你关闭MATLAB之前它们不会被发布.您应该只签出您知道的特定应用程序所需的许可证!通常,在您尝试使用给定工具箱中的函数之前,不会签出许可证.例如:

>> license('inuse')
matlab
>> gaussFilter = fspecial('gaussian');  % An Image Processing Toolbox function
>> license('inuse')
image_toolbox
matlab
Run Code Online (Sandbox Code Playgroud)

  • 请注意,检查许可证只是为了查看是否可以签出许可证是一件糟糕的事情,因为在MATLAB中,在您​​完全关闭MATLAB之前,许可证不会也不会被释放.这与共享许可并不"很好地"(特别是鉴于Mathworks对网络许可工具箱的定价不佳) (7认同)
  • (但是如果你需要在函数中使用该工具箱它应该没问题) (2认同)
  • @Jason:你是对的.检查许可证只是为了看你是否**是一件坏事.我只是建议在你实际需要*的情况下这样做,但我认为我没有明确指出这一点.我会澄清一下. (2认同)

Jon*_*nas 11

Ver似乎是要走的路,解析不应该那么难.让我们来看看:

function tf = areTheseToolboxesInstalled(requiredToolboxes)
%ARETHESETOOLBOXESINSTALLED takes a cell array of toolbox names and checks whether they are currently installed
% SYNOPSIS tf = areTheseToolboxesInstalled(requiredToolboxes)
%
% INPUT requiredToolboxes: cell array with toolbox names to test for. Eg. 
%        {'MATLAB','Image Processing Toolbox'}
%
% OUTPUT tf: true or false if the required toolboxes are installed or not
%%%%%%%%%%%%%%%%%%%%%%%%%%

% get all installed toolbox names
v = ver;
% collect the names in a cell array
[installedToolboxes{1:length(v)}] = deal(v.Name);

% check 
tf = all(ismember(requiredToolboxes,installedToolboxes));
Run Code Online (Sandbox Code Playgroud)

顺便说一句,如果你需要检查版本,verLessThan是你的朋友.


tdc*_*tdc 7

我知道这是一个非常古老的问题,但一个非常简单的答案实际上是在问题中(解析ver的输出)....

>> v = ver;
>> setdiff({v.Name}, 'MATLAB')'

ans = 

    'Aerospace Blockset'
    'Aerospace Toolbox'
    'Bioinformatics Toolbox'
    'Communications System Toolbox'
    'Computer Vision System Toolbox'
    'Control System Toolbox'
    'Conversion to SeDuMi'
    'Curve Fitting Toolbox'
    'DSP System Toolbox'
    'Database Toolbox'
    'Datafeed Toolbox'
    'Econometrics Toolbox'
    'Embedded Coder'
    'Financial Derivatives Toolbox'
    'Financial Toolbox'
    'Fixed-Income Toolbox'
    'Fixed-Point Toolbox'
    'Fuzzy Logic Toolbox'
    'Global Optimization Toolbox'
    'Image Acquisition Toolbox'
    'Image Processing Toolbox'
    'Instrument Control Toolbox'
    'MATLAB Coder'
    'MATLAB Distributed Computing Server'
    'MATLAB Report Generator'
    'Mapping Toolbox'
    'Model Predictive Control Toolbox'
    'Neural Network Toolbox'
    'Optimization Toolbox'
    'Parallel Computing Toolbox'
    'Partial Differential Equation Toolbox'
    'Phased Array System Toolbox'
    'RF Toolbox'
    'Robust Control Toolbox'
    'Signal Processing Toolbox'
    'SimBiology'
    'SimDriveline'
    'SimElectronics'
    'SimEvents'
    'SimHydraulics'
    'SimMechanics'
    'SimPowerSystems'
    'SimRF'
    'Simscape'
    'Simulink'
    'Simulink 3D Animation'
    'Simulink Coder'
    'Simulink Control Design'
    'Simulink Design Optimization'
    'Simulink Fixed Point'
    'Simulink Report Generator'
    'Simulink Verification and Validation'
    'Stateflow'
    'Statistical Graphics Toolbox'
    'Statistical Parametric Mapping'
    'Statistics Toolbox'
    'Symbolic Math Toolbox'
    'System Identification Toolbox'
    'SystemTest'
    'Wavelet Toolbox'
Run Code Online (Sandbox Code Playgroud)