⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 legendrecof.m

📁 勒让德多项式德生成
💻 M
字号:
function [R,C,Cnorm]=legendrecof(L,method)
% [R,C,Cnorm]=legendrecof(L,method)
%
% Calculates roots and coefficients of Legendre polynomials,
% by recursion. (Not the Associated Legendre functions!)
% Coefficients ordered with maximum power first, constant last.
% Roots lie between -1 and 1.
%
% INPUT:
%
% L         Maximum degree of Legendre polynomial
% method    'jacobi' stable algorithm for roots only
%           'cofrec' unstable algorithm for roots and coefficients
%
% OUTPUT:
%
% R         Roots of Legendre polynomial of degree L
% C         Coefficients of polynomial such that P(1)=1 and power 2/(2L+1)
% Cnorm     Coefficients of polynomial such that its power equals 1
%
%
% Note that the "standard" normalization is P(1)=1 and then,
% the inner product is returns 2/(2l+1). We also return 
% polynomials whose inner product over [-1 1] equals 1.
%
% EXAMPLE:
%
% plm=legendre(10,linspace(-1,1,100));
% plot(linspace(-1,1,100),plm(1,:)); hold on
% [R,C]=legendrecof(10);
% plot(R,0,'o'); grid on
%
%
% From
% http://perso.wanadoo.fr/jean-pierre.moreau/Basic/legendre_bas.txt
% http://dip.sun.ac.za/~weideman/research/differ.html
%
% By fjsimons-at-alum.mit.edu, August 21st, 2003

defval('method','jacobi')

switch method
 case 'jacobi'
  R=legendreroots(L);
  C=0;
  Cnorm=0;
 case 'cofrec'
  % The coefficients grow too large to be represented in the machine
  if L>40
    warning('This recursion relation is not valid for L> 40')
  end
  % Initialize
  B=zeros(L+1);
  B(1,1)=1;
  B(2,1)=0;
  B(2,2)=1;
  % Recursive relation
  % Columns are increasing powers of x ; first column is constant
  if L>=2
    for l=2:L
      B(l+1,1)=-(l-1)*B(l-1,1)/l;
      for p=1:l
	B(l+1,p+1)=((2*l-1)*B(l,p)-(l-1)*B(l-1,p+1))/l;
      end
    end
    % Take the last row
    for l=0:L
      C(l+1)=B(L+1,l+1);
    end
  elseif L==1
    C=[0 1];
  elseif L==0
    C=[1];
  end
  % Output - order matters!
  C=fliplr(C);
  % We've warned you; over 40 get complex roots 
  % sometimes exceeding [-1 1]
  R=real(roots(C));
  R(R<-1)=-1;
  R(R>1)=1;
  % Normalization to give inner product of one
  Cnorm=C*sqrt((2*L+1)/2);
end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -