3.1 单变量函数的极限
3.1.1 单变量函数极限的ε–δ定义
假设已知函数f(x),则极限问题的数学表示为
其物理意义是当自变量x无限接近x0时,函数f(x)无限逼近的值。在一般微积分学教程中会给出如下极限问题的ε–δ定义。
定义3-1 (ε–δ定义)对任意事先选定的ε>0,都存在满足0<|x−x0|<δ的正数δ,使得|f(x)−L|<ε,则称极限为L。
例3-1 常数e是一个无理数,试显示其前32位。
解 由下面的命令可以直接显示所需的位数
>> vpa(exp(sym(1)),32) %用户还可以显示该无理数任意多位数值
其前32位为e≈2.7182818284590452353602874713527。如果将32替换成其他整数,则可以显示任意指定位数。用这种语句最多显示位数为32766位,超过这个位数要求则应该使用循环,参见第I卷。
例3-2 试通过ε–δ定义验证一个重要极限。
解 考虑不等式|(1+1/x)x−e|<ε,这个不等式是一个关于x的非线性的不等式,不借助计算机工具不能直接求解该不等式。其实,可以将该不等式的求解转换为解方程问题,如果给定ε的值,将(1+1/x)x−e−ε=0方程的边界求出来,该边界的绝对值就是我们期待的δ。
MATLAB中提供了单变量方程的简易求解函数fzero(),如果选定ε=0.01,则通过求解方程得出D=0.0073,表明若能保证−0.0073⩽x⩽0.0073,则(1+1/x)x与e的距离将小于ε=0.01。
>> eps0=0.01; f=@(x)(1+x)^(1/x)-exp(1)-eps0; D=abs(fzero(f,0.1))
可以用下面的语句绘制出x∈(−0.01,0.01)区间的函数曲线,如图3-1所示。从图中可见,如果选择了误差限ε=0.01,则可以找到一个δ的值,使得−δ⩽x⩽δ时,能保证−ε⩽L−e⩽ε。如果缩小期望的误差限ε,通过非线性方程的求解方法都能找到相应的边界δ,确保−δ⩽x⩽δ时,实际的误差满足预先指定的误差限要求。
图3-1 x=0附近的曲线
还可以尝试一些更小的误差限ε,如10−3,…,10−8,用下面的循环结构可以解出对应的边界δ,如表3-1所示。可见,不论选择多么小的ε都能找到对应的δ,并且可以发现,δ几乎与ε的选择呈现线性变化,而这些现象不借助计算机是不得而知的。
表3-1 选择不同ε时得出的δ
如果想进一步减小ε,利用fzero()这类双精度框架下的函数就很难完成了,必须使用符号运算实现,得出的δ=7.358×10−11,仍然与ε的变化呈线性关系。再进一步减小ε,即使使用符号运算的框架也很难求出δ。
>> syms x; f=(1+x)^(1/x)-exp(sym(1))-1e-10; x1=vpasolve(f)
3.1.2 函数极限的计算机求解
如果从ε–δ定义求一个函数的极限是很麻烦的,所以在“高等数学”或“数学分析”课程中介绍了大量的极限求解方法、公式和技巧,例如,需要记忆两个基本的极限公式与,需要灵活地运用各种各样的方法,如四则运算方法、中值定理等,还需要掌握学习了微分后才知道的L'Hôpital法则,甚至更高深的方法,如Taylor级数展开、定积分法、Stolz–Cesàro定理等,均需花费大量的时间反复练习,才能较好地学会极限求解问题。并且,在实际求解极限问题时,能不能得出问题的解,很大程度上取决于求解者掌握的公式与技巧。
在本书中我们尽量回避这些底层的问题,将极限问题直接用计算机理解的格式输入计算机,让计算机去完成这些烦琐的工作,剩下的任务就是等待和解释计算机给出的结果了。
重新考虑前面给出的极限问题
其中x0可以是一个确定的值,也可以是无穷大量,例如x→∞,还可以是另一个已知的函数或变量。极限问题在MATLAB符号运算工具箱中可以使用limit()函数直接求出,该函数的调用格式为
L=limit(f,x0), %默认符号变量
L=limit(f,x,x0), %一般求极限语句
在求解之前应该先申明自变量x,再用符号表达式的形式定义原函数f,若x0为∞,则可以用inf直接表示。
如果函数中只有一个符号变量,或f(x)是由函数的格式给出的,则可以在调用语句中忽略自变量x。由symvar()函数可以提取出符号表达式f中符号变量的列表,该函数的调用格式为list=symvar(f)。
下面将通过例子演示基于MATLAB语言的求解极限的方法。
例3-3 求解另一个重要的极限问题。
解 求解函数的极限问题需要下列三个步骤:
(1)申明必要的符号变量,这里需要申明的是x;
(2)将f(x)=sin x/x函数用MATLAB描述出来;
(3)调用MATLAB函数limit()直接求解。
在MATLAB的工作窗口内可以直接给出下面的语句实现这三个步骤,得出原始问题的极限为L=1。
>> syms x; f(x)=sin(x)/x; L=limit(f,0) %直接求解极限问题
由于函数f(x)在输入符号表达式f中已经使用了函数形式,所以在调用limit()函数时可以略去x直接求解。当然也可以调用下面的语句求解,得出完全一致的结果。
>> L=limit(f,x,0)
有了MATLAB这样强有力的工具,还可以由下面的语句绘制出x∈(−0.1,0.1)区间的函数曲线,如图3-2所示,可以利用该曲线观察极限的逼近过程。由于x=0点函数没有定义,所以在生成x向量时有意引入一个小的偏移量,避开x=0点。
图3-2 x=0附近逼近极限值的过程
例3-4 试求解极限问题。
解 利用MATLAB语言,应该首先申明a,b和x为符号变量,然后定义函数表达式,最后调用limit()函数求出给定函数的极限,得出的极限为eab。从下面的语句看,求解这样的问题和例3-3对用户来说一样简单。
>> syms x a b; f(x)=x*(1+a/x)^x*sin(b/x); L=limit(f,inf) %直接计算
虽然在原函数中使用了三个符号变量,由v=symvar(f)语句也可以提取出这三个符号变量v为向量[a,b,x],但由于原函数已经申明成了自变量x的函数,所以在语句调用时即使略去x,也可以准确地得出关于x的极限。
例3-5 试求极限。
解 求解这个极限问题时,先申明符号变量,再将函数输入MATLAB工作空间,然后调用limit()函数即可以得出极限L=1/12。
>> syms x; f(x)=1/2/(1-sqrt(x))-1/3/(1-x^(1/3)); L=limit(f,1)
例3-6 试求下面极限
解 尽管给出的函数看起来很复杂,仍可以使用MATLAB对其直接描述,然后调用limit()函数直接求解,得出的结果为L=7 ln 5e−a−b。
3.1.3 复合函数的极限
如果给出某个复合函数,这个复合函数由若干个其他函数组成,若已知这些组成函数的极限,则可以求解复合函数的极限。
例3-7 已知,,试求。
解 由常规方法输入复合函数,并对其求导,再将已知的数值代入结果,则得出的结果为,在实函数领域,其结果应该为−6。
3.1.4 序列的极限
如果给出了某序列的表达式,也可以调用limit()函数直接求解。在一般情况下,没有必要刻意地将n设置为整型符号变量。
例3-8 试求出下面序列的极限
解 从给出的趋势看,第一项为21/2,第二项为,第三项为,第四项为,可以总结出,第n项为,显然,指数项为等比级数,首项为a0=1/2,公比为q=1/2,项数为n,这样第n项的指数为,所以可以直接由下面的语句求出其极限,为L=2。
这里,利用等比级数的公式求出了2的指数,事实上,MATLAB是可以计算有穷级数与无穷级数求和问题的,第6章将会介绍相关的内容。
如果取一系列的n值,则可以绘制出序列的演化过程,如图3-3所示,可以看出该序列到第七项就累计到极限1%的误差限之内了。
>> n0=1:20; f=F(n0); stem(n0,f)
例3-9 试求出序列的极限。
解 序列极限的求解方法与函数极限完全一致,先声明符号变量,然后用符号表达式描述序列,最后调用limit()函数直接求解。由下面的语句可以得出F=0。
图3-3 序列的演变
例3-10 试求出极限
解 该极限表达式既包括序列又包括函数,但这丝毫未给求解带来任何困难,可以申明两个符号变量n和x,这样用下面语句可以直接得出问题的极限为ex/(x2+1)。该极限问题的求解容易程度对用户来说也与sin x/x极限相仿。
对序列极限而言,一般没有必要将符号变量n设置为整数型符号变量。
很多序列极限问题将涉及序列求和与求积的MATLAB函数,暂时不能求解,这类问题留待6.1节与6.3节叙述,这里只给出一个例子与求解代码,不作讲解。
例3-11 试求序列极限
解 由下面的代码将得出问题的解为L=n(n+1)/4。
>> syms n x k; L=limit((1-symprod(cos(k*x)^(1/k),k,1,n))/x^2,x,0)
3.1.5 分段函数的极限
在学习手工推导函数或序列极限时,有的时候需要分几种情况考虑。如果使用MATLAB这样的工具,可以调用limit()函数直接求解,得出所需的极限,有时候得出的极限是由分段函数表示的。
例3-12 试求出和。
解 如果手工求解这样问题,需要分若干种情况分别讨论,如果使用MATLAB求解,只需直接给出下面的命令即可。
>> syms x n real; f=x^n; L1=limit(f,n,inf), L2=limit(f,x,inf)
得出的结果均为分段函数,其中L2的描述为
piecewise([n == 0,1],[0 < n,Inf],[n < 0,0])
这两个极限的结果可以解读成(其中L1结果最末一个条件有误,应该包括x=0,即−1<x<1)
3.1.6 无穷小量与无穷大量
这里首先给出几个相关的定义,然后介绍这类问题的求解方法。
定义3-2 若,则称f(x)为x→x0时的无穷小量(infinitesimal)。
定义3-3 对一个无穷小量的函数,如果,其中c为常数,p>0,则称f(x)为p阶无穷小量。
定义3-4 假设f(x)与g(x)都是无穷小量,如果,且c=0,则f(x)称为g(x)的高阶无穷小量,记作f(x)=o(g(x);如果c为非零常数,则f(x)与g(x)为同阶无穷小量,或f(x)与cg(x)等价,记作f(x)∼cg(x)。
定义3-5 如果,则称f(x)为x→x0时的无穷大量。
定义3-6 若,其中c为常数,p>0,则称f(x)为p阶无穷大量。
例3-13 试证明x→0时。
解 如果想证明两个无穷小量函数等价,则应该求其比值的极限,如果这个极限等于有界非零常数,则两个无穷小量是等价的。这个例子可以用下面的语句直接验证,因为极限的值为−1,所以这个函数等价。
>> syms x; f(x)=asin(x/sqrt(1-x^2))/log(1-x); limit(f,0)