关于傅里叶级数的课程设计_第1页
关于傅里叶级数的课程设计_第2页
关于傅里叶级数的课程设计_第3页
关于傅里叶级数的课程设计_第4页
关于傅里叶级数的课程设计_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、0 目目 录录 目录 .1 1.傅里叶级数 .2 2.数学模型 .2 2.1 理论分析.2 2.2 实例分析.2 3.程序探究 .3 4.算法设计 .4 5.程序设计 .4 6.图形界面设计 .6 6.1 界面设计 .6 6.2 主程序代码 .6 7 测试数据 及结果 .11 8.改进之处 .12 9.总结 .12 参考文献 .14 1 关关于于傅傅里里叶叶级级数数的的课课程程设设计计 一一傅傅里里叶叶级级数数 1804 年,傅里叶提出 “在有限区间上由任意图形定义的任意函数可以表 示为单纯的正弦和余弦函数之和 ”。傅氏级数的展开被称为最辉煌大胆的猜 想。从分析的角度来看,一些复杂的周期现象用

2、无限多个正弦函数余弦函数叠 加来表示。从物理意义上讲,信号可以分解成为一系列的简谐波的复合,并可 借由此来分析信号波的一些基本特征。此次课程设计的主要目的是用动画演示 来说明当项数逐渐增大时,函数傅里叶级数的图像逐渐逼近原函数。 二二. 数数学学模模型型 理论分析 数学上定义:若函数 f(x)在区间-,可积,则称 (n=0,1,2,.), nxdxxfancos)( 1 nxdxxfbnsin)( 1 (n=0,1,2,3,.)是函数 f(x)的傅里叶系数。以函数的傅里叶为级数的三角 级数的傅里叶级数称为函数f(x)sincos( 2 1 0 nxbnxa a n n n 当讨论到级数,不容忽

3、视的是其部分和表示)sincos( 2 )( 1 0 kxbkxa a xS k n k kn 的是其前 2n+1 项的和。 若 x 是函数 f(x)的第一类间断点,则函数 f(x)的傅里叶级数收敛于函 数 f(x)在点 x 的左、右极限平均值,即 ,若 x 为连续点,则)sincos( 2 )0()0( 2 1 1 0 nxbnxa a xfxf n n n ,则函数 f(x)的傅里叶级数收敛于 f(x)。)()0()0(xfxfxf 实例分析 将函数 展成傅里叶级数。 x x xg 0, 1 , 01 )( 2 可求得 是奇数, 是偶数 n n nxdxxgbaa nn , n 4 ,0

4、sin)( 2 ,0,0 0 0 于是有 .|0, 12 ) 12sin(4 )(.|0, ) 5 5sin 3 3sin 1 sin ( 4 )( 1 x n xn xgx xxx xg n k 即 三三. .程程序序探探究究 对于这个特例函数展开成傅里叶级数,我首先想到的是作图表现其趋近程 度。然而通过数学计算,可以得到这个函数的傅里叶级数展开形式,所以,没 有通过计算机来算其傅里叶展开系数,直接用已知的函数g(x)进行绘图。 程序如下: function FULIYE(hedit,hlist) n=str2num(get(hedit,String);%获取编辑框字符并转化为数字 n1=g

5、et(hlist,Value);%获取列表框选项序号 colmat=g,r,y,k;%创建列表框取值的字符向量 axis(-4,4,-2,2) x=-pi:0.005:pi; g=0; plot(0,4,1,1,colmat(n1) hold on plot(0,-4,-1,-1,colmat(n1) for i=1:1:n y=sin(2*i-1)*x)/(2*i-1); g=g+(4/pi)*y; plot(x,g,colmat(1+mod(i,3) pause(1) 3 end hold off 四四. .算算法法设设计计 现在由特例的函数向一般化转换,当然问题只能一步一步来,先在- p

6、i,0和0,pi分别输入函数 (向量形式 ),然后使用积分函数,算出a0,即 初始化 S,然后进入循环,不断重复积分算出a(i),b(i),可由其构造出关于 S 的表达式,再将 x 从-pi,pi的函数用图画出。 第 1 步 获取由用户输入的向量形式的函数,转化成在线函数。同时获取用户 输入的项数 n 第 2 步 将 x 符号化,并用 int 函数积分算出 s,即对 s 的初始化。 第 3 步 对于 i=1,2,3,.n,反复做以下操作 将函数积分算得 a(i)和 b(i) 令 x 从-pi 到 pi,计算 s 的值,并将 s 转化为数值形式 作图画出 s 的图像,并将图形保持 再将 x 符号

7、化,以便再次积分 每次画图需暂停来观察效果 第 4 步 循环结束 五五程程序序设设计计 这里将原函数和级数展开的函数分开,避免其中的语句相互影响,也使程 序更加简明清晰。 原函数作图的函数 function ORIGIN(hlist,hedit1,hedit2) n1=get(hlist,Value);%获取列表框选项序号 colmat=g,r,y,k;%创建列表框取值的字符向量 axis(-4,4,-2,2) 4 x=-pi:0.005:0; y1=inline(get(hedit1,String); g1=y1(x); plot(x,g1,colmat(n1) x=0:0.005:pi;

8、y2=inline(get(hedit2,String); g2=y2(x); hold on plot(x,g2,colmat(n1) 级数作图的函数 function FULIYE3(hedit,hlist,hedit1,hedit2) n=str2num(get(hedit,String);%获取编辑框字符并转化为数字 n1=get(hlist,Value);%获取列表框选项序号 colmat=g,r,y,k;%创建列表框取值的字符向量 f1=inline(get(hedit1,String);%获取被积函数 f2=inline(get(hedit2,String);%获取被积函数 sy

9、ms x s=(1/pi)*(int(sym(f1),x,-pi,0)+int(sym(f2),x,0,pi)/2; for i=1:1:n a(i)=(1/pi)*(int(sym(f1)*cos(i*x),x,- pi,0)+int(sym(f2)*cos(i*x),x,0,pi); b(i)=(1/pi)*(int(sym(f1)*sin(i*x),x,- pi,0)+int(sym(f2)*sin(i*x),x,0,pi); x=-pi:0.05:pi; s=eval(s+a(i)*cos(i*x)+b(i)*sin(i*x); plot(x,s,colmat(1+mod(i,3) h

10、old on 5 syms x%要将其符号化,方便循环中下次积分计算 pause(1) end 六六用用图图形形界界面面设设计计傅傅里里叶叶级级数数应应用用程程序序 1.界面设计 设计如下图所示的图形界面: 创建绘图区的坐标系;创建输入项数的组合框,它包含1 个关于“输入 项数”文本框, 1 个关于显示用户输入的项数的编辑框;创建输入函数的组合 框,它包含 2 个关于“输入区间 ”的文本框, 2 个关于显示用户输入函数的 编辑框;创建一个关于绘图颜色的组合框,它包含1 个关于“选择绘图颜色 ” 的文本框, 1 个关于 4 种颜色的列表框。 2 个按钮分别控制原函数和级数的 绘图,1 个关闭按钮

11、。 2.主程序代码 %创建可调窗体 h0=figure(Menubar,none,NumberTitle,off,Name,傅里叶级数 6 ,. Units,normalized,Position,300/1366,200/768,700/1366,400/76 8); %设置绘图区的坐标系 haxs=axes(Parent,h0,Units,normalized,Position,25/700,25/ 400,300/700,300/400); %创建输入项数的组合框 uicontrol(Parent,h0,Style,frame,Units,normalized,. Position,25

12、/700,345/400,300/700,45/400); uicontrol(Parent,h0,Style,text,Units,normalized,. Position,35/700,350/400,100/700,25/400,String,输入项数 ,. Horizontal,center,FontSize,10); hedit=uicontrol(Parent,h0,Style,edit,Units,normalized,. Position,145/700,355/400,150/700,25/400,String,3,FontSiz e,10); %创建输入函数的组合框 ui

13、control(Parent,h0,Style,frame,Units,normalized,. Position,360/700,220/400,300/700,170/400); htext1=uicontrol(Parent,h0,Style,text,Units,normalized,. . Position,380/700,355/400,120/700,25/400,String,- pi,0上函数为 (向量),. Horizontal,center,FontSize,10); htext2=uicontrol(Parent,h0,Style,text,Units,normaliz

14、ed,. . Position,380/700,325/400,120/700,25/400,String,0,pi 7 上函数为 (向量),FontSize,10); htext3=uicontrol(Parent,h0,Style,text,Units,normalized,. . Position,380/700,265/400,120/700,25/400,String,函数区 间为,FontSize,10); htext4=uicontrol(Parent,h0,Style,text,Units,normalized,. . Position,380/700,235/400,120/

15、700,25/400,String,函数表 达式为,FontSize,10); hedit1=uicontrol(Parent,h0,Style,edit,Units,normalized,. . Position,520/700,355/400,100/700,25/400,String,FontSize ,10); hedit2=uicontrol(Parent,h0,Style,edit,Units,normalized,. . Position,520/700,325/400,100/700,25/400,String,FontSize ,10); hedit3=uicontrol(P

16、arent,h0,Style,edit,Units,normalized,. . Position,520/700,265/400,100/700,25/400,String,FontSize ,10); hedit4=uicontrol(Parent,h0,Style,edit,Units,normalized,. . Position,520/700,235/400,100/700,25/400,String,FontSize ,10); %创建填充颜色列表的组合框 uicontrol(Parent,h0,Style,frame,Units,normalized,. 8 Position,

17、360/700,100/400,200/700,100/400); uicontrol(Parent,h0,Style,text,Units,normalized,. Position,365/700,150/400,180/700,40/400,String,选择原 函数的绘图颜色 ,. Horizontal,center,FontSize,10); hlist=uicontrol(Parent,h0,Style,popup,Units,normalized,. . Position,370/700,120/400,180/700,40/400,. String,绿色|红色|黄色|黑色,Fo

18、ntSize,10); %创建绘图与关闭按钮 hpush1=uicontrol(Parent,h0,Style,push,Units,normalized,. . Position,580/700,100/400,100/700,40/400,String,级数绘 图,. FontSize,10,CallBack,FULIYE3(hedit,hlist,hedit1,hedit2); hpush2=uicontrol(Parent,h0,Style,push,Units,normalized,. . Position,580/700,160/400,100/700,40/400,String,

19、原函数 绘图,. FontSize,10,CallBack,ORIGIN(hlist,hedit1,hedit2); hpush3=uicontrol(Parent,h0,Style,push,Units,normalized,. . Position,480/700,30/400,100/700,40/400,String,关闭,. FontSize,10,CallBack,close(h0); 需被调用的函数 ORIGIN.m 需被存放在 MATLAB 的 work 目录下。该函数的代 码如下: 9 %原函数作图程序 function ORIGIN(hlist,hedit1,hedit2)

20、 n1=get(hlist,Value);%获取列表框选项序号 colmat=g,r,y,k;%创建列表框取值的字符向量 axis(-4,4,-2,2) x=-pi:0.005:0; y1=inline(get(hedit1,String); g1=y1(x); plot(x,g1,colmat(n1) x=0:0.005:pi; y2=inline(get(hedit2,String); g2=y2(x); hold on plot(x,g2,colmat(n1) 需被调用的函数 FULIYE3.m 需被存放在 MATLAB 的 work 目录下。该函数 的代码如下: %级数作图程序 fun

21、ction FULIYE3(hedit,hlist,hedit1,hedit2) n=str2num(get(hedit,String);%获取编辑框字符并转化为数字 n1=get(hlist,Value);%获取列表框选项序号 colmat=g,r,y,k;%创建列表框取值的字符向量 f1=inline(get(hedit1,String);%获取被积函数 f2=inline(get(hedit2,String);%获取被积函数 syms x s=(1/pi)*(int(sym(f1),x,-pi,0)+int(sym(f2),x,0,pi)/2; for i=1:1:n a(i)=(1/p

22、i)*(int(sym(f1)*cos(i*x),x,- 10 pi,0)+int(sym(f2)*cos(i*x),x,0,pi); b(i)=(1/pi)*(int(sym(f1)*sin(i*x),x,- pi,0)+int(sym(f2)*sin(i*x),x,0,pi); x=-pi:0.05:pi; s=eval(s+a(i)*cos(i*x)+b(i)*sin(i*x); plot(x,s,colmat(1+mod(i,3) hold on syms x pause(1) end 7 7测测试试 在-pi,0和0,pi区间键入 “x.2”,在输入项数中输入 “8”,点击 按钮“原

23、函数绘图 ”及“级数绘图 ”,得出如下结果: 八八需需改改进进的的地地方方 虽然从特定的函数绘图进而到由用户任意给出特定-pi,pi区间可积的 11 函数绘图,这是很大的一个进步,但文中所述傅里叶级数的展开函数仍然具有 一定的局限性,若任意区间的周期函数的又该如何绘制其图像呢?在程序的图 形界面中已给出这样的两个编辑框,用来输入任意的区间及在此区间上的函数 表达式。但是关于此的函数还没给出,这需要编者进一步的探究和完善。 九九总总结结 以前一直跟着老师学习 MATLAB,无非更多的是跟着老师的思路走,跟着 敲代码。然而老师有多年的教学经验再加上课程时间的限制,从而避免了程序 设计中的很多弯路,

24、事实上这些曲曲折折正是我们所迫切需要的。所学的程序 虽然表面上看着懂了,实际给一张白纸你却不知从何下手。这就说明并不是真 正领会了程序的精华所在,当你真正听明白的时候,是你能将这些东西吸收转 化再以自己的形式表现出来。对于这方面,我很缺乏实际的动手操作,此次的 课程设计给了我一次心理和能力的锻炼机会。 心理上来说,自己平时没怎么动手练,有很大的担心是自己不能完成一篇 有质量的课程设计,开始的选题也是纠结了一段时间。有想过就按照老师的汽 车加油类似的完成一篇解决实际生活问题的课程设计,但终究觉得缺乏一定的 挑战性。在复习复变函数与积分变换的当口,我发现的傅里叶级数的重要实际 应用意义,于是就开启了信誓旦旦的探究旅程。初期的时候只是把数分书上的 一个特定的傅里叶级数展开进行了作图,成功之后就顿然觉得若只是这样的话 程序有很大的局限性永远只能展开表示这一个特定的函。通过老师的指点,我 拓宽了下思路,先尝试一下 -pi,pi的函数级数展开。程序基本形成后,发 现所使用的积分函数一直有问题,我对照了之前老师所写的矩形积分的程序仍 未果。最后终于在同学耐心帮助下不停的尝试,最终程序运行正确。虽然程序 设计是很有难度的,但其中翻阅参考书籍

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论