2022年 11月 16日

用Python理解极限,看了这个就不会挂高数了

文章目录

1 状态变化

若将数学整体划分为三类,则可概括为代数、几何与分析。对于前两者,我们很早就建立了直观的概念,对于空间结构及其性质的研究,即为几何;以数为核心的研究领域,即为代数。

分析则具备更多的非数学的内涵,误导性很强,初学者若望文生义,则更倾向于将“分析”理解为一门数学技巧,而非数学领域。

初学数学分析时,是将其等同为微积分的,而微积分的理论基础建立在极限之上。所以,极限可作为分析学的根基,为此,需要去理解极限的本质,而极限本身则是一个动态的过程,例如下面这个重要极限

lim

x

0

s

i

n

(

x

)

x

=

1

\lim_{x\to 0}\frac{sin(x)}{x}=1

x0limxsin(x)=1

对于上式,表示当x趋于0的时候,这个分式等于1,需要注意,这里是等于号,而非约等。当我们以初等的观念去理解这个等式的时候,会自动附加一些特殊的约定:

  • x

    0

    x\to0

    x0

    x

    =

    0

    x=0

    x=0

  • 0是有阶数的,对于

    0

    m

    0

    n

    \frac{0^m}{0^n}

    0n0m,当

    m

    >

    n

    m>n

    m>n时,值为0,

    m

    <

    n

    m<n

    m<n时,值为无穷大,

    m

    =

    n

    m=n

    m=n时,值为常数。

  • sin

    0

    \sin0

    sin0

    0

    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

xlimxsinx1=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...(101)0.999...=90.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

limnxn=

有穷极限亦然,对于数列

{

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

xna<ε

则称序列

{

x

n

}

\{x_n\}

{xn}

a

a

a为极限,或者收敛于

a

a

a,记为

lim

n

x

n

=

a

\lim_{n\to\infty}x_n=a

limnxn=a

在这种极限观点下,回头再看上文所列举的两个式子,可能会显得更加严谨。首先,对于重要极限

lim

x

x

s

i

n

(

1

x

)

=

1

\lim_{x\to\infty}xsin(\frac{1}{x})=1

limxxsin(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=10.1x,当

x

x\to\infty

x时,

y

0

y\to0

y0,也就是说,对于任意小的一个

ε

\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

y0y(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(N1),...N1,0,N1...1中找到

δ

<

δ

\delta'<\delta

δ<δ,其中

δ

=

N

δ

N

\delta’=\frac{N_{\delta’}}{N}

δ=NNδ,使得区间整数映射区间的子区间

[

δ

,

δ

]

[-\delta’,\delta’]

[δ,δ]内,满足

y

0

y

(

x

)

<

ε

|y_0-y(x)|<\varepsilon

y0y(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=nlim2nRsinnπ=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}

107的精度,通过计算可以得到正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

π=NlimNsinNπx0limxsinx=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=nlim(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=(nlim(1+n1)n)x=nlim(1+n1)nx=mlim(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=nlimnln(1+n1)=nlimnln(nn+1)=nlimn1ln(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=1n1n=1[ln(n+1)lnn]=Nlimn=1Nn1lnN

是一个常数:

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+1x1xdx=Nn=11n+N11x1xdx

lnN=1Nx1dx=1Nx1+x1x1dx=n=1Nn1+1Nx1x1dx

γ

=

1

N

1

x

1

x

d

x

-\gamma=\int^N_1\frac{1}{x}-\frac{1}{\lfloor x\rfloor}\text dx

γ=1Nx1x1dx,则

γ

=

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

γ=1Nxxxxdx<1Nx21dx

γ

\gamma

γ收敛。

5 洛必达法则

N

N

N为常数,则常规的极限运算大致有以下几种

±

N

=

N

=

(

N

0

)

N

=

N

=

N

/

=

0

±

N

/

0

=

±

N

=

(

N

1

)

N

=

(

N

0

)

±N=N=(N0)N=N=N/=0±N/0=±N=(N1)N=(N0)

±N=N=N=(N=1)N=(N=0)N/=0N=(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)}

xalimg(x)f(x)=xalimg(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)=xnm。当

x

0

x\to0

x0时,若

n

m

>

0

n-m>0

nm>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

x0limx2x3=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=xn1。或许其真正的运算过程为

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

x0limg(x)f(x)=x0limxg(x)0xf(x)0=0

这个时候自然而然地出现了一个很熟悉的表达式

lim

x

0

f

(

x

)

0

x

\lim_{x\to0}\frac{f(x)-0}{x}

limx0xf(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)=x0limxf(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)}

x0limg(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

x0limxsin(x)=x0limxsinx=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}

109