当前位置:文档之家› 切比雪夫级数

切比雪夫级数

算法说明: 当一个连续函数定义在区间[-1,1]上时,它可以展开成切比雪夫级数。即:

0()()nnnfxfTx

其中()nTx为n次切比雪夫多项式,具体表达可通过递推得出: 0()1Tx,1()Txx

11()2nnnTxxTxTx

它们之间满足如下的正交关系:

1210,()(),021,0nmnmTxTxdxnmxnm







在实际应用中,可根据所需的精度来截取有限的项数,切比雪夫级数中的系数由下式决定: 10211()1fxfdxx



1212()()1nTxfxfdxx



在MATLAB中编程实现的切比雪夫逼近法函数为:Chebyshev。 功能:用切比雪夫多项式逼近已知函数。

调用格式:Chebyshev(y,k,x0)f 其中,y为已知函数; k为逼近已知函数所需项数; f是求得的切比雪夫逼近多项式在x0处的逼近值。

程序源代码(m文件): function f = Chebyshev(y,k,x0) %用切比雪夫多项式逼近已知函数 %已知函数:y %逼近已知函数所需项数:k %逼近点的x坐标:x0 %求得的切比雪夫逼近多项式或在x0处的逼近值:f syms t; T(1:k+1) =t; T(1) = sym('1'); T(2) = t; c(1:k+1) = sym('0');

c(1)=int(subs(y,findsym(sym(y)),sym('t'))*T(1)/sqrt(1-t^2),t,-1,1)/pi; c(2)=2*int(subs(y,findsym(sym(y)),sym('t'))*T(2)/sqrt(1-t^2),t,-1,1)/pi; f = c(1)+c(2)*t;

for i=3:k+1 T(i) = 2*t*T(i-1)-T(i-2); c(i) = 2*int(subs(y,findsym(sym(y)),sym('t'))*T(i)/sqrt(1-t^2),t,-1,1)/2; f = f + c(i)*T(i); f = vpa(f,6);

if(i==k+1) if(nargin == 3) f = subs(f,'t',x0); else f = vpa(f,6); end end end

应用实例:切比雪夫应用实例。用切比雪夫公式(取6项)逼近函数12x,并求当x=0.5时的函数值。 解: 利用程序求解方程,在MATLAB命令窗口中输入: >> Chebyshev('1/(2-x)',6) %调用创建的函数euler,输出切比雪夫多项式的6个项 再在MATLAB命令窗口中输入: >> Chebyshev('1/(2-x)',6,0.5) %调用创建的函数euler,输出当x=0.5时的函数值

输出结果: 流程图:

开始 定义sym型变量t以及切比雪夫多项式矩阵T(n),并规定前两项为1,t

根据前两项多项式计算其系数c(1),c(2)

由第一项和第二项多项式及其系数计算一级切比雪夫逼近值

i从3到k+1 否 是 是 否

由T(i-1)和T(i-2)计算T(i)

由T(i)计算其系数c(i)

i=k+1 输入三项 求出逼近式在x0处的值 输出结果,并设置其为六级精度

结束

由T(i)和c(i)计算i级切比雪夫逼近值。 二、拉压杆系的静不定问题。由n根杆(CB1,CB2...CBn

)组成的桁架结构如

图2-1所示,受力P作用,各杆的横截面积分别为Ai

,材料弹性模量为E,长度

为Li,求各杆的轴力Ni

以及节点C处的位移。

图2-1 1、假设:①由P的作用,C点移动到C’点;②C到C’的水平距离为dx,

垂直距离为dy;③各杆与水平面夹角分别为α1,α2…αi…αn

;④每根杆长度的变

化为dL1,dL2…dLi…dLn

;⑤力P与水平面夹角为α。

2、思路: (1)如图2-2所示,以CBi

为例说明各杆的几何关系,由于,

≈0,因此dLi =BiC’-BiC≈BiC’-BiD=DC’,过C点作DC’的平行线CG,因,故,所以CF=dxcosαi,FG=dysinαi,故可得几何方程①。

图2-2 (2)根据图2-3所示各轴力以及外力x,y方向合力为0,建立平衡方程②、③: 图2-3 (3)由公式①、②、③共有n+2个公式,求解n个轴力,以及A点位移dx、dy,建立如下所示的线性方程组:

. . . (4)建立[Pcosα,Psinα,0,0,0…0]’的常数矩阵,以及如下所示的系数矩阵

(5)再用求逆法求解此线性方程组,即用常数矩阵除以系数矩阵,得出结果。 3、源程序:(文件名称为main) clear;clc; Ei=input('请输入各杆的刚度:(注意用[]括起来)'); %输入刚度矩阵Ei Li=input('请输入各杆的长度:(注意用[]括起来) ');%输入杆的长度矩阵Li Ai=input('请输入各杆的横截面积:(注意用[]括起来) ');%输入杆的横截面积矩阵Ai ai=input('请输入各杆与水平面的夹角:(注意用[]括起来) ');%输入杆与水平面的夹角矩阵ai P=input('请输入外力P: ');%输入外加力P a=input('请输入P与水平面的夹角: ')%输入外加力P与x的夹角 n1=length(Ei);n2=length(Li);n3=length(Ai); if(n1~=n2|n2~=n3|n1~=n3) disp('输入数据错误') else n=n1; end%判断数据大小是否一致 Ki=Li./(Ei.*Ai); C=zeros(n+2,1); C(1,1)=P*cos(a); C(2,1)=P*sin(a); C(3:n+2,1)=zeros(n,1);%建立方程组等号右边常数的矩阵 D=zeros(n+2,n+2); D(1,:)=[cos(ai),0,0]; D(2,:)=[sin(ai),0,0]; for(i=1:n) D(i+2,i)=Ki(i); end D(3:n+2,n+1)=(-cos(ai)); D(3:n+2,n+2)=(-sin(ai));%建立方程组系数矩阵 x=D\C;x=x';%求解该线性方程组,得出C点位移以及每根杆的轴力 disp('节点在x、y方向上的位移分别:') x(n+1:n+2) disp('各杆的轴力分别为:') x(1:n)%输出结果

4、流程图:

是 否 开始

输入所需数据:各杆的刚度Ei、横截面积Ai、长度Li,以及夹角αi,外加力P以及其与x方向夹角

建立系数矩阵D,以及常数矩阵C

用求逆法解线性微分方程

输出C点位移,以及各杆轴力

输入Ei,Ai,Li,αi维度是否一致

输出:输入数据错误

结束 5、程序举例应用: 设三根杆组成的支架如图2-4所示,挂一重物P=3000N。设L=3m,各杆的横

截面积分别为:A1=15010-6m2,A2=20010-6m2,A3=30010-6m2,材料的弹性模量均

为E=200109N/m2,求各杆所受力的大小以及C点位移

解:①运行main文件(即前文中写的源程序); ②输入题中所给数据; [200e9,200e9,200e9]; [3/sin(pi/3),3/sin(pi/2),3/sin(pi/4)]; [150e-6,200e-6,300e-6]; [pi/3,pi/2,3*pi/4]; 3000; 0;

③得出结果;

图2-5 (1); 一、流程图:

若不成立 修改 建立函数文件

输入MATLAB指令

结果 二、源程序代码: 建立被积函数文件funo funo.m function f=funo(x) f=(1./((2*pi).^0.5)).*exp(-x.^2./2); 计算积分,在MATLAB命令窗中输入: >> quad('funo',0,1) 三、结果: ans = 0.3413

相关主题