如何在脚本/函数中检查已安装的 MATLAB 工具箱? (检查工具箱版本也很好!)当有人试图在没有所需工具箱的情况下运行脚本时,这可以提供快速且有用的错误消息。
想到的一个快速但粗略的解决方案是解析 ver
的文本输出。命令。我想知道是否有更好的方法。
一些快速搜索显示 ver product
或 license
带有 '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/