实验五  MATLAB在级数中的应用

 

一、实验目的

掌握利用Matlab进行级数运算的方法和技能。

 

二、相关知识

在数学分析或高等数学中,级数一般分为三个部分来叙述,即常数项级数的求和与审敛法则、幂级数的审敛和将函数展开为幂级数、傅立叶级数的性质和将函数展开为傅立叶级数。我们在这个实验中也按照这三个内容来讨论。

(一)常数项级数的求和与审敛

在讨论常数项级数时,我们认为,如果级数的部分和的极限存在,则称该级数收敛,并称此极限为级数的和。在Matlab中,用于级数求和的命令是symsum(),该命令的应用格式为:

            symsum(comiterm,v,a,b)

其中:comiterm为级数的通项表达式,v是通项中的求和变量,ab分别为求和变量的起点和终点。如果ab缺省,则v0变到v-1,如果v也缺省,则系统对comiterm中的默认变量求和。

1:求级数的和。

解:利用Matlab函数symsum设计如下程序:

clear

syms n

f1=(2*n-1)/2^n;

f2=1/(n*(2*n+1));

I1=symsum(f1,n,1,inf)

I2=symsum(f2,n,1,inf)

运行结果为:

I1 =3

I2 =2-2*log(2)

本例是收敛的情况,如果发散,则求得的和为inf,因此,本方法就可以同时用来解决求和问题和收敛性问题。

2:求级数的和。

解:Matlab程序如下:

clear

syms n x

f3=sin(x)/n^2;

f4=(-1)^(n-1)*x^n/n;

I3=symsum(f3,n,1,inf)

I4=symsum(f4,n,1,inf)

运行结果为:

I3 =1/6*sin(x)*pi^2

I4 =log(1+x)

从这个例子可以看出,symsum()这个函数不但可以处理常数项级数,也可以处理函数项级数。

(二)函数的泰勒展开

级数是高等数学中函数的一种重要表示形式,有许多复杂的函数都可以用级数简单地来表示,而将一个复杂的函数展开成幂级数并取其前面的若干项来近似表达这个函数是一种很好的近似方法,在学习级数的时候,我们知道将一个函数展开成级数有时是比较麻烦的,现在我们介绍用Matlab展开函数的方法。

Matlab中,用于幂级数展开的函数为taylor(),其具体格式为:

                      taylor(function,n,x,a)

function是待展开的函数表达式,n为展开项数,缺省是展开至5次幂,即6项,xfunction中的变量,a为函数的展开点,缺省为0,即麦克劳林展开。

3:将函数展开为的幂级数,分别展开至5次和20次。

解:Matlab程序为:

clear

syms x

f=sin(x);

taylor(f)

taylor(f,20)

结果为:

ans =x-1/6*x^3+1/120*x^5

ans=x-1/6*x^3+1/120*x^5-1/5040*x^7+1/362880*x^9-1/39916800*x^11+1/6227020800*x^13-1/1307674368000*x^15+1/355687428096000*x^17-1/121645100408832000*x^19

4:将函数展开为的幂级数,为任意常数。展开至4次幂。

解:Matlab程序为:

clear

syms x m

f=(1+x)^m;

taylor(f,5)

运行结果为:

ans=1+m*x+1/2*m*(m-1)*x^2+1/6*m*(m-1)*(m-2)*x^3+1/24*m*(m-1)*(m-2)*(m-3)*x^4

5:将函数展开为的幂级数。

解:Matlab程序为:

clear

syms x

f=1/(x^2+5*x-3);

taylor(f,5,x,2)

pretty(ans)

结果为:

ans =29/121-9/121*x+70/1331*(x-2)^2-531/14641*(x-2)^3+4009/161051*(x-2)^4

       29            70      2    531      3    4009       4

       ----- - 9/121 x + ------ (x - 2)  - ------- (x - 2)  + ---------- (x - 2)

       121          1331         14641         161051

(三)函数的傅立叶级数展开

我们知道,将一个函数展开为傅立叶级数:

     

其实就是要求出其中的系数,根据三角函数系的正交性,我们可以得到它们的计算公式如下:

这样,结合Matlab的积分命令int()就可以计算这些系数,从而就可以进行函数的傅立叶展开了。

6:求函数上的傅立叶级数。

解:先求出傅立叶系数,程序如下:

clear

syms x n

f=x^2

a0=int(f,x,-pi,pi)/pi

an=int(f*cos(n*x),x,-pi,pi)/pi

bn=int(f*sin(n*x),x,-pi,pi)/pi

运行结果为:

f =x^2

a0 =2/3*pi^2

an =2*(n^2*pi^2*sin(pi*n)-2*sin(pi*n)+2*pi*n*cos(pi*n))/n^3/pi

bn =0

这里,我们得到了傅立叶系数的公式,只要代入具体的n就可以得到结果了。

考虑到不同函数做傅立叶展开时,公式是一致的,因此,我们可以编制一个函数,专门用来计算函数的傅立叶系数,该函数如下:

function [a0,ak,bk]=myfly(f)

syms k x

a0=int(f,x,-pi,pi)/pi;

ak=int(f*cos(k*x),x,-pi,pi)/pi;

bk=int(f*sin(k*x),x,-pi,pi)/pi;

注意,该文件一定要以myfly.m为文件名。

这样得到的是公式,如果要计算出具体的数值,则可以用下面的方法实现:

现将akbk的计算公式分别编制成独立的函数,并以相应的文件名命名。这里先编制两个m文件,其内容分别为:

%fourieran.m

function an=fourieran(f,n)

syms x

an=int(f*cos(n*x),x,-pi,pi)/pi;

%fourierbn.m

function bn=fourierbn(f,n)

syms x

bn=int(f*sin(n*x),x,-pi,pi)/pi;

接着,再编写程序如下:

clear

syms x n

f=x^2

a0=fourieran(f,0);

a=zeros(1,10)

b=zeros(1,10)

for n=1:10

    a(n)=fourieran(f,n);

end

for n=1:10

    b(n)=fourierbn(f,n);

end

即可完成前21个傅立叶系数的计算。

 

三、实验内容

1.求级数的和。

2.求级数的和。

3.将函数展开成的幂级数,取前10项。

4.求出函数在区间上的前11个傅立叶系数,即5

5.将例5的程序进行扩展,使之成为一个能够对给定的函数,给定的系数个数,计算出所有傅立叶系数的通用程序,输入参数为给定的被展开函数和表示系数个数的n

6.完成实验报告。