0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029 function [p,dp,infos] = funDixon(xx,dim)
0030
0031 dem=false;
0032 if nargin==0
0033 pas=50;
0034 borne=10;
0035 [x,y]=meshgrid(linspace(-borne,borne,pas));
0036 xx=zeros(pas,pas,2);
0037 xx(:,:,1)=x;xx(:,:,2)=y;
0038 dem=true;
0039 end
0040 if ~isempty(xx)
0041
0042 nbvar=size(xx,3);
0043
0044 if nbvar==1
0045 error(['Wrong input variables ',mfilename]);
0046 else
0047 p=(xx(:,:,1)-1).^2;
0048 for iter=2:nbvar
0049 p=p+iter*(2*xx(:,:,iter).^2-xx(:,:,iter-1)).^2;
0050 end
0051
0052 if nargout==2||dem
0053 dp=zeros(size(xx));
0054 for iter=1:nbvar
0055 if iter==1
0056 dp(:,:,iter)=2*(xx(:,:,iter)-1)-4*(2*xx(:,:,iter+1).^2-xx(:,:,iter));
0057 elseif iter==nbvar
0058 dp(:,:,iter)=iter*8*xx(:,:,iter).*(2*xx(:,:,iter).^2-xx(:,:,iter-1));
0059 else
0060 dp(:,:,iter)=iter*8*xx(:,:,iter).*(2*xx(:,:,iter).^2-xx(:,:,iter-1))...
0061 -2*iter*(2*xx(:,:,iter+1).^2-xx(:,:,iter));
0062
0063 end
0064 end
0065 end
0066
0067 end
0068 else
0069 if nargin==2
0070 nbvar=dim;
0071 end
0072 p=[];
0073 dp=[];
0074 end
0075
0076 if nargout==3
0077 pts=NaN;
0078 infos.min_glob.X=pts;
0079 infos.min_glob.Z=NaN;
0080 infos.min_loc.Z=NaN;
0081 infos.min_loc.X=pts;
0082 end
0083
0084
0085 if nargin==0
0086 figure
0087 subplot(1,3,1)
0088 surf(x,y,p);
0089 axis('tight','square')
0090 xlabel('x'), ylabel('y'), title('Dixon & Price')
0091 subplot(1,3,2)
0092 surf(x,y,dp(:,:,1));
0093 axis('tight','square')
0094 xlabel('x'), ylabel('y'), title('Grad. X Dixon & Price')
0095 subplot(1,3,3)
0096 surf(x,y,dp(:,:,2));
0097 axis('tight','square')
0098 xlabel('x'), ylabel('y'), title('Grad. Y Dixon & Price')
0099 end
0100 end