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