0001 function [TorF, vstr, rdate] = have_feature_ipopt()
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018 TorF = exist('ipopt', 'file') == 3;
0019 vstr = '';
0020 rdate = '';
0021 if TorF
0022 if have_feature('evalc')
0023 str = evalc('qps_ipopt([],[1; 1],[1 1],[2],[2],[1; 1],[1; 1],[1; 1],struct(''verbose'', 2))');
0024 pat = 'Ipopt version ([^\s,]+)';
0025 [s,e,tE,m,t] = regexp(str, pat);
0026 if ~isempty(t)
0027 vstr = t{1}{1};
0028 if vstr2num(vstr) >= 3.011 && ~exist('ipopt_auxdata', 'file')
0029 TorF = 0;
0030 warning('Improper installation of IPOPT. Version %s detected, but IPOPT_AUXDATA.M is missing.', vstr);
0031 end
0032 end
0033 else
0034 try
0035 x = feval('qps_ipopt', [],[1; 1],[1 1],[2],[2],[1; 1],[1; 1],[1; 1],struct('verbose', 0));
0036 if ~isequal(x, [1;1])
0037 TorF = 0;
0038 end
0039 catch
0040 TorF = 0;
0041 end
0042 end
0043 end
0044
0045 function num = vstr2num(vstr)
0046
0047
0048 pat = '\.?(\d+)';
0049 [s,e,tE,m,t] = regexp(vstr, pat);
0050 b = 1;
0051 num = 0;
0052 for k = 1:length(t)
0053 num = num + b * str2num(t{k}{1});
0054 b = b / 1000;
0055 end