傅立叶级数展开 matlab
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验四 傅里叶级数
实验的目的
Matlab 语言没有直接提供求解傅立叶(Fourier)系数与级数的现成函数。
本节实验主要让学生独立编写出傅立叶(Fourier) 级数的求解函数。
进一步理解掌握利用Matlab 进行级数运算的方法和提高实验技能。
实验的基本理论与方法
1、三角函数系
,sin ,cos ,,2sin ,2cos ,sin ,cos ,1nx nx x x x x 4-7)
在区间],[ππ-上正交,即指在三角函数系4-7)中任何不同的两个函数的乘积在区间
],[ππ-上的积分等于零。
2、函数展开成傅立叶级数
设)(x f 是周期为π2的周期函数,且能展开成三角级数:
∑∞
=++=1
0)sin cos (2)(n n n nx b nx a a x f 4-8) 其实就是要求出其中的系数i a 和i b ,根据三角函数系的正交性,我们可以得到它们的
计算公式如下:
01()a f x dx πππ-=
⎰, 1()cos n a f x nxdx π
ππ-=⎰, 4-9) 1()sin n b f x nxdx πππ-=⎰,(1,2,)n =
如果公式4-9)中的积分都存在,这时它们定出的系数 ,,,110b a a 叫做函数)(x f 的傅立叶系数,将这些系数代入4-8)中,所得三角级数
∑∞
=++1
0)sin cos (2n n n nx b nx a a 4-10) 叫做函数)(x f 的傅立叶级数。
3、奇函数和偶函数的傅立叶级数
当周期为π2的奇函数)(x f 展开成傅立叶级数时,它的傅立叶系数为
⎪⎩
⎪⎨⎧====⎰ππ0),3,2,1(sin )(2)321(0 n nxdx x f b n a n n ,,, 4-11)
当周期为π2的偶函数)(x f 展开成傅立叶级数时,它的傅立叶系数为
⎪⎩⎪⎨⎧====⎰)321(0),3,2,1(cos )(20
,,,
n b n nxdx x f a n n ππ 4-12) 以上说明,如果)(x f 为奇函数,那么它的傅立叶级数是只含有正弦项的正弦级数
∑∞=1sin n n nx b
4-13)
如果)(x f 为偶函数,那么它的傅立叶级数是只含有余弦项的余弦级数
∑∞
=+1
0cos 2n n nx a a 4-14) 4、周期为2l 的周期函数的傅立叶级数
设周期为l 2的周期函数)(x f 满足收敛定理的条件,则它的傅立叶级数展开式为:
∑∞=++=10)sin cos (2)(n n n l
x n b l x n a a x f ππ 4-15) 其中系数n n b a ,为
⎪⎩
⎪⎨⎧====⎰⎰--),2,1(,sin )(1),2,1,0(,cos )(1 n dx l x n x f l b n dx l x n x f l a l l n l l n ππ 4-16) 如果)(x f 为奇函数,则有
∑∞==1sin
)(n n l
x n b x f π 4-17) 其中系数),3,2,1(sin )(20 ==⎰n dx l
x n x f l b l n π 4-18) 如果)(x f 为偶函数,则有
∑∞=+=10c o s 2)(n n l x n a a x f π 4-19) 其中系数),2,1,0(sin )(20 ==⎰n dx l
x n x f l a l n π 4-20) 实验使用的函数与命令
1、积分指令int( );
2、矩阵的点乘积;
3、了解在设计Matlab 绘图时的图形标注函数及其功能。
实验指导
例1 求函数x x f =)(在[,]ππ-上的傅立叶级数。
解:由前文知,将一个函数()f x 展开为傅立叶级数:
∑∞
=++=1
0)sin cos (2)(n n n nx b nx a a x f 其实就是要求出其中的系数i a 和i b ,根据三角函数系的正交性,我们可以得到它们的计算
公式如下:
01()a f x dx πππ-=
⎰, 1()cos n a f x nxdx πππ-=⎰,1()sin n b f x nxdx πππ-=⎰,(1,2,)n =
这样,结合Matlab 的积分命令int( )就可以计算这些系数,从而就可以进行函数的傅立叶展开了。
下面给出Matlab 的程序,程序中先求出傅立叶系数a=(a 0,a 1, a 2,…), b =(b 1, b 2,…),然后利用系数写出该函数的傅立叶级数。
该程序为.M 文件。
程序如下:
syms x;
k=3; % k 为需要展开的相数
f=x; % f 为需要展开的函数
a0=int(f,x,-pi,pi)/pi;
for n=1:k
a(n)=int(f*cos(n*x),x,-pi,pi)/pi; %求出傅立叶系数a=( a1, a2,…),
b(n)=int(f*sin(n*x),x,-pi,pi)/pi; %求出傅立叶系数b=(b1, b2,…)
end
for n=1:k
co(n)=cos(n*x); %傅立叶级数的余弦项
si(n)=sin(n*x); %傅立叶级数的正弦项
end
f=co.*a+si.*b;
g=0;
for n=1:k
g=f(n)+g;
end
f=a0+g %求出傅立叶级数
运行输出结果为
f =
2/3*sin(3*x)-sin(2*x)+2*sin(x) 当k 改为5,则输出结果
f =
2/5*sin(5*x)-1/2*sin(4*x)+2/3*sin(3*x)-sin(2*x)+2*sin(x)
当k 改为5,则输出结果
f =
-1/5*sin(10*x)+2/9*sin(9*x)-1/4*sin(8*x)+2/7*sin(7*x)-1/3*sin(6*x)+2/5*sin(5*x)-1/2*sin(4*x)图 4.1
+2/3*sin(3*x)-sin(2*x)+2*sin(x)
为了能够直观的展示傅立叶级数的效果,将展为3、5、10项的效果图绘制出来。
其M 文件的Matlab 代码如下,效果图为图4.1 :
x=-pi:0.01:pi;
f3=2/3*sin(3*x)-sin(2*x)+2*sin(x);
f5=2/5*sin(5*x)-1/2*sin(4*x)+2/3*sin(3*x)-sin(2*x)+2*sin(x);
f10=-1/5*sin(10*x)+2/9*sin(9*x)-1/4*sin(8*x)+2/7*sin(7*x)-1/3*sin(6*x)+2/5*sin(5*x)-1/2*sin(4*x)+2/3*sin(3*x)-sin(2*x)+2*sin(x);
hold on
plot(x,x,'m','linewidth',2);
plot(x,f3,'r','linewidth',2);
text(2.35,1.5,'k=3\rightarrow','fontsize',14);
plot(x,f5,'-.k','linewidth',2);
text(2.0,3.1,'k=5\rightarrow','fontsize',14);
plot(x,f10,'.b');
text(2.25,3.5,'k=10\rightarrow','fontsize',14);
在实际应用中(如研究某种波动问题,热的传导,扩散问题)中,有时还需要把定义在区间[]π,0上的函数)(x f 展开成正弦级数或余弦级数。
解决方法如下:设函数)(x f 定义在区间[]π,0上并且满足收敛定理的条件,在开区间)0,(π-内补充函数)(x f 的定义,得到定义在],(ππ-上的函数)(x F ,使它在),(ππ-上成为奇函数(或偶函数)。
按这种方式拓广函数定义域的过程称为奇延拓(或偶延拓)。
然后将奇延拓(或偶延拓)后的函数展开成傅立叶级数,这个级数必定是正弦函数(或余弦函数)。
再限制x 在[]π,0上,此时)()(x f x F =,这样便得到)(x f 的正弦函数(或余弦函数)展开式。
例2 将函数1)(+=x x f 在区间[]π,0分别展开成正弦级数和余弦级数。
先求正弦级数,为此对函数)(x f 进行奇延拓。
然后,利用4-11)求出n b 代入正弦级数4-13),即可求得)(x f 正弦级数。
只要对例1 中的程序略作修改得到M 文件程序代码如下:
syms x;
k=6; % k 为需要展开的相数
f=x+1; % f 为需要展开的函数
for n=1:k
b(n)=2*int(f*sin(n*x),x,0,pi)/pi; %求出傅立叶系数b=(b1, b2,…)
end
for n=1:k
si(n)=sin(n*x); %傅立叶级数的正弦项
end
f=si.*b;
g=0;
for n=1:k
g=f(n)+g;
end
f=g %求出傅立叶级数
输出结果为
f =
-1/3*sin(6*x)+sin(5*x)*(2/5*pi+4/5)/pi-1/2*sin(4*x)+sin(3*x)*(2/3*pi+4/3)/pi-sin(2*x)+sin(x)*(2*pi+4)/pi
对于求余弦级数,为此对函数)(x f 进行奇延拓。
然后,利用4-12)求出n a 代入正弦级数4-14),即可求得)(x f 余弦级数。
同正弦级数类似,M 文件程序代码如下:
syms x;
k=6; % k 为需要展开的相数
f=x+1; % f 为需要展开的函数
a0=int(f,x,0,pi)/pi;
for n=1:k
a(n)=2*int(f*cos(n*x),x,0,pi)/pi; %求出傅立叶系数a=( a1, a2,…),
end
for n=1:k
co(n)=cos(n*x); %傅立叶级数的余弦项
end
f=co.*a;
g=0;
for n=1:k
g=f(n)+g;
end
f=a0+g %求出傅立叶级数
输出结果为
f =
(1/2*pi^2+pi)/pi-4/25*cos(5*x)/pi-4/9*cos(3*x)/pi-4*cos(x)/pi
为了能够直观的展示傅立叶级数的效果,将展为6项的正弦级数和余弦级数效果图绘制出来。
其M 文件的Matlab 代码如下,效果图为图 4.2:
x=0:0.01:pi;
fsin=-1/3*sin(6*x)+sin(5*x)*(2/5*pi+4/5)/pi-1/2*sin(4*x)+sin(3*x)*(2/3*pi+4/3)/pi-sin(2*x )+sin(x)*(2*pi+4)/pi;
fcos=(1/2*pi^2+pi)/pi-4/25*cos(5*x)/pi-4/9*cos(3*x)/pi-4*cos(x)/pi;
hold on
plot(x,x+1,'m','linewidth',1);
plot(x,fsin,'r','linewidth',2);
text(2.35,1.5,'k=3\rightarrow','fontsize',14);
plot(x,fcos,'-k','linewidth',1);
text(2.0,3.1,'k=5\rightarrow','fontsize',14);
例3 设)(x f 的周期为4的周期函数,它在)2,2[-的表达式为
)0(20,02,0)(≠⎩
⎨⎧<≤<≤-=c x c x x f 常数 将)(x f 展开成傅立叶级数。
解:该函数周期为4,即2=l ,仿照例1利用公式4-16)求出级数的系数,然后代入4-15)即可求出傅立叶级数。
M 文件的程序代码如下:
syms x;
k=6; % k 为需要展开的相数
f=x; % f 为需要展开的函数
a0=int(0,x,-2,0)/2+int(3,x,0,2)/2;
for n=1:k
a(n)=int(3*cos(n*pi*x/2),x,0,2)/2; %求出傅立叶系数a=( a1, a2,…),
b(n)=int(3*sin(n*pi*x/2),x,0,2)/2; %求出傅立叶系数b=(b1, b2,…)
end
for n=1:k
co(n)=cos(n*pi*x/2); %傅立叶级数的余弦项
si(n)=sin(n*pi*x/2); %傅立叶级数的正弦项
end
f=co.*a+si.*b;
g=0;
for n=1:k
g=f(n)+g;
end
f=a0+g %求出傅立叶级数
运行程序输出结果如下:
图 4.2
f =
1/2*c+2/5*c/pi*sin(5/2*pi*x)+2/3*c/pi*sin(3/2*pi*x)+2*c/pi*sin(1/2*pi*x)
实验内容与练习
1、下列周期函数)(x f 的周期为π2,试将)(x f 展开成傅立叶级数,如果)(x f 在
],[ππ-上的表达式为:
1))(13)(2ππ<≤-+=x x x f ;
2))()(ππ<≤-=x e x f x ;
3))(3
sin
2)(ππ≤≤-=x x x f ; 4))(2cos )(ππ<≤-=x x x f ; 5)⎩
⎨⎧≤≤<≤--=ππx x x x x f 0,0,)(; 6)⎩⎨⎧≤≤<≤-=π
πx x e x f x 0,10,)(。
3、将函数)0(2)(ππ≤≤-=x x
x f 展开成正弦级数。
4、将函数)0(2)(2π≤≤=x x x f 分别展开成正弦级数和余弦级数。
5、将周期函数21)(x x f -= )2
121(<≤-x )(x f 展开成傅立叶级数。
6、将函数)20()(2≤≤=x x x f 分别展开成正弦级数和余弦级数。