1、 展成傅里叶级数。可求得于是有三.程序探究对于这个特例函数展开成傅里叶级数,我首先想到的是作图表现其趋近程度。然而经过数学计算,能够得到这个函数的傅里叶级数展开形式,因此,没有经过计算机来算其傅里叶展开系数,直接用已知的函数g(x)进行绘图。程序如下:function FULIYE(hedit,hlist)n=str2num(get(hedit,String);%获取编辑框字符并转化为数字n1=get(hlist,Value);%获取列表框选项序号colmat=g,ryk;%创立列表框取值的字符向量axis(-4,4,-2,2)x=-pi:0.005:pi;g=0;plot(0,4,1,1,c
2、olmat(n1)hold onplot(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)end hold off 四.算法设计现在由特例的函数向一般化转换,当然问题只能一步一步来,先在-pi,0和0,pi分别输入函数(向量形式),然后使用积分函数,算出a0,即初始化S,然后进入循环,不断重复积分算出a(i),b(i),可由其构造出关于S的表示式,再将x从-pi,pi的函数用图画出。第1步 获取由用户输入的向量形式的函数,转化成在
3、线函数。同时获取用户输入的项数n第2步 将x符号化,并用int函数积分算出s,即对s的初始化。第3步 对于i=1,2,3,.n,重复做以下操作 将函数积分算得a(i)和b(i) 令x从-pi到pi,计算s的值,并将s转化为数值形式 作图画出s的图像,并将图形保持 再将x符号化,以便再次积分 每次画图需暂停来观察效果第4步 循环结束五程序设计 这里将原函数和级数展开的函数分开,避免其中的语句相互影响,也使程序更加简明清晰。原函数作图的函数 function ORIGIN(hlist,hedit1,hedit2)0;y1=inline(get(hedit1,g1=y1(x);plot(x,g1,c
4、olmat(n1)x=0:y2=inline(get(hedit2,g2=y2(x);plot(x,g2,colmat(n1)级数作图的函数 function FULIYE3(hedit,hlist,hedit1,hedit2)f1=inline(get(hedit1,%获取被积函数f2=inline(get(hedit2,syms xs=(1/pi)*(int(sym(f1),x,-pi,0)+int(sym(f2),x,0,pi)/2;a(i)=(1/pi)*(int(sym(f1)*cos(i*x),x,-pi,0)+int(sym(f2)*cos(i*x),x,0,pi);b(i)=(
5、1/pi)*(int(sym(f1)*sin(i*x),x,-pi,0)+int(sym(f2)*sin(i*x),x,0,pi); x=-pi:0.05: 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%要将其符号化,方便循环中下次积分计算六用图形界面设计傅里叶级数应用程序1.界面设计设计如下图所示的图形界面:创立绘图区的坐标系;创立输入项数的组合框,它包含1个关于“输入项数”文本框,1个关于显示用户输入的项数的编辑框;创立输入函数的组合框,它包含2个关于“输入区间”的文本框,2个
6、关于显示用户输入函数的编辑框;创立一个关于绘图颜色的组合框,它包含1个关于“选择绘图颜色”的文本框,1个关于4种颜色的列表框。2个按钮分别控制原函数和级数的绘图,1个关闭按钮。2.主程序代码 %创立可调窗体h0=figure(MenubarnoneNumberTitleoffName傅里叶级数,. UnitsnormalizedPosition,300/1366,200/768,700/1366,400/768);%设置绘图区的坐标系haxs=axes(Parent,h0,25/700,25/400,300/700,300/400);%创立输入项数的组合框uicontrol(Stylefram
7、e,. ,25/700,345/400,300/700,45/400);text,35/700,350/400,100/700,25/400,输入项数HorizontalcenterFontSize,10);hedit=uicontrol(edit,145/700,355/400,150/700,25/400,3%创立输入函数的组合框,360/700,220/400,300/700,170/400);htext1=uicontrol(,380/700,355/400,120/700,25/400,-pi,0上函数为(向量)htext2=uicontrol(,380/700,325/400,12
8、0/700,25/400,0,pi上函数为(向量)htext3=uicontrol(,380/700,265/400,120/700,25/400,函数区间为htext4=uicontrol(,380/700,235/400,120/700,25/400,函数表示式为hedit1=uicontrol(,520/700,355/400,100/700,25/400,hedit2=uicontrol(,520/700,325/400,100/700,25/400,hedit3=uicontrol(,520/700,265/400,100/700,25/400,hedit4=uicontrol(,5
9、20/700,235/400,100/700,25/400,%创立填充颜色列表的组合框,360/700,100/400,200/700,100/400);,365/700,150/400,180/700,40/400,选择原函数的绘图颜色hlist=uicontrol(popup,370/700,120/400,180/700,40/400,.绿色|红色|黄色|黑色%创立绘图与关闭按钮hpush1=uicontrol(push,580/700,100/400,100/700,40/400,级数绘图,10,CallBackFULIYE3(hedit,hlist,hedit1,hedit2)hpu
10、sh2=uicontrol(,580/700,160/400,100/700,40/400,原函数绘图ORIGIN(hlist,hedit1,hedit2)hpush3=uicontrol(,480/700,30/400,100/700,40/400,关闭close(h0)需被调用的函数ORIGIN.m需被存放在MATLAB的work目录下。该函数的代码如下:%原函数作图程序function ORIGIN(hlist,hedit1,hedit2) 需被调用的函数FULIYE3.m需被存放在MATLAB的work目录下。%级数作图程序function FULIYE3(hedit,hlist,he
11、dit1,hedit2) b(i)=(1/pi)*(int(sym(f1)*sin(i*x),x,-pi,0)+int(sym(f2)*sin(i*x),x,0,pi); syms x7测试在-pi,0和0,pi区间键入“x.2”,在输入项数中输入“8”,点击按钮“原函数绘图”及“级数绘图”,得出如下结果:八需改进的地方虽然从特定的函数绘图进而到由用户任意给出特定-pi,pi区间可积的函数绘图,这是很大的一个进步,但文中所述傅里叶级数的展开函数依然具有一定的局限性,若任意区间的周期函数的又该如何绘制其图像呢?在程序的图形界面中已给出这样的两个编辑框,用来输入任意的区间及在此区间上的函数表示式。
12、可是关于此的函数还没给出,这需要编者进一步的探究和完善。九总结以前一直跟着老师学习MATLAB,无非更多的是跟着老师的思路走,跟着敲代码。然而老师有多年的教学经验再加上课程时间的限制,从而避免了程序设计中的很多弯路,事实上这些曲曲折折正是我们所迫切需要的。所学的程序虽然表面上看着懂了,实际给一张白纸你却不知从何下手。这就说明并不是真正领会了程序的精华所在,当你真正听明白的时候,是你能将这些东西吸收转化再以自己的形式表现出来。对于这方面,我很缺乏实际的动手操作,此次的课程设计给了我一次心理和能力的锻炼机会。心理上来说,自己平时没怎么动手练,有很大的担心是自己不能完成一篇有质量的课程设计,开始的选
13、题也是纠结了一段时间。有想过就按照老师的汽车加油类似的完成一篇解决实际生活问题的课程设计,但终究觉得缺乏一定的挑战性。在复习复变函数与积分变换的当口,我发现的傅里叶级数的重要实际应用意义,于是就开启了信誓旦旦的探究旅程。初期的时候只是把数分书上的一个特定的傅里叶级数展开进行了作图,成功之后就顿然觉得若只是这样的话程序有很大的局限性永远只能展开表示这一个特定的函。经过老师的指点,我拓宽了下思路,先尝试一下-pi,pi的函数级数展开。程序基本形成后,发现所使用的积分函数一直有问题,我对照了之前老师所写的矩形积分的程序仍未果。最后终于在同学耐心帮助下不停的尝试,最终程序运行正确。虽然程序设计是很有难
14、度的,但其中翻阅参考书籍和冥思苦想以及最后团队协作的乐趣都是一次难得的亲身体会。能力提高上来说,此次我的确从新学到了很多细小的知识。1. 关于可视化的设计中,为了加入一般化的概念,就需增加文本框和编辑框,所有的窗口需重新调整,把颜色的列表框改成弹出框会更节省空间。2. 在进行级数绘图的时候,我加了一个颜色的数组使得每次绘图的颜色都会有所变化3. 增加一些东西的时候,所有的东西都要重新调试,在单单的函数中不能直接运行程序,因为一些变量都是从主程序中获取的,否则显示无定义。在函数的窗口改动需及时点保存。4. 因为是分段函数,其作图的顺序需谨慎,因为要作两个图,在进行参照比较,故分开用按钮来调用两个
15、作图函数,能够避免代码之间相互影响。5. 期间删改较多指出就是积分和作图部分,积分时所要求的都是字符型,因此要用sym来转化,可是到后面作图,x给出作图区间后就自动被数值化了,级数和s需放在此语句后面(需注意语句的顺序问题),再将x转化成字符型以便在下一次循环中进行积分运算。6. 不断尝试过程中了解到int与quad的不同之处。(quad的一些实现还是未完全懂得)。 int的积分能够是定积分(经过数值积分来进行)也能够是不定积分(经过解析的方法来得出),而quad是数值积分(经过simpson数值积分,用小梯形的面积求和的到),不能算不定积分。8.级数画图是不断累积画图的过程,若项数大到一定程度时,则不能更好的观察趋近程度。在老师的建议下用删除的方法,只显示项数最大时的和式的图像。还需注意的是最后一项要保留不能删掉。 参考文献1 刘玉琏,傅沛仁,林玎,范德馨,刘宁.数学分析讲义下册M高等教育出版社2 江世宏.Matlab语言(第一分册)3 周品,何正风,Matlab数值分析M机械工业出版社 11月第一版
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2