% Tripod function L. LAURENT -- 24/02/2017 -- luc.laurent@lecnam.net
0001 %% Tripod function 0002 % L. LAURENT -- 24/02/2017 -- luc.laurent@lecnam.net 0003 0004 % sources available here: 0005 % https://bitbucket.org/luclaurent/optigtest/ 0006 % https://github.com/luclaurent/optigtest/ 0007 0008 % optiGTest - set of testing functions A toolbox to easy manipulate functions. 0009 % Copyright (C) 2017 Luc LAURENT <luc.laurent@lecnam.net> 0010 % 0011 % This program is free software: you can redistribute it and/or modify 0012 % it under the terms of the GNU General Public License as published by 0013 % the Free Software Foundation, either version 3 of the License, or 0014 % (at your option) any later version. 0015 % 0016 % This program is distributed in the hope that it will be useful, 0017 % but WITHOUT ANY WARRANTY; without even the implied warranty of 0018 % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 0019 % GNU General Public License for more details. 0020 % 0021 % You should have received a copy of the GNU General Public License 0022 % along with this program. If not, see <http://www.gnu.org/licenses/>. 0023 0024 %1 minimum global: f(0,-50)=0 0025 % 0026 %Design space -100<xi<100 0027 0028 0029 function [p,dp] = funTripod(xx) 0030 0031 %constants 0032 a=1; 0033 b=50; 0034 c=2; 0035 0036 %evaluation and derivatives 0037 x=xx(:,:,1); 0038 y=xx(:,:,2); 0039 % 0040 pX=ps(x); 0041 pY=ps(y); 0042 % 0043 pa=pY.*(a+pX); 0044 pb=x+b*pY.*(a-c*pX); 0045 pc=y+b*(a-c*pY); 0046 % 0047 p=pa+abs(pb)+abs(pc); 0048 0049 if nargout==2 0050 % 0051 dp=zeros(size(xx)); 0052 % 0053 dpX=dps(x); 0054 dpY=dps(y); 0055 % 0056 dp(:,:,1)=pY.*dpX+sign(pb).*(1-b*c*pY.*dpX); 0057 dp(:,:,2)=(a+pX).*dpY ... 0058 +b*sign(pb).*dpY.*(a-c*pX) ... 0059 +sign(pc).*(1-b*c*dpY); 0060 end 0061 end 0062 0063 function ev=ps(x) 0064 ev=ones(size(x)); 0065 IX=(x<0); 0066 ev(IX)=0; 0067 end 0068 0069 function ev=dps(x) 0070 ev=zeros(size(x)); 0071 IX=(x==0); 0072 ev(IX)=1/eps; 0073 end