funXor

PURPOSE ^

% Xor function

SYNOPSIS ^

function [p,dp] = funXor(xx)

DESCRIPTION ^

% Xor function
 L. LAURENT -- 28/02/2017 -- luc.laurent@lecnam.net

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

0001 %% Xor function
0002 % L. LAURENT -- 28/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(1,-1,1,-1,-1,1,1,-1,0.421134)=0.9597588
0025 %
0026 %Design space -9<xi<9
0027 
0028 function [p,dp] = funXor(xx)
0029 
0030 %evaluation and derivatives
0031 x1=xx(:,:,1);
0032 x2=xx(:,:,2);
0033 x3=xx(:,:,3);
0034 x4=xx(:,:,4);
0035 x5=xx(:,:,5);
0036 x6=xx(:,:,6);
0037 x7=xx(:,:,7);
0038 x8=xx(:,:,8);
0039 x9=xx(:,:,9);
0040 %
0041 p125=exp(-x1-x2-x5);
0042 p346=exp(-x3-x4-x6);
0043 p5=exp(-x5);
0044 p6=exp(-x6);
0045 p15=exp(-x1-x5);
0046 p36=exp(-x3-x6);
0047 p25=exp(-x2-x5);
0048 p46=exp(-x4-x6);
0049 %
0050 pae=exp(-x7./(1+p125)-x8./(1+p346)-x9);
0051 pa=1+pae;
0052 pbe=exp(-x7./(1+p5)-x8./(1+p6)-x9);
0053 pb=1+pbe;
0054 pce=exp(-x7./(1+p15)-x8./(1+p36)-x9);
0055 pc=1+pce;
0056 pcc=1-pc.^(-1);
0057 pde=exp(-x7./(1+p25)-x8./(1+p46)-x9);
0058 pd=1+pde;
0059 pdd=1-pd.^(-1);
0060 %
0061 p=1./pa.^2;%+1./pb.^2+pcc.^2+pdd.^2;
0062 p=pa.^2;
0063 if nargout==2
0064     dp=zeros(size(xx));
0065     %
0066     p125d1=-p125;
0067     p125d2=-p125;
0068     p125d5=-p125;
0069     %
0070     p346d3=-p346;
0071     p346d4=-p346;
0072     p346d6=-p346;
0073     %
0074     p5d=-p5;
0075     %
0076     p6d=-p6;
0077     %
0078     p15d1=-p15;
0079     p15d5=-p15;
0080     %
0081     p36d3=-p36;
0082     p36d6=-p36;
0083     %
0084     p25d2=-p25;
0085     p25d5=-p25;
0086     %
0087     p46d4=-p46;
0088     p46d6=-p46;
0089     %
0090     pad1=x7.*p125d1./(1+p125).^2.*pae.*pa;
0091     pad2=x7.*p125d2./(1+p125).^2.*pae;
0092     pad3=x8.*p346d3./(1+p346).^2.*pae;
0093     pad4=x8.*p346d4./(1+p346).^2.*pae;
0094     pad5=x7.*p125d5./(1+p125).^2.*pae;
0095     pad6=x8.*p346d6./(1+p346).^2.*pae;
0096     pad7=-pae./(1+p125);
0097     pad8=-pae./(1+p346);
0098     pad9=-pae;
0099     %
0100     pbd5=-x7.*p5d./(1+p5).^2.*pbe;
0101     pbd6=-x8.*p5d./(1+p6).^2.*pbe;
0102     pbd7=-pbe./(1+p5);
0103     pbd8=-pbe./(1+p6);
0104     pbd9=-pbe;
0105     %
0106     pcd1=-x7.*p15d1./(1+p15).^2.*pce;
0107     pcd3=-x8.*p36d3./(1+p36).^2.*pce;
0108     pcd5=-x7.*p15d5./(1+p15).^2.*pce;
0109     pcd6=-x8.*p36d6./(1+p36).^2.*pce;
0110     pcd7=-pce./(1+p15);
0111     pcd8=-pce./(1+p36);
0112     pcd9=-pce;
0113     %
0114     pccd1=pcd1./pcc.^2;
0115     pccd3=pcd3./pcc.^2;
0116     pccd5=pcd5./pcc.^2;
0117     pccd6=pcd6./pcc.^2;
0118     pccd7=pcd7./pcc.^2;
0119     pccd8=pcd8./pcc.^2;
0120     pccd9=pcd9./pcc.^2;
0121     %
0122     pdd2=-x7.*p25d2./(1+p25).^2.*pde;
0123     pdd4=-x8.*p46d4./(1+p46).^2.*pde;
0124     pdd5=-x7.*p25d5./(1+p25).^2.*pde;
0125     pdd6=-x8.*p46d6./(1+p46).^2.*pde;
0126     pdd7=-pce./(1+p25);
0127     pdd8=-pce./(1+p46);
0128     pdd9=-pce;
0129     %
0130     pddd2=pdd2./pcc.^2;
0131     pddd4=pdd4./pcc.^2;
0132     pddd5=pdd5./pcc.^2;
0133     pddd6=pdd6./pcc.^2;
0134     pddd7=pdd7./pcc.^2;
0135     pddd8=pdd8./pcc.^2;
0136     pddd9=pdd9./pcc.^2;
0137     %
0138         dp(:,:,1)=pad1;
0139     dp(:,:,2)=pad2;
0140     dp(:,:,3)=pad3;
0141     dp(:,:,4)=pad4;
0142     dp(:,:,5)=pad5;
0143     dp(:,:,6)=pad6;
0144     dp(:,:,7)=pad7;
0145     dp(:,:,8)=pad8;
0146     dp(:,:,9)=pad9;
0147 
0148 
0149 %     dp(:,:,1)=2.*pad1./pa.^3;%+2*pccd1.*pcc;
0150 %     dp(:,:,2)=2.*pad2./pa.^3;%+2*pddd2.*pdd;
0151 %     dp(:,:,3)=2.*pad3./pa.^3;%+2*pccd3.*pcc;
0152 %     dp(:,:,4)=2.*pad4./pa.^3;%+2*pddd4.*pdd;
0153 %     dp(:,:,5)=2.*pad5./pa.^3;%-2*pbd5./pb.^3+2*pccd5.*pcc+2*pddd5.*pdd;
0154 %     dp(:,:,6)=2.*pad6./pa.^3;%-2*pbd6./pb.^3+2*pccd6.*pcc+2*pddd6.*pdd;
0155 %     dp(:,:,7)=2.*pad7./pa.^3;%-2*pbd7./pb.^3+2*pccd7.*pcc+2*pddd7.*pdd;
0156 %     dp(:,:,8)=2.*pad8./pa.^3;%-2*pbd8./pb.^3+2*pccd8.*pcc+2*pddd8.*pdd;
0157 %     dp(:,:,9)=2.*pad9./pa.^3;%-2*pbd9./pb.^3+2*pccd9.*pcc+2*pddd9.*pdd;
0158 end
0159 end
0160

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