用分数(M
/ N)表示无理数√
2近似值的各种方法及广义扩充(1)
——
《2的平方根》读书笔记
一 前言
最近读了一本“发现数学从书”中的《2的平方根》,2010年上海科技教育出版社出版,(爱尔兰) 戴维.弗兰纳里著,郑练译。32开本306页,原价24元,是在卓越网上以3—5折买来的。
书中以师生对话的形式,首先讲述无理数√ 2的发现,应用,无理性的论证等内容。随后,主要讲述用分数M/N来逼近无理数√ 2的原理,用分数M/N表示√ 2近似值的各种方法,如 步步递推法、斐波那契式递推法、平方培增法、立方培增法、乃至四方、五方培增法。最后还列出165位的√ 2近似值。
有一个问题是,√2可以用有限小数来表示其近似值,如√ 2=1.4 、√ 2=1.4142等等,为什么又要用分数M / N (如7/5、 41/29等等)来表示呢?愚以为无限小数总有取位问题,一取位,精度就有损。而分数M / N没有取位问题,在约分时可能计算得更精确些。用分数M / N来表示√ 2近似值,在其他论著中似乎没有见到过,所以觉得有点新鲜。
看后,觉得用分数(M / N)表示√ 2近似值,其叙述方式有启发,特别是根据少量数值归纳出数列的递推有启发。
另外,我对类似的√ 3、√ 5、√ 7等,也效仿作了M/N及其数列的递推,并在电脑协助下作了大量试算,最终发现一个用分数(M / N)表示质数平方根√Z最佳近似值的新方法。所以作此笔记。
但是,用分数(M / N)表示无理数近似值,到底有什么实用价值或理论意义,我还是不明白。我就这样忙了一个星期,经历了由极小量数据归纳出递推公式的历程,最终竟发现了一个用分数M/N逼近无理数的简便新方法,十分自得,自我感觉良好。老伴淡定的说,反正是小孩玩泥巴,只要开心就好。
在老年人群中,自有众多的麻将者、旅游者、酒肉者、抄股者、歌舞者、书画者、打工者、家务者、受骗者、病痛者,也有少量的诈骗者、无为者,乃至弄权者。
而我只是一个学习者。是一个数学知识浅薄而又崇敬数学的数学爱好者。我在没有路标的数学小道上独行,没有伴侣,没有知音,独行而已。但每当我在独步中有所省悟或发现一些数学道理的时候,就内心充实,发觉自己的存在。数学大师笛卡尔有句哲理名言:我思,故我在。此之谓也。
二 用分数(M /
N)表示√ 2近似值的“列表查找法”
√
2的近似值以小数表示,有一系列不同精度的1.4 、1.414 、1.4142、1.4142135等等,但怎样找出一系列分数M/N来表示不同精度的√ 2的近似值呢?
√2是无理数,是不可能用分数表达的,所以√ 2=(M / N1) 、2= M2/
N12、 M2
=2N12、M2-2N12=0 等等是不可能的。但是,若调整N1为N,要求M2-2N2
=±1则是可能的,此时的M/N就不是√ 2,而是√ 2的近似值。再则,同一个M,若取不同N,则只有满足
(M2-2N2
=±1)
的M/N,才是最接近√ 2 的近似值。例如当M=17时,可以有不同N组合,如:
17/11=1.54541 17/12=1.41666 17/13=1.3076 等等
但其中只有17/12是最接近于√ 2的。因为它的M2-2N2=17*17-2*12*12=289-288=1。而别的17*17-2*11*11=47 、17*17-2*13*13=49,都不等于1。所以M/N=17/12 才是√ 2的最合适的近似值。
可见,M 要有合适的N,要符合M2-2N2=±1,才是计算最优√2近似值的关键。
又,不同的M,它们的M/N也有不同的精度。M越大精度越高。如41/29比17/12的精度要高,因为41>17。
怎样找到最合适的M/N呢?最老实的方法是下死工夫,先列出M(N)、M2、2N2,再找出M2-2N2=±1的一对M、N,得到M/N。见下表。
M(N) M2 2N2 M(N)
M2 2N2
1
1 2
11
121
242
2
4
8
12
144
288
3
9
18
13
169
388
4
16
32
5
25
50
17
289
578
6
36
72
7
49
98
8
64
128
29
841
1682
9
81
162
10
100
200
41
1681
3362
结果在41之内,仅找出5对M / N。
M
N
M2
2N2
M2 - 2N2 M / N
1
1
1
2
-1
1/1
3
2
9
8
1
3/2
7
5
49
50
-1
7/5
17
12
289
288
1
17/12
41
29
1861
1862
-1
41/29
最终得到 1/1
3/2 7/5 17/12
41/29 ,再往下找,当然还有,但找多远,心里无底。
靠这种笨方法去查找某一分数M / N作√ 2高精度的近似值,很烦。
三 用分数(M /
N)表示√ 2近似值的“步步递推法”
靠“列表查找法”寻找出这些分数M / N来表示√
2的近似值,方法没错,但太麻烦了。是不是可以利用前面的M i /
N
i 找出后面的M i+1 /
N i+1呢?经试凑,归纳出递推公式,即由前一式i推出后一式i+1。根据√
2的 1/1 3/2
7/5 17/12
41/29 ,归纳出以下递推公式:
M i+1 /
N i+1 =
(M i +2N i)/(M
i+N i )。 怎样递推计算,请看:
1/1 →(1+2*1)/(1+1)=3/2 → (3+2*2)/3+2)=7/5 →(7+2*5)/(7+5)=17/12 →
→(17+2*12)/(17+12)= 41/29 → (41+2*29)/(41+29)= 99/70 →
→(99+2*70)/(99+70)= 239/169 →
… 以下略
便得到以下分数数列M/N 及 对应着√
2的近似值 √ 2≈ 与误差 d √
2。并且越往后,√
2的近似程度越高,即误差越小,且正负相间。真正的无理数√
2,就隐藏在此正负之间。
列号
1
2
3
4
5
6
7
8
M/N
1/1
3/2
7/5
17/12
41/29
99/70
239/169
577/408
√
2≈
1
1.5
1.4
1.4166…
1.41379… 1.41428… 1.414201… 1.414215…
d√
2
-0.41
0.08 -
0.01 0.002
- 0.0004
0.00007
- 0.00001
0.000002
列号
9
10
11
12
13 …
M/ N 1393
/
985
3363 /2378
8119 /5741 19601/ 13860
47321/33461
√
2≈ 1.4142131…
1.4142136…
-.41421355… 1.41421356… 1.414213562…
d
√
2
-0.0000006
0.00000006
-0.00000001
0.000000002
-0.0000000003
列号 14
15
16 以下略
M/ N
114243
/ 80782
275807 /
195025
665857 /
470832
√
2≈
1.414213562
1.41421356236… 1.41421356237469
d
√
2
0.00000000005
-0.00000000005
0.0000000000003
这些M /
N要经过一步一步的 (M i
+2N i)/(M
i+N i ) 的计算才能得到。递推工作也不少,也很烦。
我便编程,让动作飞快但很听话的电脑笨蛋去一一寻找。
Private
Sub Form_Click() : Form1.Width =
11520 :
Form1.Height = 15360
X =
InputBox("输入要开X方的X =")
For M = 1 To 10000
For N = 1 To 8000
If (M * M - X * N * N = 1) Then Print
M; N; 1
If (M * M - X * N * N = (-1)) Then
Print M; N; -1
Next N
Next
M
Print
Spc(4); "成功"
End
Sub
输入X=2后,当M在10000内时,√2的近似值M /
N有11个:
列号 1
2
3 4
5
6
7
8
9
10
11
M /
N 1/1
3/2
7/5
17/12
41/29
99/70 239/169
577/408
1393
/985 3363 /2378 8119
/5741
M2-2N2= -1
1 -1
1 -1
1
-1 1
-1
1
-1
注意到,相邻M/N的M2-2N2 值,是+1、-1相间的。
那末是否还有一种跳跃式的递推法呢?有。那就是采用由前两列推第三列的方法,即由1、2列推出第3列,由2、3列推第5列,由3、5列推出第8列,由5、8
列推出第13列等等,这种跳跃的方法,类似于“斐波那契数列”。
三 用分数(M /
N)表示√ 2近似值的“斐波那契式”法
所谓“斐波那契数列”,就是由0 、1开始,以前两列之和作为后面之列。便得到
0
1 1
2
3 5
8
13 21
34
55 89
144
233
…
应用到√ 2近似值的分数表示,即由前两列m /n 与 P/Q,推得第三列M /
N。但M / N不是由前两列的和或乘求得的,而是采用新算法 (推证见后):
M /
N = (mP+2nQ)/(mQ+nP) 请看递推演算:
m /n
P/Q
→
(mP+2nQ)/(mQ+nP)
=
M /
N
1/1
3/2
→ (1×3+2×1×2)/
1×2+1×3) =
7 / 5
3/2 7/5
→ (3×7+2×2×5)/(3×5+2×7)
=
41 / 29
7/5
41/ 29
→ (7×41+2×5×29)/
7×29+5×41)
=
577 / 408
41/29
577/408 → (41×577+2×29×408)/(41×408+29×577) =
47321 / 33461
577/408 47321 / 33461
=
54608393 / 38613965
以下递推略,得列号(实际是“步步递推法”的列号)与M / N 的对照表如下:
列号 1
2 3
5
8
13
21
M /
N 1/1
3/2
7/5
41/29
577/408
47321 / 33461 54608393 /
38613965
由此可见,斐波那契式递推法有跳跃功能,跳过多段分数,递推速度加快。√ 2误差也迅速递减,很好。一般而言,取M/N=47321 / 33461作为√ 2的近似值,误差为0.0000000003,精度已足够了。但是,47321 /
33461是有理数,而√ 2始终是无理数,这一点不要忘记。
“斐波那契式”传递公式的推证
已知前二列 m/n与 P/Q 是怎样得到下一列 M / N = (m
P +
2nQ) / (m Q
+nP ) 的呢?
第一个列m/n有m2
- 2n2 =
1 (或-1)
第二个列P/Q有P
2
- 2Q2 =
-1 (或 1),两式相乘
(m2-2n2)
(P
2-2Q2)
= -1
m2 P
2
+ 4n2Q2 -
2m2
Q2 -
2P
2n2 =
-1 为了能化成二数和的平方,要加减4mnPQ,得
m2 P
2 +4mnPQ +
4n2Q2 -
2m2
Q2 -
4mnPQ -
2P
2n2 =
-1
( m2 P
2 +4mnPQ
+ 4n2Q2
) - 2(m2
Q2 +
2mnPQ
+n2P
2 )=
-1
(m P +
2nQ )
2
- 2 ( m Q
+P n)
2
= -1
令M=(m P +
2nQ ) 、 N=( m Q
+P n) ,则MM -
2NN= -1 成立,就是说明分数M/N符合近似值的原则M2
- 2N2 =
-1
至此可知,由
m/n 与P/Q二列分数,可用公式
M/N=(m
P +
2nQ) / (m Q
+ nP)
得到新的分数M
/ N列。
四 用分数(M /
N)表示√ 2近似值的“平方培增法”法
若“斐波那契式”递推公式中后一列等于前一列P/Q=m/n ,即P=m
Q=n,则
由m/n
m/n也可得到M/N。即
M/N = (m P + 2nQ) / (m Q + nP) = (mm + 2nn) / (m n +m n) = (m2 + 2n2)
/2mn 。得
M/N=
(m2 +
2n2)
/2mn 这叫平方培增法,请看递推演算:
m /n
m/n
→
(m2 + 2n2) /2mn
=
M /
N
1/1 1/1
→
(1×1+2×1×1)/
2×1×1)
=
3
/ 2
3/2 3/2
→ (3×3+2×2×2)/(2×3×2)
= 17 / 12
17/12
17/12
→ (17×17+2×12×12)/(
2×17×12) =
577 / 408
577/408 577/408
→ 577×577+2×408×408)/(2×577×408)=665857
/ 470832
665857 / 470832 → =
886731088897/627013566048 = (1.41421356237)
以下的递推略去,得“步步递推法”列号与“平方培增法”M /
N 的对照表
列号
1
2
4
8
16
32
M /
N 1/1 3/2
17/ 12
577/408 665857
/ 470832 886731088897
/ 627013566048
由此可见,平方培增法跳跃功能比“斐波那契式递推法”更大,仅5步运算,就到达“步步递推”的第32步。误差也由 -0.41、0.08、0.002、0.000002、0.000000000003、0.0000000000001迅速递减,方法更好。
待续
加载中,请稍候......