How would one check for installed MATLAB toolboxes in a script/function? (checking toolbox versions would also be good!) This could provide a quick and useful error message when someone attempts to run a script without a required toolbox.
A quick, albeit rough, solution that comes to mind is parsing the text output of the ver
command. I wonder if there's a better way.
Some quick searching revealed ver product
or the license
function with the 'test'
argument may be useful, but I could not find a mapping of toolbox names (ie. 'Image Processing Toolbox'
) to product names (ie. 'control'
) or feature names (ie. image_toolbox
).
Furthermore, when I ran license('inuse')
, I only received the following:
>> a = license('inuse'); a a = feature: 'matlab' user: <username>
I hoped for a list of the many toolboxes I have access to.
This question was prompted by trying to test a co-workers script early. Unfortunately, it required the Image Processing Toolbox, which I currently lack. A useful error message would've saved time trying to diagnose the problem. Now I'll wait for a compiled version before testing it.
In MATLAB, go to the Home tab. 2. Select Add-Ons > Manage Add-Ons. MATLAB displays a list of MathWorks products, toolboxes, and add-ons installed on your machine.
To view and manage installed add-ons, go to the Home tab and select Add-Ons > Manage Add-Ons. The Add-On Manager displays all add-ons that are installed in the add-ons installation folder, as well as MATLAB products and hardware support packages.
One drawback to the ver
function is that it only tells you what's installed, not what has an available license. It's possible to have a toolbox installed and no license to use it (or all the available licenses could be checked out by other users). A better choice is the license
function, which (as you pointed out) requires a unique "feature string" for each toolbox.
Here's an older list of feature strings for various toolboxes taken from a now-defunct newsgroup thread (link is now dead):
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'};
This covers many of the common ones, but isn't exhaustive and doesn't include feature strings for newer toolboxes. There doesn't appear to be any readily-available list of current feature strings for all MathWorks toolboxes. I believe you can find them on the "INCREMENT" lines in a license file, or (as vlee mentions in a comment) you can call a function from a given toolbox and then use license('inuse')
to get the feature string from the displayed list of toolboxes currently being used. However, both of the above options require an available license already.
Using the above list of feature strings and the function license
, you can check which toolboxes you have a license to use. The following code checks for licenses for the entire list above:
index = cellfun(@(f) license('test', f), featureStr); availableFeatures = featureStr(logical(index));
However, the above just confirms that the license exists, not that it can be checked out. The license could have expired or all the available licenses could be checked out by other users. To be absolutely certain that you will be able to use the available toolboxes, you can actually try to check out a license for the ones you need and test to see if you were successful. The following code attempts to check out a license for all the available toolboxes found above:
index = cellfun(@(f) license('checkout', f), availableFeatures); checkedOutFeatures = availableFeatures(logical(index));
WORD OF WARNING!:
As Jason S mentions in a comment below, it's a bad idea to check out licenses willy-nilly, since they won't be released until you close MATLAB. You should only check out a license that you know you will need for a given application! Normally, licenses aren't checked out until you try to use a function from a given toolbox. For example:
>> license('inuse') matlab >> gaussFilter = fspecial('gaussian'); % An Image Processing Toolbox function >> license('inuse') image_toolbox matlab
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With