2010-01-13 298 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中。