function y=heatdrv(t,n,s,e)
% calcul de  y^(j)/(2j)! pour la fonction
%   y(t)=exp( -1/ (t/e*(1-t/e))^s ) qui est 1+1/s Gevrey-Romieu pour nu >0
% 
% entrees:
%    t(nt,1): un vecteur colonne de nt instants  entre 0 et e
%    n: un ordre de derivation
%    s: l'exposant 
%    e: nombre positif 
%  sorties: 
%    y(nt,n+1): une matrice 
%           y(i,j) est la valeur de  y^(j-1)/(2j-2)! en t(i)
%
% Pierre Rouchon
% mai 96 
% 
[nt,mt]=size(t);
if mt>1 
  error('derive: t doit etre un vecteur colonne')
end;

y=zeros(nt,n+1);
tau=t/e;
tau=max(0.001,tau);tau=min(0.999,tau); % evite pb num vers 0 et vers 1
p=tau.*(1-tau);
p1=(1-2*tau)/e;
p2=-2/e/e;

%  A  correspond a  ( t/e(1-t/e)^(s+1) ) ^(j) / (j)!
A=zeros(nt,n+1);
A(:,1)=p.^(s+1);
A(:,2)=(s+1)*p1.*A(:,1)./p;
for i=2:n;
  A(:,i+1)= ( (s+2-i)*p1.*A(:,i) + (s+2-i/2)*p2*A(:,i-1) ) ./  (i*p);  
end
% 
y(:,1)=exp( -1./(p.^s) );
y(:,2)=s*p1.*y(:,1)./A(:,1)/2;
for i=2:n;
   f=s*( p1.*y(:,i)+p2*y(:,i-1)/(2*i-3)/2 ) / (2*i)/(2*i-1) ;
   x=-1;
   for k=1:i-1
     x=x*(i-k)/(2*i-2*k+2)/(2*i-2*k+1);
     f=f+x*A(:,k+1).*y(:,i-k+1);
   end;
   y(:,i+1)=f./A(:,1);
end 











