正交多项式介绍及应用
1 正交多项式的定义
1.1 正交多项式定义
定义: 一个多项式序列 ${ {p_n}(x)} _{n = 0}^\infty $,其阶数为 \([{p_n}(x)] = n\) ,对于每一个 \(n\),这个多项式序列在开区间 \((a,b)\) 上关于权函数 \(w(x)\) 正交,如果:
这里 \({\delta _{mn}}\)为狄拉克函数,且 \(h_n\) 为常数。
这里的权函数 \(w(x)\) 在区间 \((a,b)\) 是连续且正的以使得下式存在:
则多项式 \(f\) 和多项式 \(g\) 的内积定义为:
区间 \((a,b)\) 称为正交区间,正交区间未必是有限区间。
例1 三角函数的正交性
对于三角函数序列 \(1,sin(\theta),cos(\theta),sin(2\theta),cos(2\theta),...,cos(n\theta)\),\(n=1,2,...,\infty\),他们在区间 \((0,2\pi)\) 的正交性为:
图1展现了 \(sin(\theta)\) 和 \(cos(\theta)\) 在区间 \((0,2\pi)\) 上的正交性,图中蓝线为 \(sin(\theta)*cos(\theta)\) 的值,对其积分就相当于求图中阴影部分的面积,很明显,阴影部分的面积加上符号后求和为0。
1.2 施密特正交化(Schmidt orthogonalization)
施密特正交化方法是将一组线性无关的向量组正交化的方法,对正交化后的向量组进行标准化处理,可进一步得到一组标准正交基。施密特正交化的处理步骤如下:
例子:将三维空间中的一组线性无关向量 \({a,b,c}\) 用施密特正交化方法处理得到正交向量组 \({x,y,z}\)。
步骤如下:
三维空间中施密特正交化方法的几何描述如图2所示
2 经典正交多项式
经典的正交多项式有雅克比多项式,切比雪夫多项式,勒让德多项式,拉盖尔多项式,伯恩斯坦多项式,球谐多项式等。
2.1 雅克比多项式
雅克比多项式是定义在 \((-1,1)\) 上,关于权函数 \((1-x)^\alpha(1+x)^\beta\) 正交的多项式,其中 \(\alpha,\beta >-1\)
雅克比多项式的表达式为:
为伽马函数(gamma function)。
雅克比多项式的递推公式为:
雅克比多项式的正交性:
2.2 勒让德多项式
勒让德多项式是定义在区间 \((-1,1)\) 上关于权函数1正交的多项式。勒让德多项式实际上是雅克比多项式在 \(\alpha=\beta=0\) 时的特殊情况。
勒让德多项式的表达式为:
勒让德多项式的递推公式为:
勒让德多项式的正交性:
前6阶勒让德多项式:
前6阶多项式图像:
2.3 切比雪夫多项式
切比雪夫多项式是定义在区间 \((-1,1)\) 上关于权函数 \(\frac{1}{{\sqrt {1 - {x^2}} }}\) 正交的多项式。
2.3.1 第一类切比雪夫多项式
第一类切比雪夫多项式的表达式为:
令 \(x=cos(\theta)\),则 \({T_n}(x) = \cos (n\arccos (x))\),
第一类切比雪夫多项式的正交性为:
第一类切比雪夫多项式的递推公式:
第一类切比雪夫多项式的前6项:
第一类切比雪夫多项式的图像
2.3.2 第二类切比雪夫多项式
第二类切比雪夫多项式的表达式为:
第二类切比雪夫多项式的正交性为:
第二类切比雪夫多项式的递推公式:
第二类切比雪夫多项式的前6项:
第二类切比雪夫多项式的图像:
2.4 拉盖尔多项式
拉盖尔多项式是定义在区间 \((0,+\infty)\) 上关于权函数 \(e^{-x}x^\alpha\) 正交的多项式,
拉盖尔多项式的正交关系:
拉盖尔多项式的递推关系(\(\alpha =0\)):
前6项拉盖尔多项式(\(\alpha =0\)):
前6项拉盖尔多项式的图像:
2.5 埃尔米特多项式
埃尔米特多项式是定义在区间 \((-\infty,+\infty)\) 上关于权函数 \(e^{-x^2}\) 正交的多项式。
埃尔米特多项式分为概率论中的埃尔米特多项式和物理中的埃尔米特多项式,这里只介绍物理学中使用的埃尔米特多项式。
埃尔米特多项式的表达式为:
埃尔米特多项式的正交性:
埃尔米特多项式的递推公式:
前6项埃尔米特多项式为:
前6项埃尔米特多项式图像:
3 正交多项式的应用
正交多项式的应用甚广,包括但不限于数值分析,逼近理论,积分,微分方程,复变函数,随机矩阵理论,编码理论等。
这里仅以一个小的例子来说明正交多项式在函数拟合中的应用。
实验中使用的测试函数为 \(y=4x+3x^2+cos(x)+sin(2x)+e^x\),定义区间为 \((-2,2)\) ,实验比较了多项式展开3项时不同多项式的拟合均方误差(MSE),归一化均方误差(NMSE)。
测试程序如下:
% 正交多项式测试
clear
clc
% 采样点数
N = 1000 ;
% 正交多项式阶数
M = 3 ;
% 拟合函数区间为(-2,2)
x = linspace(-2,2,N)' ;
% 生成被拟合的函数,包括指数函数,余弦函数,幂函数成分
y = 4*x + 3*x.^2 + cos(x) + exp(x) + sin(2*x);
% 生成幂级数组成的基矩阵
P1 = power_p(x,M) ;
% 生成勒让德多项式组成的基矩阵
P2 = legendre_p(N,M) ;
% 生成切比雪夫多项式组成的基矩阵
P3 = chebyshev_p(N,M) ;
% 生成拉盖尔多项式组成的基矩阵
P4 = laguerre_p(N,M) ;
% 生成诶尔米特多项式组成的基矩阵
P5 = hermite_p(N,M) ;
%% 用最小二乘拟合y
% c1对应幂级数系数
c1 = P1\y ;
% c2对应勒让德系数
c2 = P2\y ;
% c3对应切比雪夫系数
c3 = P3\y ;
% c4对应拉盖尔系数
c4 = P4\y ;
% c5对应埃尔米特系数
c5 = P5\y ;
%% 求MSE和NMSE
MSE_power = norm(y-P1*c1)/N
NMSE_power = norm(y-P1*c1)/norm(y)
MSE_legendre = norm(y-P2*c2)/N
NMSE_legendre = norm(y-P2*c2)/norm(y)
MSE_chebyshev = norm(y-P3*c3)/N
NMSE_chebyshev = norm(y-P3*c3)/norm(y)
MSE_laguerre = norm(y-P4*c4)/N
NMSE_laguerre = norm(y-P4*c4)/norm(y)
MSE_hermite = norm(y-P5*c5)/N
NMSE_hermite = norm(y-P5*c5)/norm(y)
figure(1)
plot(x,y,'r-',x,P1*c1,'b-',x,P2*c2,'k-',x,P3*c3,'y-',x,P4*c4,'g-',x,P5*c5,'m-')
legend('original','power','legendre','chebyshev','laguerre','hermite')
function [P] = power_p(x,M)
for m = 1:M
P(:,m) = x.^(m-1) ;
end
end
function [P] = legendre_p(N,NN)
% 本函数生成N*M的勒让德基矩阵
s = linspace(-1,1,N)' ;
P = zeros(N,NN) ;
P(:,1) = ones(N,1) ;
P(:,2) = s ;
for n = 3 : NN
P(:,n) = ((2 * n - 3) * s .* P(:,n - 1) - (n - 2) * P(:,n - 2)) / ( n -1 ) ;
end
end
function [P] = chebyshev_p(N,M)
% 本函数生成N*M的切比雪夫基矩阵
x = linspace(-1,1,N)' ;
P = zeros(N,M) ;
P(:,1) = ones(N,1) ;
P(:,2) = x ;
for k = 3:M
P(:,k) = 2*x.*P(:,k-1) - P(:,k-2) ;
end
end
function [P] = laguerre_p(N,M)
% 本函数生成N*M的拉盖尔基矩阵
x = linspace(-2,2,N)' ;
P = zeros(N,M) ;
P(:,1) = ones(N,1) ;
P(:,2) = -x + ones(N,1) ;
for m = 3:M
P(:,m) = ((2*(m-2)+1-x).*P(:,m-1)-(m-2)*P(:,m-2))./(m-1) ;
end
end
function [P] = hermite_p(N,M)
% 本函数生成N*M的埃尔米特基矩阵
x = linspace(-2,2,N)' ;
P = zeros(N,M) ;
P(:,1) = ones(N,1) ;
P(:,2) = 2*x ;
for m = 2:M
P(:,m+1) = 2*x.*P(:,m) - 2*(m-1)*P(:,m-1) ;
end
end
更多精彩内容请关注订阅号优化与算法和加入QQ讨论群1032493483获取更多资料
原文地址:https://www.cnblogs.com/louisanu/p/13285394.html
- 逆向工厂(一):从hello world开始
- Android系统到底安不安全?细数Android7.0 Nougat的几大安全增强功能
- 冒用数字签名的对抗:亟需加强的签名审核
- Twitter开源云环境时间序列数据断层检测工具BreakoutDetection
- 用Python的长短期记忆神经网络进行时间序列预测
- 【问底】许鹏:使用Spark+Cassandra打造高性能数据分析平台(一)
- 隐秘通讯与跳板?C&C服务器究竟是怎么一回事
- 灵活布置、可二次开发的乌云公开漏洞及知识库搜索
- 干货 | 2014年我国大数据发展分析报告
- 这个恶意软件“奇葩”的反虚拟机技巧
- Android漏洞CVE-2015-3825分析及exploit实战:从Crash到劫持PC
- VaultPasswordView:可用于查看windows Vault密码的工具
- 逆向工厂(二):静态分析技术
- 打开文件夹就运行?COM劫持利用新姿势
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- keras读取h5文件load_weights、load代码操作
- 简单了解Python变量作用域正确使用方法
- Python实现Keras搭建神经网络训练分类模型教程
- keras导入weights方式
- 使用Keras实现简单线性回归模型操作
- 音频处理 windows10下python三方库librosa安装教程
- Python Excel vlookup函数实现过程解析
- 浅谈Python 函数式编程
- Keras-多输入多输出实例(多任务)
- 利用Vscode进行Python开发环境配置的步骤
- python + selenium 刷B站播放量的实例代码
- 巧用x-cos-traffic-limit header来限制上传下载速率
- centos7上编译安装php7以php-fpm方式连接apache
- 基于Python实现视频的人脸融合功能
- 如何理解python对象