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] = funSineEnveloppe(xx)
0030
0031
0032 a=1/2;
0033 b=1e-3;
0034 c=1;
0035
0036
0037 sX=size(xx);
0038
0039 funH=@(x,y)sin(sqrt(x.^2+y.^2)).^2-a;
0040 funG=@(x,y)(b*(x.^2+y.^2)+c).^2;
0041
0042 xkp=xx(:,:,2:end);
0043 xk=xx(:,:,1:end-1);
0044 pa=funH(xkp,xk)./funG(xkp,xk)+a;
0045
0046 p=sum(pa,3);
0047
0048 if nargout==2
0049
0050 funHx=@(x,y)2*x./sqrt(x.^2+y.^2) ...
0051 .*cos(sqrt(x.^2+y.^2)) ...
0052 .*sin(sqrt(x.^2+y.^2));
0053 funHy=@(x,y)2*y./sqrt(x.^2+y.^2) ...
0054 .*cos(sqrt(x.^2+y.^2)) ...
0055 .*sin(sqrt(x.^2+y.^2));
0056 funGx=@(x,y)4*b*x.*(b*(x.^2+y.^2)+c);
0057 funGy=@(x,y)4*b*y.*(b*(x.^2+y.^2)+c);
0058
0059 dp=zeros(sX);
0060
0061 for itX=1:sX(3)
0062 if itX==1
0063 x=xx(:,:,2);
0064 y=xx(:,:,1);
0065 dp(:,:,itX)=(funHy(x,y).*funG(x,y)-funH(x,y).*funGy(x,y))./funG(x,y).^2;
0066 elseif itX==sX(3)
0067 x=xx(:,:,sX(3));
0068 y=xx(:,:,sX(3)-1);
0069 dp(:,:,itX)=(funHx(x,y).*funG(x,y)-funH(x,y).*funGx(x,y))./funG(x,y).^2;
0070 else
0071 xk=xx(:,:,itX);
0072 xkp=xx(:,:,itX+1);
0073 xkm=xx(:,:,itX-1);
0074 dp(:,:,itX)=(funHx(xk,xkm).*funG(xk,xkm)-funH(xk,xkm).*funGx(xk,xkm))./funG(xk,xkm).^2 ...
0075 +(funHy(xkp,xk).*funG(xkp,xk)-funH(xkp,xk).*funGy(xkp,xk))./funG(xkp,xk).^2;
0076 end
0077 end
0078 end
0079 end