常用正交多项式

三个有关正交的概念

  • 如果 我们称函数与在区间上正交;一般我们会这么记录:

  • 如果 称函数与在区间上带权正交;

  • 如果有一个"多项式"序列(每一项就表示一个k次多项式),如果这个多项式序列所有元素满足下面的规律:


我们称为在区间上带权的"正交多项式序列";序列中的每一个元素,我们可以叫它"一个正交多项式"!

常用的正交多项式序列

关于正交多项式序列细节的内容不提,偏重它们的性质和使用。总结一句正交多项式序列最重要的性质:2个序号不同多项式,乘积后特定区间积分为0;2个序号相同多项式(就是同一个),乘积后特定区间积分不为0。一般我们常用的正交多项式序列如下,并给出其多项式递推公式:

  • 勒让德(Legende)正交多项式序列;
  • 切比雪夫(Chebyshev)正交多项式序列;
  • 第二类切比雪夫(Chebyshev)正交多项式序列;
  • 拉盖尔(Laguerre)正交多项式序列;
  • 埃尔米特(Hermite)正交多项式序列;
  • 罗巴特(Lobatto)正交多项式序列;

勒让德正交多项式序列

勒让德相邻3项递推公式:

说明:勒让德正交多项式序列中,任意两个元素都是区间上带权正交。

规律:

用matlab编程求每个正交多项式:

clear; clc;

syms x;

P_orig0 = 1;
P_orig1 = x;

P = sym(zeros(1,5));  % 记录前5个多项式

% 勒让德正交多项式序列前5项求取
for n = 1:5
    Pn = simplify( x*(2*n+1)/(n+1)*P_orig1 - n/(n+1)*P_orig0 )
    P_orig0 = P_orig1;
    P_orig1 = Pn;
    P(n) = Pn;
end

% 下面是测试任意两个元素是否有正交关系
for m = 1:4
    equal = int( P(m)*P(m), x, -1, 1 )
    inequal = int( P(m)*P(m+1), x, -1, 1 )   % 随便改, 只要两个不相等
end

切比雪夫正交多项式序列

切比雪夫相邻3项递推公式:

说明:切比雪夫正交多项式序列中,任意两个元素都是区间上带权正交。

规律:

用matlab编程求每个正交多项式:

clear; clc;

syms x;

T_orig0 = 1;
T_orig1 = x;

T = sym(zeros(1,5));  % 记录前5个多项式

% 切比雪夫正交多项式序列前5项求取
for n = 1:5
    Tn = simplify( 2*x*T_orig1 - T_orig0 )
    T_orig0 = T_orig1;
    T_orig1 = Tn;
    T(n) = Tn;
end

% 下面是测试任意两个元素是否有正交关系
for m = 1:4
    T_equal = T(m)*T(m)/(sqrt(1-x^2));
    equal = int( T_equal, x, -1, 1 )        % 都是pi或pi/2
    T_inequal = T(m)*T(m+1)/(sqrt(1-x^2));
    inequal = int( T_inequal, x, -1, 1 )    % 都是0
end

第二类切比雪夫正交多项式序列

切比雪夫相邻3项递推公式:

说明:第二类切比雪夫正交多项式序列中,任意两个元素都是区间上带权正交。

规律:

用matlab编程求每个正交多项式:

clear; clc;

syms x;

U_orig0 = 1;
U_orig1 = 2*x;

U = sym(zeros(1,5));  % 记录前5个多项式

% 第二类切比雪夫正交多项式序列前5项求取
for n = 1:5
    Un = simplify( 2*x*U_orig1 - U_orig0 )
    U_orig0 = U_orig1;
    U_orig1 = Un;
    U(n) = Un;
end

% 下面是测试任意两个元素是否有正交关系
for m = 1:4
    U_equal = U(m)*U(m)*sqrt(1-x^2);
    equal = int( U_equal, x, -1, 1 )        % 都是pi/2
    U_inequal = U(m)*U(m+1)*sqrt(1-x^2);
    inequal = int( U_inequal, x, -1, 1 )    % 都是0
end

拉盖尔正交多项式序列

拉盖尔相邻3项递推公式:

说明:拉盖尔正交多项式序列中,任意两个元素都是区间上带权正交。

规律:

用matlab编程求每个正交多项式:

syms x;

L_orig0 = 1;
L_orig1 = 1-x;

L = sym(zeros(1,5));  % 记录前5个多项式

% 拉盖尔正交多项式序列前5项求取
for n = 1:5
    Ln = simplify( (2*n+1-x)*L_orig1 - n^2*L_orig0 )
    L_orig0 = L_orig1;
    L_orig1 = Ln;
    L(n) = Ln;
end

% 下面是测试任意两个元素是否有正交关系
for m = 1:4
    L_equal = L(m)*L(m)*exp(-x);
    equal = int( L_equal, x, 0, +inf )        % (n!)^2
    L_inequal = L(m)*L(m+1)*exp(-x);
    inequal = int( L_inequal, x, 0, +inf )    % 都是0
end

埃尔米特正交多项式序列

埃尔米特相邻3项递推公式:

说明:埃尔米特正交多项式序列中,任意两个元素都是区间上带权正交。

规律:

用matlab编程求每个正交多项式:

clear; clc;

syms x;

H_orig0 = 1;
H_orig1 = 2*x;

H = sym(zeros(1,5));  % 记录前5个多项式

% 埃尔米特正交多项式序列前5项求取
for n = 1:5
    Hn = simplify( 2*x*H_orig1 - 2*n*H_orig0 )
    H_orig0 = H_orig1;
    H_orig1 = Hn;
    H(n) = Hn;
end

% 下面是测试任意两个元素是否有正交关系
for m = 1:4
    H_equal = H(m)*H(m)*exp(-x^2);
    equal = int( H_equal, x, -inf, +inf )        % 2^n*n!*sqrt(pi)
    H_inequal = H(m)*H(m+1)*exp(-x^2);
    inequal = int( H_inequal, x, -inf, +inf )    % 都是0
end

罗巴特正交多项式序列

说明:罗巴特正交多项式序列是基于"勒让德多项式序列"推导而来的!所以其很多性质是继承勒让德正交多项式的。罗巴特每一项公式:

说明:

  • 罗巴特正交多项式序列中,任意两个元素都是区间上带权正交;
  • 罗巴特正交多项式第0项为:。该项就不在程序中显示了。

规律:

用matlab编程求每个正交多项式:借用勒让德的各个多项式

clear; clc;

syms x;

P_orig0 = 1;
P_orig1 = x;   % 勒让德的前两项

L = sym(zeros(1,5));  % 记录前罗巴特正交多项式
for n = 1:5
    Pn = simplify( x*(2*n+1)/(n+1)*P_orig1 - n/(n+1)*P_orig0 );  % 勒让德多项式
    L(n) = diff(Pn,x,1)   % 罗巴特多项式√√
    P_orig0 = P_orig1;    % 勒让德更新
    P_orig1 = Pn;
end

% 下面是测试任意两个元素是否有正交关系
for m = 1:4
    L_equal = L(m)*L(m)*(1-x^2);
    equal = int( L_equal, x, -1, 1 )       % 都是2(m+1)(m+2)/(2m+3)
    L_inequal = L(m)*L(m+1)*(1-x^2);
    inequal = int( L_inequal, x, -1, 1 )   % 都是0
end

你可能感兴趣的:(常用正交多项式)