funLangermann5

PURPOSE ^

% Langermann 5 function

SYNOPSIS ^

function [p,dp]=funLangermann5(xx)

DESCRIPTION ^

% Langermann 5 function
L. LAURENT -- 17/11/2016 -- luc.laurent@lecnam.net

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

0001 %% Langermann 5 function
0002 %L. LAURENT -- 17/11/2016 -- 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 %
0025 %global minimum : f(x)=NaN for x=()
0026 %?1.08093846 (9.681,0.666)
0027 % 0.96499991 (8.074,8.777,3.467,1.863,6.707)
0028 %
0029 %Design space:0<xi<10
0030 
0031 
0032 function [p,dp]=funLangermann5(xx)
0033 %constants
0034 ma = [9.681 0.667 4.783 9.095 3.517 9.325 6.544 0.211 5.122 2.020;
0035 9.400 2.041 3.788 7.931 2.882 2.672 3.568 1.284 7.033 7.374;
0036 8.025 9.152 5.114 7.621 4.564 4.711 2.996 6.126 0.734 4.982;
0037 2.196 0.415 5.649 6.979 9.510 9.166 6.304 6.054 9.377 1.426;
0038 8.074 8.777 3.467 1.863 6.708 6.349 4.534 0.276 7.633 1.567;
0039 7.650 5.658 0.720 2.764 3.278 5.283 7.474 6.274 1.409 8.208;
0040 1.256 3.605 8.623 6.905 0.584 8.133 6.071 6.888 4.187 5.448;
0041 8.314 2.261 4.224 1.781 4.124 0.932 8.129 8.658 1.208 5.762;
0042 0.226 8.858 1.420 0.945 1.622 4.698 6.228 9.096 0.972 7.637;
0043 7.305 2.228 1.242 5.928 9.133 1.826 4.060 5.204 8.713 8.247;
0044 0.652 7.027 0.508 4.876 8.807 4.632 5.808 6.937 3.291 7.016;
0045 2.699 3.516 5.874 4.119 4.461 7.496 8.817 0.690 6.593 9.789;
0046 8.327 3.897 2.017 9.570 9.825 1.150 1.395 3.885 6.354 0.109;
0047 2.132 7.006 7.136 2.641 1.882 5.943 7.273 7.691 2.880 0.564;
0048 4.707 5.579 4.080 0.581 9.698 8.542 8.077 8.515 9.231 4.670;
0049 8.304 7.559 8.567 0.322 7.128 8.392 1.472 8.524 2.277 7.826;
0050 8.632 4.409 4.832 5.768 7.050 6.715 1.711 4.323 4.405 4.591;
0051 4.887 9.112 0.170 8.967 9.693 9.867 7.508 7.770 8.382 6.740;
0052 2.440 6.686 4.299 1.007 7.008 1.427 9.398 8.480 9.950 1.675;
0053 6.306 8.583 6.084 1.138 4.350 3.134 7.853 6.061 7.457 2.258;
0054 0.652 2.343 1.370 0.821 1.310 1.063 0.689 8.819 8.833 9.070;
0055 5.558 1.272 5.756 9.857 2.279 2.764 1.284 1.677 1.244 1.234;
0056 3.352 7.549 9.817 9.437 8.687 4.167 2.570 6.540 0.228 0.027;
0057 8.798 0.880 2.370 0.168 1.701 3.680 1.231 2.390 2.499 0.064;
0058 1.460 8.057 1.336 7.217 7.914 3.615 9.981 9.198 5.292 1.224;
0059 0.432 8.645 8.774 0.249 8.081 7.461 4.416 0.652 4.002 4.644;
0060 0.679 2.800 5.523 3.049 2.968 7.225 6.730 4.199 9.614 9.229;
0061 4.263 1.074 7.286 5.599 8.291 5.200 9.214 8.272 4.398 4.506;
0062 9.496 4.830 3.150 8.270 5.079 1.231 5.731 9.494 1.883 9.732;
0063 4.138 2.562 2.532 9.661 5.611 5.500 6.886 2.341 9.699 6.500]';
0064 
0065 
0066 mc = [0.806,0.517,0.100,0.908,0.965,0.669,0.524,0.902,0.531,...
0067     0.876,0.462,0.491,0.463,0.714,0.352,0.869,0.813,0.811,...
0068     0.828,0.964,0.789,0.360,0.369,0.992,0.332,0.817,0.632,...
0069     0.883,0.608,0.326];
0070 
0071 d=pi;
0072 m=5;
0073 
0074 %other version with m=numel(mc);
0075 
0076 
0077 %evaluation and derivatives
0078 sX=size(xx);
0079 dim=sX(3);
0080 p=zeros(sX(1),sX(2));
0081 for it=1:m
0082     vx=bsxfun(@minus,xx,reshape(ma(1:dim,it),1,1,dim)); 
0083     svx=sum(vx.^2,3);
0084     ex=exp(-1/d*svx);
0085     cx=cos(d*svx);
0086     cc=cx*mc(it);
0087     p=p-ex.*cc;
0088 end
0089 
0090 if nargout==2
0091     dp=zeros(sX);
0092     %
0093     for it=1:m
0094         vx=bsxfun(@minus,xx,reshape(ma(1:dim,it),1,1,dim)); 
0095         svx=sum(vx.^2,3);
0096         ex=exp(-1/d*svx);
0097         cx=cos(d*svx);
0098         cc=cx*mc(it);
0099         sx=sin(d*svx);
0100         cs=sx*mc(it);       
0101         pvx=vx.*ex;
0102         %
0103         for itD=1:dim
0104             dp(:,:,itD)=dp(:,:,itD)+(2/d*cc+2*d*cs).*pvx(:,:,itD);
0105         end
0106     end
0107 end
0108 end
0109 
0110

Generated on Tue 28-May-2019 16:00:34 by m2html © 2005