数值计算从这里启航
做数值的初衷
第一次写博客,博客上的编辑器用的不太熟练,以后会慢慢改进。最近在学习数值计算,所以我打算做一个以数值计算为主题的专题,一方面是回顾一下所学的知识,另一方面是希望将我的一些经验分享给大家。作为一名学生党,我很清楚学习不是一件很轻松的事(对绝大多数人来说),经常需要参考课堂以外的资料以及借鉴前人的经验,不是说鼓励抄袭或者不主张独立思考什么的,而是说一个人的能力确实有限,尽量要站在巨人的肩膀上看世界。可能数值计算这方面本站有很多牛人已经分享过经验了,不过我这里只是总结归纳,一期一期地讲,尽可能细致一点,当然有错误的地方欢迎指正。那么,题外话就不多说了,进入正题吧。
简单介绍
数值计算这门课,怎么说呢,一方面对数学的要求是比较高的,另一方面对程序语言的应用能力也是比较高的,这两方面后面会慢慢体现出来。基本上所有的数值计算课程都是从计算机的数系、误差、算法的数值稳定开始的,这里我们也不例外,首先讲讲计算机中的数系吧。
计算机的数系
β进制数
所谓β进制数其实就是以β为进制的数,说人话就是
X = ± ( a n − 1 β n − 1 + a n − 2 β n − 2 + a n − 3 β n − 3 + … + a 1 β 1 + a 0 β 0 + a − 1 β − 1 + a − 2 β − 2 + … + a − m β − m ) = ± ( a n − 1 a n − 2 a n − 3 … a 0 a − 1 a − 2 … a − m ) β X=±(a_{n-1}β^{n-1}+ a_{n-2}β^{n-2}+ a_{n-3}β^{n-3}+…+ a_{1}β^{1}+ a_{0}β^{0}+ a_{-1}β^{-1}+ a_{-2}β^{-2}+…+ a_{-m}β^{-m}) =±(a_{n-1}a_{n-2}a_{n-3}…a_{0}a_{-1}a_{-2}…a_{-m})β X=±(an−1βn−1+an−2βn−2+an−3βn−3+…+a1β1+a0β0+a−1β−1+a−2β−2+…+a−mβ−m)=±(an−1an−2an−3…a0a−1a−2…a−m)β,其中0≤ a k a_{k} ak<β为整数.
我们平常在做数值计算的时候用的比较多的是十进制数、二进制数、十六进制数.这里关于进制数之间的转换咱就不提了(说白了就是不想码公式)
数的浮点表示
规格化的浮点数:要求小数点后第一位数字非0.在β进制下,规格化的浮点数就可以表示成
0.
a
1
a
2
.
.
.
a
s
×
β
c
0.a_{1}a_{2}...a_{s} \times \beta ^{c}
0.a1a2...as×βc
其中,1
≦
a
1
<
β
\leqq a_{1}\lt\beta
≦a1<β,
0
≦
a
i
<
β
,
i
=
2
,
3
,
.
.
.
,
s
.
0\leqq a_{i}\lt\beta,i=2,3,...,s.
0≦ai<β,i=2,3,...,s.称
0.
a
1
a
2
.
.
.
a
s
0.a_{1}a_{2}...a_{s}
0.a1a2...as为浮点数的尾数部分,
s
⩾
1
s\geqslant1
s⩾1为整数.c为阶码为β进制的整数.
例如:
0.11001
×
2
−
110
,
0.11001\times2^{-110},
0.11001×2−110,二进制
0.77 × 1 0 12 , 0.77\times10^{12}, 0.77×1012,十进制
计算机的数系
对浮点数有一个大概的认识了之后,我们还应该了解到什么样的数计算机可以表示出来,那么显然的,计算机表示的数位数是有限的.
事实上机器的数系由
(
β
.
t
.
M
.
m
)
(\beta.t.M.m)
(β.t.M.m)所确定,其中t为计算机的字长,m和M确定阶码c的范围,即
m
≦
c
≦
M
m\leqq c\leqq M
m≦c≦M,一般而言
n
=
−
M
n=-M
n=−M,或
n
=
−
M
+
1.
n=-M+1.
n=−M+1.记机器的数系就为
F
(
β
,
t
,
m
,
M
)
F(\beta,t,m,M)
F(β,t,m,M).下面我们就简记为F.显然对任意f属于F,成立
β
m
−
1
≦
∣
f
∣
≦
(
1
−
β
−
t
)
β
M
\beta^{m-1}\leqq|f|\leqq(1-\beta^{-t})\beta^{M}
βm−1≦∣f∣≦(1−β−t)βM
(推不出来的同学可以代几个实际的数验证一下,其实挺简单的)
那么这样一来计算机中所有十进制的数包括0的规格化浮点数个数就为:
18
×
1
0
t
−
1
×
(
M
−
m
+
1
)
+
1
18\times10^{t-1}\times(M-m+1)+1
18×10t−1×(M−m+1)+1
一般基数为
β
\beta
β的规格化浮点数个数为:
2
(
β
−
1
)
β
t
−
1
×
(
M
−
m
+
1
)
+
1
2(\beta-1)\beta^{t-1}\times(M-m+1)+1
2(β−1)βt−1×(M−m+1)+1
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
--------------------------------
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
这次就先简单介绍一下计算机中数的表示,下次我们就接着聊聊误差
(第一次写博客是真的不容易。。。哎!尤其是公式码得我脑阔疼)