zoukankan      html  css  js  c++  java
  • 数值计算day1-计算机中的浮点数;误差;数学基础

    鉴于课堂笔记较为潦草,这里将为期两周的暑期学校学习内容整理到博客中,一来今后查阅起来比较方便,二来学过的东西如果不趁热整理很快就会忘记。

    书籍:Numerical Methods for Engineers and Scientist--《工程科学中的数值计算》
    课时:24小时

    1. 计算机中浮点数的表示

    1.1 十进制浮点表示

    [d.ddddd imes 10^p$$ 其中$0.dddddd$称作小数部分(mantissa) 例子: * $6519.23 = 6.51923 imes 10^3$ * $0.00000391 = 3.91 imes 10^{-6}$ $10$的次幂$p$表示数据的数量级,小数点前面的数字要小于5,否则数量级为$p+1$。在这里,$3.91 imes 10^{-6}$的数量级为$10^{-6}$,记为$O(10^{-6})$;而 $6.51923 imes 10^3$的数量级为$10^4$ ###### 1.2 二进制浮点表示 $$1.bbbbbb imes 2^{bbb}]

    (2) 的次幂称作指数部分(exponent),小数部分和指数部分都应该写为二进制形式。$$50=frac{50}{2^5} imes 2^5=1.5625 imes 2^5, ext{二进制浮点数:} 1.1001 imes 2^{101}$$ 转换方法: (50=frac{50}{2^5} imes 2^5=frac{32+16+2}{2^5} imes 2^5=frac{110010.0}{2^5} imes 2^{101}= ext{(小数点左移5位)}1.1001 imes 2^{101})

    例子:

    • (1344=frac{1344}{2^{10}} imes 2^{10}=frac{1024+256+64}{2^{10}} imes 2^{10}=frac{10101000000.0}{2^{10}} imes 2^{10}= ext{(小数点左移10位)}1.0101 imes 2^{1010})
    • (0.3125 = frac{0.3125}{2^{-2}} imes 2^{-2}= frac{0.25+0.0625}{2^{-2}} imes 2^{-10}=frac{0.0101}{2^{-2}} imes 2^{-10}= ext{(小数点右移2位)}1.01 imes 2^{-10})
    1.3 IEEE-754标准

    在计算机中存储二进制浮点数,小数点前的数字(1)不需要存储,IEEE-754标准分为单精度(single precision)和双精度(double precision)。在单精度中,使用(32)位((4)字节)存储浮点数,双精度使用(64)位((8)字节)存储。两者的首位均为符号位,(0)对应着(+)(1)对应着(-)。接下来的(8)位存储指数部分(双精度中使用(11)位),最后(23)位存储小数部分(双精度中使用(52)位)。

    小数部分存储为二进制,指数部分的值需要加上一个偏差(bias)。以双精度为例,用于存储指数部分的(11)位二进制能存储的最大值是(2047),使用(1023)为偏差,即当指数部分为(4)时,实际存储的值为(4+1023=1027),按照此逻辑,指数部分能存储的最小值为(-1023),最大值为(1024)。但是,最小和最大的指数值(加上偏差)被留作表示(0)(Inf)以及(NaN)。如果指数部分加上偏差为(0),小数部分为(0)时,存储的是(0);如果指数部分加上偏差为(2047)(全部为(1)),当小数部分为(0)时,存储的是(Inf),当小数部分不为(0)时,存储的是(NaN)(在单精度中,偏差为(127))。

    例子:$$22.5=frac{22.5}{2^4} imes 2^4 = frac{16+4+2+0.5}{2^4} imes 24=frac{10110.1}{24} imes 2^{4}=1.01101 imes 2^4$$ 指数部分为(4),存储为(4+1023=1027=1024+2+1=10000000011),小数部分为(0.01101000...000):

    注意

    • 在双精度中,存储的最小正数为 $$2^{-1022}approx 2.2 imes 10^{-308} ext{((0 00000000001 000...000))}$$ 此数与(0)之间的数无法被计算机存储;
    • 在双精度中,存储的最大正数为 $$2^{1024}approx = 1.8 imes 10^{308} ext{((0 11111111110 111...111=(1+2^{-1}+...+2^{-52}) imes 2^{1023}))}$$

    2. 数值方法中的误差

    2.1 Round-Off Errors (舍入误差)

    舍入误差分为两类:

    • 截取(chopping off) $$frac{2}{3}=0.666...approx 0.666$$

    • 四舍五入(rounding) $$frac{2}{3}=0.666...approx 0.667$$

    例子: (x = 9890.9 = 9.8909 imes 10^3, y = 9887.1=9.8871 imes 10^3)

    采用截取(chopping off):(ar{x} = 9.890 imes 10^3, ar{y} = 9.887 imes 10^3)
    采用舍入(rounding):( ilde{x} = 9.891 imes 10^3, ilde{y} = 9.887 imes 10^3)

    两种舍入产生的差值分别为:(ar{x}-ar{y} = 0.003 imes 10^3 = 3, ilde{x}- ilde{y} = 0.004 imes 10^3 = 4),两值实际的差距为(3.8),在此问题中,四舍五入更接近真实值。

    2.2 Truncation Errors (截断误差)

    截断误差依赖于使用的数值方法

    考虑正弦函数的如下泰勒展开: $$sinx = 1-frac{x3}{3!}+frac{x5}{5!}-frac{x^7}{7!}+...$$ 当(x=frac{pi}{6})时,(sinx = frac{1}{2})。若只取第一项,(sinxapprox x = frac{pi}{6}approx 0.5235988),截断误差为(E^{TR} = Exact - Numerical = -0.0235988);若取前两项,(sinxapprox = x-frac{x^3}{3!} = 0.4996742), 截断误差为(E^{TR} = Exact - Numerical = 0.0003258)

    2.3 Total Error (总误差)

    数值解的总误差也叫真实误差(true error),包括舍入误差和截断误差两部分,是真实解和数值解之间的差值:$$TrueError = TrueSolution - NumericalSolution$$ 真实误差的绝对值和真实解的比值称作真实相对误差:$$TrueRelativeError = |frac{TrueSolution-NumericalSolution}{TrueSolution}|$$

    3. 数学基础

    3.1 函数的连续性

    定义:函数(f(x))称作在(x=a)处连续,如果以下三个条件成立:

    • (f(a)) 存在
    • 极限(limlimits_{xlongrightarrow a})存在
    • (limlimits_{xlongrightarrow a}f(x) = f(a))

    介值定理(Intermediate value theorem)(f(x))在闭区间([a,b])上连续,(M)是介于(f(a))(f(b))之间的数值,则至少存在一个点(cin [a,b])使得(f(c)=M)

    3.2 函数的可微性

    函数(y=f(x))在点(x=a)处的导数记为(frac{dy}{dx},y',frac{df}{dx},f'(a)), 定义为:$$frac{dy}{dx}|{x=a} =f'(a) = limlimits{xlongrightarrow a} frac{f(x)-f(a)}{x-a}$$
    可导函数则必是连续函数,连续函数未必可导,一个连续可导的函数称作是光滑的(smooth)。
    链式法则:函数(y=f(u)),其中(u=g(x)),则$$frac{dy}{dx} = (frac{dy}{du})(frac{du}{dx})$$

    微分中值定理(Mean value theorem for derivatives)(f(x))在闭区间([a,b])上连续,在开区间((a,b))上可导,则存在一个数(cin (a,b)),使得$$ f'(c) = frac{dy}{dx}|_{x=c}=frac{f(b)-f(a)}{b-a}$$

    3.3 函数的积分

    积分基本定理:函数(f(x))在闭区间([a,b])上连续,(F(x))(f(x))([a,b])上的不定积分,则:$$int_{a}^{b}f(x)dx = F(b)-F(a)$$
    积分中值定理:函数(f(x))在闭区间([a,b])上连续,存在(cin [a,b])使得:$$int_{a}^{b}f(x)dx = f(c)(b-a)$$ 值(f(c))称作是函数(f(x))在区间([a,b])上的均值(average value):$$ = frac{1}{b-a}int_{a}^{b}f(x)dx$$
    变上下限积分

    • (frac{d}{dx}[int_{a}^xf(t)dt]=f(x))
    • (frac{d}{dx}int_{v(x)}^{u(x)}f(t)dt=f(u(x))frac{u(x)}{dx}-f(v(x))frac{dv(x)}{dx})
    • (frac{d}{dx}int_{a(x)}^{b(x)}f(x,t)dt = f(x,b(x))b(x)-f(x,a(x))a(x)+int_{a(x)}^{b(x)}frac{partial f(x,t)}{partial x}dt)

    4. 总结

    本节课主要讲述了浮点数在计算机中的表示方法,其中IEEE-754标准是20世纪80年代以来最广泛使用的浮点数运算标准,为许多CPU与浮点运算器所采用。之后,介绍了数值计算中的几种常用的误差,包括舍入误差、截断误差等。最后简单回顾了一下函数连续、可微等数学背景。课堂中,还简单演示了MATLAB中向量、矩阵的相关运算,较为简单,这里没有做总结,后续笔记中,会涉及到相应的一些操作。

  • 相关阅读:
    一条代码快速解决滚动条隐藏问题
    微信小程序:wx:for循环输出的使用方法以及简单例子
    点运算符(.)和中括号运算符([])有哪些区别
    线程
    ArrayMap 和HashMap的区别
    Android加载图片的策略
    Android图片加载为什么选择glide
    Android 设计模式对比
    Android 注解框架对比
    ReactNative编写规范
  • 原文地址:https://www.cnblogs.com/SweetZxl/p/11224158.html
Copyright © 2011-2022 走看看