哈哈,好久没有写MATLAB程序了,今天有些手痒痒的。于是在考完《数值分析》以后写下了这个“构建首项系数为1的正交多项式”,和大家一起分享下哦!
09年差不多荒废了半年,现在该开始好好工作和学习了!呵呵,前段时间,博客都是粘贴一些胡乱的东西,现在该言归正传了,写一些有技术含量的文章吧!
哈哈,当年的LaterComer回来了!
function g=orthpoly(rho,a,b,n)
% 构建首项系数为1的正交多项式
%
% 参数说明
% rho:内积的权,必须给符号变量
% a,b:积分上下限,可以数值也可以符号变量
% n:构建前n+1项正交多项式,注意第一项是g0≡1
%
% 举例说明
% syms x % 定义符号变量x,注意本函数只认x
% rho=abs(x) % 定义权,必须符号变量
% a=-1;b=1; % 定义积分上下限
% n=4 % 计算前5个正交多项式
% g=orthpoly(rho,a,b,n) % 调用函数构建正交多项式
%
% 参考资料
% 封建湖.科学出版社.《数值分析》.2005年7月第六次印刷.第64页
% 首项系数为1的正交多项式递推公式如下
% g(0)=1;
% g(1)=x-a(0);
% ...
% g(k+1)=[x-a(k)]*g(k)-b(k-1)*g(k-1)
k=3,4,...
%
%
其中a(k)=(x*g(k),g(k))/(g(k),g(k))
注意:(f,g)表示f和g的内积
%
b(k-1)=(g(k),g(k))/(g(k-1),g(k-1))
%
% by dynamic of Matlab技术论坛
% see also http://www.matlabsky.com
% contact me matlabsky@gmail.com
% 2010-01-14 23:25:57
%
syms x
g=sym(zeros(n+1,1));
g(1)=1;
alpha(1)=inprod(rho,x*g(1),g(1),a,b)/inprod(rho,g(1),g(1),a,b);
g(2)=x-alpha(1);
for i=3:n+1
alpha(i-1)=inprod(rho,x*g(i-1),g(i-1),a,b)/inprod(rho,g(i-1),g(i-1),a,b);
beta(i-2)=inprod(rho,g(i-1),g(i-1),a,b)/inprod(rho,g(i-2),g(i-2),a,b);
g(i)=(x-alpha(i-1))*g(i-1)-beta(i-2)*g(i-2);
end
g=expand(g);
function ip=inprod(rho,f,g,a,b)
% 计算函数f和g,在权rho之下的内积
ip=int(rho*f*g,a,b);
|