2010-01-13 141 views
32

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

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

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

而且,当我跑license('inuse'),我只收到如下:

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

a = 

    feature: 'matlab' 
     user: <username> 

我希望为众多工具箱我访问的列表。

此问题是由于尝试尽早测试同事脚本而提示的。不幸的是,它需要我目前缺乏的图像处理工具箱。一个有用的错误信息会节省时间来尝试诊断问题。现在,我将在测试之前等待编译版本。

回答

26

一个缺点VER功能是,它只是告诉你什么是安装,不是有一个可用许可证。可以安装工具箱,并且无需使用许可证(或者其他用户可以检出所有可用的许可证)。更好的选择是LICENSE函数,如您所指出的那样,每个工具箱都需要一个唯一的“特征字符串”。

有各种工具箱功能串上this 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'}; 

使用这个列表和功能LICENSE,您可以检查哪些的工具箱,你必须使用许可证。对于上述整个列表许可证下面的代码检查:

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

不过,上述只是确认许可证存在,不在于它可以检出。许可证可能已过期,或者所有可用的许可证都可能被其他用户检出。为了确保您能够使用可用的工具箱,您实际上可以尝试检查您需要的许可证并进行测试,以确定您是否成功。下面的代码试图签出许可证上面找到的所有可用的工具箱:

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

注:

正如Jason S在下面评论中提到,这是一个坏主意,签出许可证willy-因为它们在你关闭MATLAB之前不会被释放。 你应该只检查你知道你将需要一个给定的应用程序的许可证!通常情况下,只有在尝试使用给定工具箱中的功能时,才会检出许可证。例如:

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

我想最好的方法是使用ver和license命令。这样,您可以通知用户他们是否完全没有工具箱,或者他们是否只需等待/尖叫,直到许可证可用。 – Jonas 2010-01-14 01:59:41

+6

请注意,查看许可证只是为了查看许可证是否是一个**错误的事情,因为在MATLAB中,许可证不会在您完全关闭MATLAB之前发布。这与共享许可(特别是考虑到Mathworks对网络许可工具箱的低价格)不会“很好地发挥” – 2010-01-14 12:46:14

+2

(但是,如果您需要在该功能中使用该工具箱,那么应该没问题) – 2010-01-14 12:47:22

2

一个快速的方法是列出工具箱目录的内容:使用该名单

l = ls(toolboxdir('')) 

(不含少数目录:共享,地方),你可以找到安装使用ver工具箱的版本:

v = ver('nnet') 

为基准,这里的工具箱目录名我有一个列表:

bioinfo 
curvefit 
database 
gads  
ident 
images 
nnet  
optim 
pde  
signal 
stats 
wavelet 
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)); 

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

+0

感谢您指出verLessThan。 – vlee 2010-01-14 20:17:03

+0

感谢代码! – sum1stolemyname 2013-03-04 09:14:54

1

一个实用的办法是用try somefunction catch语句,其中somefunction是唯一你需要的工具箱开始你的代码。

somefunction可能由于多种原因失败,例如缺少可用许可证或工具箱未安装在系统上。 try/catch允许您正常放弃,并为用户提供有意义的信息,以确定为什么无法执行请求的操作(现在)。

缺点是这是一个不太通用的方法。它缺乏优雅,它对命名空间错误很敏感。好处是它测试somefunction实际上是否工作。如果它被明智地使用,它应该只在你真正需要时才抓住共享许可证。

7

我知道这是一个很老的问题,而是一个非常简单的答案居然是在问题(解析版本的输出)....

>> 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' 
+1

最简单的方法来做到这一点。没有过度复杂的功能,解析和其他不... – rbaleksandar 2015-07-17 21:35:20

3

只需键入ver将显示的完整列表工具箱安装在你的matlab中。