normalized ALF (Assotiated Legendre Function)

Marco Caliari marco.caliari at univr.it
Mon Feb 11 09:20:32 CST 2008


Hi.

Please, try the enclosed legendre.m. It is based on the recurrence 
relation found in 
http://en.wikipedia.org/wiki/Associated_Legendre_function. I think it 
should be much more stable.

Best regards,

Marco
-------------- next part --------------
function L = legendre(n,x,varargin)
% Based on the first recurrence relation found in 
% http://en.wikipedia.org/wiki/Associated_Legendre_function
x = x(:).';
L = zeros(n+1,length(x));
if (nargin == 2)
  normalization = "unnorm";
else
  normalization = varargin{1};
end
for m = 1:n+1
  if (strcmp(normalization,"norm"))
    scale = sqrt((n+0.5)/prod(n-m+2:n+m-1));
  elseif (strcmp(normalization,"sch"))
    scale = sqrt(2/prod(n-m+2:n+m-1));
  else
    scale = (-1).^(m-1);
  end
  LP = ones(n+1,length(x))*scale;
  LP(m,:) = prod(1:2:2*(m-1)-1)*LP(m,:).*sqrt(1-x.^2).^(m-1);
  if (m == n+1)
    L(m,:) = LP(m,:);
    break
  end  
  LP(m+1,:) = (2*m-1).*x.*LP(m,:);
  for l = m+1:n
    LP(l+1,:) = ((2*(l-1)+1).*x.*LP(l,:)-(l-1+m-1).*LP(l-1,:))./(l-m+1);
  end
  L(m,:) = LP(n+1,:);
end
if (strcmp(normalization,"sch"))
  L(1,:) = L(1,:)/sqrt(2/prod(n+1:n));
end


More information about the Help-octave mailing list