探索笔记

EXPLORE

笔记目录

笔记2026年9月14日

Re0微积分1:用牛顿迭代法求算术平方根

  • math
  • 微积分
  • 数值分析
  • re0微积分
本页目录
  1. 1. 一些基本的概念
  2. 2. 极限的基本性质
  3. 3. 误差分析

问题0:牛顿法求平方根,数学分析(zorich)3.2.7习题

假设,定义序列:

  1. 证明在的条件下
  2. 估计绝对误差,给出的上界估计。

1. 一些基本的概念

  • 序列:实际上就是一列有顺序的数。当我们定义一个序列的时候,我们定义了一个函数然后函数在自然数处的取值为。 比如说常见的等差序列,再比如等等。
  • 序列的极限:在题目中符号,也就是说序列的极限为

在本问题的背景下,所谓序列的极限,就是与此序列有关的一个实数。当然问题要求我们去证明,这个实数就是。序列极限的严格意义的定义为:

极限的定义

对于实序列,如果存在一个实数满足,对任意的都存在一个对应的正整数使得任意都有 那么就称是序列的极限,也可以表示为

1.1 为什么需要引入这样的概念

这个分析学(微积分的推广)当中的一个基本想法有关。

分析学的一个基本想法

当我们想要研究一个复杂的对象的某个性质的时候,不妨想个办法找到某个由一些我们已知的并且认为相对简单的对象构成的集合,使得可以由当中的元素任意逼近。那么我们可以从研究的性质,转而研究当中元素的性质

在具体的问题当中,我们或许会需要一个装置去量化两个元素的性质的相近的程度(假设性质分别为),于是对象可以被集合当中的元素任意逼近,就可以定量地表述为: 这样的模式在分析学当中极其常见:

例子1.1.1:割圆术

假设我们现在有一个对象为单位圆周,我们想要研究的称之为周长的性质,即一个数量.假设我们已经知道,我们可以用单位圆周的内接正多变形去任意逼近单位圆周。

  1. 此处定义圆内接正多边形的集合为.
  2. 这里的性质,就是图形的周长。单位圆内接正边形的周长为
  3. 此处衡量两个对象周长的相近的程度的装置自然就是实数差的绝对值,因为周长本质上还是实数。于是我们相当于得到了

例子1.1.1当中,我们得到了对单位圆周的任意逼近,我们得到了什么好处?任意给定误差的范围内,我可以知道里面,这实际上就是古代数学家探索几百年想要搞清楚的事情,我们如何计算单位圆周的一半,即.这里我们只要取合适的以及足够大的,我们就可以说: 当然在数学里面,相应的例子不止圆的周长,还有面积,体积,方程的根等等…

不过在实际应用这个想法来达成分析学的目的还需要明确一些事情:

在分析学当中实施这个想法需要搞清楚的三件事

  1. 如何找到这样一个在性质的意义下,无限逼近对象的集合?
  2. 我们如何判断某个集合里面的元素会任意逼近某个对象? (收敛性的判断)
  3. 如果我们的这种无限逼近的选项不止一个,例如有两个集合当中的元素都可以任意逼近,如何对比二者逼近的品质?(误差的估计)

在本文最终要解决的问题当中,这三点皆有体现:

  1. 我们想要搞清楚算术平方根的值(通常a是有理数,甚至正整数),我们想到可以用有理数逼近这个值。即找到一个有理数序列去任意逼近,找到这样的逼近序列的办法就是牛顿迭代法,也就是题目中定义的对于这个迭代,理想状态下,我们只需要带入一个非零有理数然后不断迭代,我们就可以得到的近似值。
  2. 凭什么就说一定要会任意逼近?因为的极限就是,这就是为何要引入极限的概念,以及导出一些极限存在性的命题。
  3. 这个逼近好不好,具体来说,给定初值我到底需要最多几次能在给定精度下逼近?如何定量研究这件事?在本问题当中,我们就是要研究序列.

1.2 极限的概念的几何直观

首先在此明确,极限如果存在,那么这是一个具体的实数。比如当我说,的极限为,的时候0就是这个实数。然后这个实数对序列有特殊的意义,即满足极限定义当中的那个命题。

极限定义当中的这个命题可以有这样一个几何意义的理解:

极限的几何意义理解

任意以为中心半径为的实数轴上的对称开区间外部只有有限的,比方说不超过个序列的元素。即除开这个序列的元素以外的序列剩下的无穷多个元素,全部在当中.

例子1.2.1

假设是我们要讨论极限的序列,我们遍寻所有实数轴上点(实际上在实数轴上中一目了然),发现只有0能满足这样的几何意义。比如我们令,于是我们的对称区间就是当中包含无穷多个序列的点,然而在区间外部,只有三个序列的点。最重要的是,这个点的特殊之处在于,无论我们对称区间的半径取多少,这个几何性质皆成立。

上面的例子之所以说是几何直观,我们大可以尝试把序列的点算出来,然后标注在实数轴上,这样图中会非常明显看到一个符合这样的几何性质的点。以例子1为例,mathematica的代码可以这样写:

ListPlot[Table[{(-1)^n/n, 0}, {n, 1, 100}]]
  • 练习1.2.2:尝试验证的极限为1.

例子1.2.3

一定要注意这里强调的是,以某个实数为中心任意半径的对称区间外部只有有限多个元素,而不是内部有无穷个序列的元素。这其中的差别可以从下面的例子当中看出来:

定义为的序列没有极限。因为如果我们的对称区间的中心的话,只要足够小,那么其内部就不会包含任何序列的元素,这就无法满足上面的几何性质。但是如果,那么其外部始终存在无穷多个,反过来也是如此.因此不存在一个点满足这样的几何性质,因此该序列没有极限。

因此我们很容易想到这样一个命题:

序列极限的唯一性

如果一个序列的极限存在,那么极限是唯一的。

  • 练习1.2.4:证明这个命题(使用一开始的的定义证明)

2. 极限的基本性质

2.1 序列极限存在性的判断

定理2.1.1(单调有界原理)

单调(未必严格单调)有界的实序列极限必然存在。

回到一开始的问题,因为我们发现给具体的以及初值,只要n足够大,序列基本上是单调减少的,并且有一个明确的下界的。

n = 100;
(*这里a是2*)
(*因为收敛太快,所以为了方便观察单调性初值给得比较大,为100*)
data = RecurrenceTable[{x[k + 1] == (0.5)*(x[k] + 2/x[k]), 
    x[1] == 100}, x, {k, 1, n}];
DiscretePlot[data[[k]], {k, 1, n}]

其实从图像上就不难观察出来这个性质:

引理2.1.2

问题0当中定义的序列足够大的时候,序列是不增的并且具有下界。

  1. 下界的存在性:假设初值为正实数,这样保证了序列。因为基本不等式(算术平均值大于几何平均值,参考Power mean及其性质)会得到也就是说序列除了初值以外,从开始皆大于.
  2. 单调性: 考虑,这样只要此比值在某个以后的任意都小于1,那么单调减少就得到了确认。然后我们发现 于是,我们意识到,如果单调有界原理成立,那么序列的极限一定存在。

2.2 极限的四则运算

搞清楚极限的四则运算的性质,会简化我们求更为复杂的极限的过程。

命题2.2.1:极限的四则运算

假设序列两个序列的极限存在,并且,那么一定有:

  1. 加法:序列
  2. 减法:序列
  3. 乘法:序列
  4. 除法:在的情况下,并且序列有意义的情况下,

练习2.2.2:用极限的定义证明这四条性质。

  • 其中极限的乘法性质的证明中包含了一个基本的处理技巧,即:我们可以利用三角不等式控制。具体来说其实这样的思路也正是体现了数学中的“分而治之”的想法。此外这个技巧,在函数列的根序列的稳定性的”lemma 1.1.2”以及2. 问题2当中也重复使用了。

针对于问题0,我们的思路是极限序列的极限是存在的,那么假设.那么根据极限的四则运算,并且根据序列递归的定义,以及极限的唯一性,那么一定有代数方程: 此方程的唯一正实数解就是.

于是到此,我们解决了问题0的第一部分,即 练习2.2.3:模仿差不多的思路解决问题2.

问题2.2.4

序列满足证明对于任意初值,此序列的极限存在并且

解答:关于黄金比例数的迭代序列

3. 误差分析

实际上我们就是要考虑序列,我们能想要知道它大概是一个怎样的增长级别,也有助于让我们判断,在给定精度下,至少要进行几次迭代才能在精度范围内,近似的得到

因为我们知道的迭代公式,这里有一个基本的想法:

基本的想法

如果我们知道两个序列之间的一个方程同时知道其中一个的迭代我们想要分析,那么可以经由方程把关于迭代变成关于的迭代。

此处我们自然是可以把的迭代通过方程变成的迭代,从而得到:而前面我们分析了,如果那么。于是:这说明牛顿法开根号产生的序列是二次收敛这个速度的一个序列。

再者根据上面的不等式,我们可以迭代这个不等式最后得到: 这其实告诉我们,使用牛顿迭代法的时候,我们要先预估初始的误差,然后把这个结果带入到绝对误差的迭代中,估计迭代n次以后的误差是多少。这表明,我们从一开始就需要对做出一个粗略的预估,然后把这个预估的值作为初值,同时得到绝对误差的初始值,这样才能绝对在给定精度下,需要迭代多少次。

比如说我们可以看看下面这个实际的问题:

问题3.1

对无理数进行有理数逼近,要求绝对误差不大于.

  • 选定一个好的初值的重要性

下面是一个Wolfram/mathematica的程序用于计算这个过程,程序会根据我们输入的精度要求,以及初值,输出最后达到这样的精度至少需要的迭代次数,以及近似值。

NewtonSqrt[a_, x0_, tol_] := Module[{x = x0, e = Abs[x0^2 - a], n = 0},
  While[e > tol,
    x = 1/2 (x + a/x);
    e = Abs[x^2 - a];
    n++;
  ];
  {n, x}
]
 
(* 使用示例 *)
(* a = 2,x0 = 1,tol = 10^-10 *)
NewtonSqrt[2, 1, 10^-10]
 
  1. 如果选一个很烂的初值,比如100:

执行我们的程序:

NewtonSqrt[2, 100, 10^-10]

最后的输出是需要迭代至少次,并且会得到一个非常复杂的即约分数。

  1. 如果认真选一个初值,比如: 我们可以根据,以及我们的初值,误差初值为,根据绝对误差的迭代式子在程序运行之前预估需要迭代的次数不会超过次。
NewtonSqrt[2, 3/2, 10^-10]

最后实际上我们经过了次迭代,最后得到有理数的逼近结果是

反向链接