文章目录
-
- 1 状态变化
- 2 极限语言
- 3 序列与函数
- 4 极限常数
-
- 圆周率
π
\pi
- 自然对数e
- 欧拉常数
γ
\gamma
- 圆周率
- 5 洛必达法则
1 状态变化
若将数学整体划分为三类,则可概括为代数、几何与分析。对于前两者,我们很早就建立了直观的概念,对于空间结构及其性质的研究,即为几何;以数为核心的研究领域,即为代数。
而分析
则具备更多的非数学的内涵,误导性很强,初学者若望文生义,则更倾向于将“分析”理解为一门数学技巧,而非数学领域。
初学数学分析时,是将其等同为微积分的,而微积分的理论基础建立在极限之上。所以,极限可作为分析学的根基,为此,需要去理解极限的本质,而极限本身则是一个动态的过程,例如下面这个重要极限
lim
x
→
0
s
i
n
(
x
)
x
=
1
\lim_{x\to 0}\frac{sin(x)}{x}=1
x→0limxsin(x)=1
对于上式,表示当x趋于0的时候,这个分式等于1,需要注意,这里是等于号,而非约等。当我们以初等的观念去理解这个等式的时候,会自动附加一些特殊的约定:
-
x
→
0
x\to0
x
=
0
x=0
- 0是有阶数的,对于
0
m
0
n
\frac{0^m}{0^n}
m
>
n
m>n
m
<
n
m<n
m
=
n
m=n
-
sin
0
\sin0
0
0
通过这三个约定,可以很方便地去计算一切涉及到
sin
0
\sin0
sin0和
0
0
0的比值问题。但这种理解并不自然,随着接触的极限表达式越来越多,需要更多的约定来促使极限理论趋于完整。
如以一种动态的眼光去审视这个重要极限,可能理解会发生变化。考虑到画图的方便,对上式稍作改动,
lim
x
→
∞
x
sin
1
x
=
1
\lim_{x\to\infty}x\sin\frac{1}{x}=1
x→∞limxsinx1=1
则令
y
=
x
sin
1
x
y=x\sin\frac1 x
y=xsinx1
则随着
x
x
x不断变大,
y
y
y将不断地趋近于1,如图所示
其python代码为
#导入数学计算和绘图包,后面所有代码都需要导入,但不在
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(1,100) #定义x为1到100的数组,即1,2...99
y = x*np.sin(1/x)
plt.plot(x,y) #绘制y对x的变化关系
plt.show() #将图像显示在屏幕上
- 1
- 2
- 3
- 4
- 5
- 6
- 7
这个趋势表明,极限是一种动态过程,相应地分析是建立在状态变化上的一种动态的数学。
一旦建立了这种动态的思维,就会发现原本安定本分的数学世界也发生了微妙的变化,例如,我们又将如何理解1
这个整数。
例如无限循环小数0.999...=1
这个反直觉的等式是否严格。在初等的观点看来,可以很容易得到
10
×
0.999…
=
9.999…
→
(
10
−
1
)
∗
0.999…
=
9
→
0.999…
=
1
10 \times 0.999…=9.999…\to (10-1)*0.999…=9\to0.999…=1
10×0.999...=9.999...→(10−1)∗0.999...=9→0.999...=1。
进而敏锐地发现,若用一种不厌其烦的方式去求解分式
1
1
\frac{1}{1}
11,会更加自然地得到0.999...
但无论如何,0.999...=1
是反直觉的,反来自于初等数学的直觉。换句话说,初等数学的直觉存在矛盾,我们需要一个更加严格的有关极限的定义和表示,尤其需要建立一种可以称之为相等的映射关系。
2 极限语言
初学数学分析,很多人都对
ε
−
N
\varepsilon-N
ε−N深恶痛绝,更妙的是,不理解这种表达方式,对做题似乎影响不大。大部分人通过加深对上面的那三个约定(以及更多约定)的记忆来完成解题,从而避免了加深对数学对象的理解。
但
ε
−
N
\varepsilon-N
ε−N语言并不难理解,回想初次接触无穷这个概念的时候,最常用到的案例就是论证自然数的个数,即无论你举出一个多么大的自然数,我都能举出一个更大的数,所以自然数是无穷的。
相应地,现有一数列
{
x
n
}
\{x_n\}
{xn},随着n越来越大,若
x
n
x_n
xn也趋于无穷大,则可用相同的方式来表述:无论你举出一个多么大的数
E
E
E,我都可以找到一个
n
n
n,使得
x
n
>
E
x_n>E
xn>E。但和自然数不同,这个数列未必单调,也未必发散,所以需要另加上一句对于所有m>n
,有
x
m
>
E
x_m>E
xm>E。这样就能确保我们的这个数列
x
n
>
E
x_n>E
xn>E是发散的了。
至此,无穷极限已经获得了一个规范的定义:假定对于任意大的
E
>
0
E>0
E>0,都存在正整数
N
N
N,使得一切
n
>
N
n>N
n>N,不等式
∣
x
n
∣
>
E
|x_n|>E
∣xn∣>E成立,则称序列
x
n
{x_n}
xn的极限是
∞
\infty
∞,记作
lim
n
→
∞
x
n
=
∞
\lim_{n\to\infty}x_n=\infty
limn→∞xn=∞。
有穷极限亦然,对于数列
{
x
n
}
\{x_n\}
{xn},如果当
n
→
∞
n\to\infty
n→∞时,
x
n
=
a
x_n=a
xn=a,则对于所有更大的
n
n
n,都使得
x
n
x_n
xn更接近
a
a
a。
ε
\varepsilon
ε就是对这种更接近
的一种描述,由此而得到了对有穷极限的定义:
假定对于任意小的
ε
\varepsilon
ε,都存在正整数
N
N
N,使得对于一切的
n
>
N
n>N
n>N,不等式
∣
x
n
−
a
∣
<
ε
|x_n-a|<\varepsilon
∣xn−a∣<ε
则称序列
{
x
n
}
\{x_n\}
{xn}以
a
a
a为极限,或者收敛于
a
a
a,记为
lim
n
→
∞
x
n
=
a
\lim_{n\to\infty}x_n=a
limn→∞xn=a。
在这种极限观点下,回头再看上文所列举的两个式子,可能会显得更加严谨。首先,对于重要极限
lim
x
→
∞
x
s
i
n
(
1
x
)
=
1
\lim_{x\to\infty}xsin(\frac{1}{x})=1
limx→∞xsin(x1)=1,假设
ε
=
0.01
\varepsilon=0.01
ε=0.01,那么选取
N
=
10
N=10
N=10,
x = np.arange(10,100)
y = 1-x*np.sin(1/x)
plt.plot(x,y)
plt.show()
- 1
- 2
- 3
- 4
其图像为
可见,当
x
>
N
x>N
x>N时,
∣
x
sin
(
1
x
)
−
1
∣
<
ε
|x\sin(\frac{1}{x})-1|<\varepsilon
∣xsin(x1)−1∣<ε。由于
ε
\varepsilon
ε可任意选取,故可以继续减小
ε
\varepsilon
ε的值,但无论
ε
\varepsilon
ε小到什么程度,我们都可以找到一个
N
N
N,使之满足极限的定义式。
对于0.999...
,我们可以构造一个数列
y
=
1
−
0.
1
x
y=1-0.1^x
y=1−0.1x,当
x
→
∞
x\to\infty
x→∞时,
y
→
0
y\to0
y→0,也就是说,对于任意小的一个
ε
\varepsilon
ε,我们总能找到一个
N
N
N,使得
x
>
n
x>n
x>n时,
0.
1
x
<
ε
0.1^x<\varepsilon
0.1x<ε。
3 序列与函数
数列和函数都是一种映射关系,区别在于,序列是定义域为正整数的特殊函数。而微积分中主要研究的名为函数的映射,都定义在实数域上。从而在函数的定义域中,随便抽选出一个区间
[
a
,
b
]
[a,b]
[a,b],只要
a
≠
b
a\not =b
a=b,则区间中的元素个数就是无穷多个。
极限在
ε
−
N
\varepsilon-N
ε−N意义上重新定义了相等,从而意味着每一个实数都包含了无穷多种初等的表示,即
1
=
0.999…0
=
0.999…1
=
0.999…
n
,
n
1=0.999…0=0.999…1=0.999…n,n
1=0.999...0=0.999...1=0.999...n,n为任意长度的数串,中间的无穷多位,导致末位信息在变得毫无意义,或者更确切地说,根本不存在最后一位。
如果异想天开地希望建立整数与实数的对应关系,例如将整数环映射到区间
[
−
1
,
1
]
[-1,1]
[−1,1]内,这个区间也将变得十分密集,对于区间
[
a
,
b
]
[a,b]
[a,b],也同样只要
a
≠
b
a\not =b
a=b,则区间内存在无穷多个元素。
在实数区间
[
−
1
,
1
]
[-1,1]
[−1,1]里,当
x
→
0
x\to\ 0
x→ 0时,
y
(
x
)
=
y
0
y(x)=y_0
y(x)=y0,则对任意小的
ε
>
0
\varepsilon>0
ε>0,都存在一个实数
δ
\delta
δ,使得区间
[
−
δ
,
δ
]
[-\delta,\delta]
[−δ,δ]内的
x
x
x满足
∣
y
0
−
y
(
x
)
∣
<
ε
|y_0-y(x)|<\varepsilon
∣y0−y(x)∣<ε。由于整数环和
[
−
1
,
1
]
[-1,1]
[−1,1]区间存在某种映射,所以对于任意小的一个
δ
\delta
δ,都可以在整数映射的区间
[
−
1
,
1
]
[-1,1]
[−1,1]中找到无穷多个
δ
′
<
δ
\delta'<\delta
δ′<δ,从而在区间
[
−
δ
′
,
δ
′
]
[-\delta’,\delta’]
[−δ′,δ′]内存在同样的极限。
当然,通过整数除以正无穷得到
[
−
1
,
1
]
[-1,1]
[−1,1]的一个子区间,似乎在技术上是不可实现的,因为目前来说
∞
\infty
∞是没法做分母的,表达式
n
∞
\frac{n}{\infty}
∞n在
n
≠
∞
n\not= \infty
n=∞时,其值为0,否则为不定式。
但是,如以一种更动态的眼光去看待整数映射的
[
−
1
,
1
]
[-1,1]
[−1,1]。对于任意小的一个
δ
\delta
δ,都可以在整数环中找到一个
N
N
N,从而在序列
−
1
,
−
(
N
−
1
)
N
,
.
.
.
−
1
N
,
0
,
1
N
.
.
.
1
-1,\frac{-(N-1)}{N},…\frac{-1}{N},0,\frac{1}{N}…1
−1,N−(N−1),...N−1,0,N1...1中找到
δ
′
<
δ
\delta'<\delta
δ′<δ,其中
δ
′
=
N
δ
′
N
\delta’=\frac{N_{\delta’}}{N}
δ′=NNδ′,使得区间整数映射区间的子区间
[
−
δ
′
,
δ
′
]
[-\delta’,\delta’]
[−δ′,δ′]内,满足
∣
y
0
−
y
(
x
)
∣
<
ε
|y_0-y(x)|<\varepsilon
∣y0−y(x)∣<ε。
如果跳出数学抽象,那么这里的
δ
\delta
δ和
δ
′
\delta’
δ′都是具备现实意义的。对于没怎么接触过编程的人来说,第一眼看到我们上面所画出的图,必然会想当然地认为,这张图是连续的。然而,这只不过是不到100个点的一种拟合。即便真的用无穷多个点画出一条曲线,但屏幕也只能像素的形式进行显示,这个曲线仍旧是有分立的点连接而成的,只不过这些个分立的点足够稠密,以至于可以骗过我们的眼睛。
所以,可以认为
δ
\delta
δ是人眼的一种分辨极限,当两个点的距离小于
δ
\delta
δ时,便无法区分这两个点是否分离。那么,当我们画图的时候,只要确保两个点的距离
δ
′
<
δ
\delta'<\delta
δ′<δ,就会自然地在我们的眼中形成连续的图像。也就是说,如果我们的区间长度为
L
L
L,那么只要选取
L
δ
′
\frac{L}{\delta’}
δ′L个点来画图,我们的视觉就会欺骗我们。
4 极限常数
圆周率
π
\pi
π
历史上很早就产生了极限思想,而割圆术就是这种思想的绝佳体现。
设正N边形边长为
a
a
a,则周长为
L
=
N
a
L=Na
L=Na,而其边长与边数的关系可以表示为
a
=
2
R
sin
π
N
→
L
=
2
N
R
sin
π
N
a=2R\sin\frac{\pi}{N}\to L=2NR\sin\frac{\pi}{N}
a=2RsinNπ→L=2NRsinNπ
圆可以理解为边数为无穷多的正多边形,即
L
=
lim
n
→
∞
2
n
R
sin
π
n
=
2
π
R
L=\lim_{n\to\infty}2nR\sin\frac{\pi}{n}=2\pi R
L=n→∞lim2nRsinnπ=2πR
由于古人不知道圆周率,所以需要通过不断地测量多边形的边长和周长来逼近,则对于正多边形而言
Π
=
L
2
R
=
N
sin
π
N
\Pi=\frac{L}{2R}=N\sin\frac{\pi}{N}
Π=2RL=NsinNπ
N = np.arange(3,100)
Pi = N*np.sin(np.pi/N)
plt.plot(N,Pi)
plt.show()
- 1
- 2
- 3
- 4
由于到了后面,误差变得越来越小,所以用对数来看一下误差的变化
N = np.arange(3,1e4)
err = np.log10(np.pi-N*np.sin(np.pi/N))
plt.plot(N,err)
plt.show()
- 1
- 2
- 3
- 4
可见割到了正10000边形,也只能得到
1
0
−
7
10^{-7}
10−7的精度,通过计算可以得到正10000边形算出的圆周率约为3.14159260
,所以我们至今也无法知道祖冲之他老人家到底是怎么得到的。
>>> 10000*np.sin(np.pi/10000)
3.141592601912665
- 1
- 2
圆周率的这种定义其实也提供了一个重要极限,即
π
=
lim
N
→
∞
N
sin
π
N
→
lim
x
→
0
sin
x
x
=
1
\pi=\lim_{N\to\infty}N\sin\frac{\pi}{N}\to\lim_{x\to0}\frac{\sin x}{x}=1
π=N→∞limNsinNπ→x→0limxsinx=1
自然对数e
很多人喜欢把自然对数和复利计算联系在一起。
假设某银行的年利率为
x
x
x,即存入W元,一年之后本息合计
W
(
1
+
x
)
W(1+x)
W(1+x);如果一年之后将本息重新存入银行,则再过一年,本息合计为
W
(
1
+
x
)
2
W(1+x)^2
W(1+x)2,重复操作
n
n
n年之后,则其本息之和为
W
(
1
+
x
)
n
W(1+x)^n
W(1+x)n。
假设这家银行可以按月算利率,则每月利率为
x
12
\frac{x}{12}
12x,如果按月存取,则每年本息之和为
W
(
1
+
x
12
)
12
W(1+\frac{x}{12})^{12}
W(1+12x)12。
假设这家很行可以按照任意时间算利率,若每次存钱
1
n
\frac{1}{n}
n1年,则利率为
x
n
\frac{x}{n}
nx,相应一年的本息之和为
W
(
1
+
x
n
)
n
W(1+\frac{x}{n})^n
W(1+nx)n。
问题来了,是不是随着
n
n
n逐渐增大,一年的收获会越来越多呢?
为了计算方便,假设
x
=
1
x=1
x=1,即正常
W
W
W存一年,一年之后本息翻倍为2W。
结果发现
x = np.arange(1,100)
E = (1+1/x)**x
plt.plot(x,E)
plt.show()
- 1
- 2
- 3
- 4
最终这个值趋近于一个常数,这个常数就定义为
e
e
e,看来一年最多翻e倍,这个方法没办法发财了。但至少明白了一个著名的极限
e
=
lim
n
→
∞
(
1
+
1
n
)
n
=
2.7182818…
e=\lim_{n\to\infty}(1+\frac{1}{n})^n=2.7182818…
e=n→∞lim(1+n1)n=2.7182818...
当然,银行不太可能有翻倍这么爽的年利率,设为
x
x
x的话,则有
e
x
=
(
lim
n
→
∞
(
1
+
1
n
)
n
)
x
=
lim
n
→
∞
(
1
+
1
n
)
n
x
=
lim
m
→
∞
(
1
+
x
m
)
m
e^x=(\lim_{n\to\infty}(1+\frac{1}{n})^n)^x=\lim_{n\to\infty}(1+\frac{1}{n})^{nx}=\lim_{m\to\infty}(1+\frac{x}{m})^m
ex=(n→∞lim(1+n1)n)x=n→∞lim(1+n1)nx=m→∞lim(1+mx)m
很合理。
欧拉常数
γ
\gamma
γ
对
e
e
e两侧以
e
e
e为底取对数,可得
1
=
lim
n
→
∞
n
ln
(
1
+
1
n
)
=
lim
n
→
∞
n
ln
(
n
+
1
n
)
=
lim
n
→
∞
ln
(
n
+
1
)
−
ln
n
1
n
1=\lim_{n\to\infty}n\ln(1+\frac{1}{n})=\lim_{n\to\infty}n\ln(\frac{n+1}{n})=\lim_{n\to\infty}\frac{\ln(n+1)-\ln n}{\frac{1}{n}}
1=n→∞limnln(1+n1)=n→∞limnln(nn+1)=n→∞limn1ln(n+1)−lnn
根据这个式子,我们可以猜测
γ
=
∑
n
=
1
∞
1
n
−
∑
n
=
1
∞
[
ln
(
n
+
1
)
−
ln
n
]
=
lim
N
→
∞
∑
n
=
1
N
1
n
−
ln
N
\gamma=\sum_{n=1}^\infty\frac{1}{n}-\sum_{n=1}^\infty[\ln(n+1)-\ln n]=\lim_{N\to\infty}\sum_{n=1}^N\frac{1}{n}-\ln N
γ=n=1∑∞n1−n=1∑∞[ln(n+1)−lnn]=N→∞limn=1∑Nn1−lnN
是一个常数:
x = np.arange(1,10000)
# np.cumsum相当于求离散的“积分”
G = np.cumsum(1/x)-np.log(x)
plt.plot(x[:100],G[:100])
plt.show()
- 1
- 2
- 3
- 4
- 5
我们猜对了,这个常数即欧拉常数。
其证明过程也不复杂
ln
N
=
∫
1
N
1
x
d
x
=
∫
1
N
1
x
+
1
⌊
x
⌋
−
1
⌊
x
⌋
d
x
=
∑
n
=
1
N
1
n
+
∫
1
N
1
x
−
1
⌊
x
⌋
d
x
lnN=∫N11xdx=∫N11x+1⌊x⌋−1⌊x⌋dx=N∑n=11n+∫N11x−1⌊x⌋dx
lnN=∫1Nx1dx=∫1Nx1+⌊x⌋1−⌊x⌋1dx=n=1∑Nn1+∫1Nx1−⌊x⌋1dx
令
−
γ
=
∫
1
N
1
x
−
1
⌊
x
⌋
d
x
-\gamma=\int^N_1\frac{1}{x}-\frac{1}{\lfloor x\rfloor}\text dx
−γ=∫1Nx1−⌊x⌋1dx,则
γ
=
∫
1
N
x
−
⌊
x
⌋
x
⌊
x
⌋
d
x
<
∫
1
N
1
⌊
x
⌋
2
d
x
\gamma=\int^N_1\frac{x-\lfloor x\rfloor}{x\lfloor x\rfloor}\text dx<\int^N_1\frac{1}{\lfloor x\rfloor^2}\text dx
γ=∫1Nx⌊x⌋x−⌊x⌋dx<∫1N⌊x⌋21dx
则
γ
\gamma
γ收敛。
5 洛必达法则
令
N
N
N为常数,则常规的极限运算大致有以下几种
∞
±
N
=
∞
∞
⋇
N
=
∞
(
N
≠
0
)
N
∔
∞
=
∞
N
−
∞
=
−
∞
N
/
∞
=
0
±
N
/
0
=
±
∞
N
∞
=
∞
(
N
≠
1
)
∞
N
=
∞
(
N
≠
0
)
∞±N=∞∞⋇N=∞(N≠0)N∔∞=∞N−∞=−∞N/∞=0±N/0=±∞N∞=∞(N≠1)∞N=∞(N≠0)
∞±N=∞N−∞=−∞N∞=∞(N=1)∞⋇N=∞(N=0)N/∞=0∞N=∞(N=0)N∔∞=∞±N/0=±∞
而常规情况之外的,就要通过洛必达法则来处理
0
0
,
∞
∞
,
0
⋅
∞
,
∞
−
∞
,
0
0
,
∞
0
,
1
∞
\frac{0}{0}, \frac{\infty}{\infty}, 0\cdot\infty,\infty-\infty,0^0,\infty^0,1^\infty
00,∞∞,0⋅∞,∞−∞,00,∞0,1∞
对于
0
0
,
∞
∞
\frac{0}{0}, \frac{\infty}{\infty}
00,∞∞而言,洛必达法则在形式上可以表示为
lim
x
→
a
f
(
x
)
g
(
x
)
=
lim
x
→
a
f
′
(
x
)
g
′
(
x
)
\lim_{x\to a}\frac{f(x)}{g(x)}=\lim_{x\to a}\frac{f'(x)}{g'(x)}
x→alimg(x)f(x)=x→alimg′(x)f′(x)
理解洛必达法则可从幂函数入手,假设
f
(
x
)
=
x
n
f(x)=x^n
f(x)=xn,
g
(
x
)
=
x
m
g(x)=x^m
g(x)=xm,则
f
(
x
)
g
(
x
)
=
x
n
−
m
\frac{f(x)}{g(x)}=x^{n-m}
g(x)f(x)=xn−m。当
x
→
0
x\to0
x→0时,若
n
−
m
>
0
n-m>0
n−m>0,则极限为无穷大,否则极限为0。
所以,尽管二者都为0,但0和0也有不同。问题是这种不同是否明显?如果定义域在
[
−
1
,
1
]
[-1,1]
[−1,1]这个区间,则除了
y
=
x
y=x
y=x之外,其他几个函数在0附近的确区别不大
x = np.arange(-1.5,1.5,0.01)
lines = [plt.plot(x,x**n,label=f"n={n}",lw=0.5) for n in range(1,6)]
plt.legend()
plt.xlim(-1.5,1.5)
plt.ylim(-1.5,1.5)
plt.show()
- 1
- 2
- 3
- 4
- 5
- 6
然而随着坐标尺度的缩小,区别变得明显起来
x = np.arange(-0.1,0.1,1e-3)
lines = [plt.plot(x,x**n,label=f"n={n}",lw=0.5) for n in range(2,6)]
plt.legend()
plt.ylim(-1e-3,1e-3)
plt.show()
- 1
- 2
- 3
- 4
- 5
这意味着越是逼近0,不同阶数的幂函数将渐行渐远,如果看一下动画图或许会更好
from matplotlib import animation
x = np.arange(-1e-2,1e-2,1e-5)
fig = plt.figure(figsize=(9,4))
ax = fig.add_subplot(1,1,1)
lines = [ax.plot(x,x**n,label=f"n={n}",lw=0.5,scalex=True, scaley=True)[0] for n in range(2,10)]
plt.legend()
Y = 1e-3
plt.ylim(-Y,Y)
def animate(i):
d = Y*np.exp(-i/10)
plt.ylim(-d,d)
return lines
ani = FuncAnimation(fig, animate, interval=100, frames=300)
ani.save("py1-9.gif")
plt.show()
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
回顾极限的定义,对于
lim
x
→
0
x
3
x
2
=
0
\lim_{x\to0}\frac{x^3}{x^2}=0
x→0limx2x3=0
意味着对于任意小的
ε
\varepsilon
ε,均能找到一个
X
X
X,当
x
∈
[
0
,
X
]
x\in[0,X]
x∈[0,X]时,有
x
3
x
2
<
ε
\frac{x^3}{x^2}<\varepsilon
x2x3<ε,这是显然的。
而我们之所以觉得“显然”,是因为我们接受了大量的指数运算的训练,而指数之间的运算又基于一条更简单的规则
x
n
x
=
x
n
−
1
\frac{x^n}{x}=x^{n-1}
xxn=xn−1。或许其真正的运算过程为
x
3
x
2
=
x
3
x
x
2
x
=
x
2
x
=
x
\frac{x^3}{x^2}=\frac{\frac{x^3}{x}}{\frac{x^2}{x}}=\frac{x^2}{x}=x
x2x3=xx2xx3=xx2=x
受到这种运算形式的启发,对于一个相对复杂的表达式,或许可以对上式进行一点更改
lim
x
→
0
f
(
x
)
g
(
x
)
=
lim
x
→
0
f
(
x
)
−
0
x
g
(
x
)
−
0
x
=
0
\lim_{x\to0}\frac{f(x)}{g(x)}= \lim_{x\to0}\frac{\frac{f(x)-0}{x}}{\frac{g(x)-0}{x} }=0
x→0limg(x)f(x)=x→0limxg(x)−0xf(x)−0=0
这个时候自然而然地出现了一个很熟悉的表达式
lim
x
→
0
f
(
x
)
−
0
x
\lim_{x\to0}\frac{f(x)-0}{x}
limx→0xf(x)−0,正是
f
′
(
0
)
=
lim
x
→
0
f
(
0
+
x
)
−
f
(
0
)
x
f'(0)=\lim_{x\to0}\frac{f(0+x)-f(0)}{x}
f′(0)=x→0limxf(0+x)−f(0)
所以,对于
f
(
0
)
=
0
f(0)=0
f(0)=0和
g
(
0
)
=
0
g(0)=0
g(0)=0的情况,可以存在
lim
x
→
0
f
(
x
)
g
(
x
)
=
f
′
(
0
)
g
′
(
0
)
\lim_{x\to0}\frac{f(x)}{g(x)}=\frac{f'(0)}{g'(0)}
x→0limg(x)f(x)=g′(0)f′(0)
若
f
′
(
0
)
f'(0)
f′(0)和
g
′
(
0
)
g'(0)
g′(0)仍然同时为0,则继续洛,一直洛到祖坟上去。回顾一开始引入的重要极限,洛必达法则很好地验证了其正确性。
lim
x
→
0
sin
(
x
)
x
=
lim
x
→
0
sin
′
x
x
′
=
cos
0
1
=
1
\lim_{x\to 0}\frac{\sin(x)}{x}=\lim_{x\to 0}\frac{\sin’x}{x’}=\frac{\cos0}{1}=1
x→0limxsin(x)=x→0limx′sin′x=1cos0=1
可以画图验证一下二者在趋近于0时的特性
x = np.arange(-0.01,0.01,0.001)
plt.plot(x,x,label="x")
plt.plot(x,np.sin(x),label="sin x")
plt.legend()
plt.show()
- 1
- 2
- 3
- 4
- 5
由于实在靠的太近,根本看不出差别,所以用差的对数来表示一下
x = np.arange(0,0.01,1e-4)
ax = plt.subplot()
ax.plot(x,x-np.sin(x))
ax.set_yscale('log')
plt.show()
- 1
- 2
- 3
- 4
- 5
可见这个收敛速度是很快的,当
x
=
0.002
x=0.002
x=0.002时,二者之间的差就已经达到了
1
0
−
9
10^{-9}
10−9。