提问:数值分析是做什么用的?
输入复杂问题或运算
x,ax,lnx,Ax=b,∫abf(x)dx,dxdf(x),…
通过数值分析转换为简单的加减乘除,通过计算机计算得到原式在某一误差范围内的近似解。
学习数值分析课程的基本要求
- 掌握算法(数值方法)的基本思想和原理
- 注意方法处理的技巧与计算机的结合,重视误差、稳定性、收敛性等基本理论
- 通过例子,编程实现各种数值方法,并利用其解决实际问题
一、误差:一个物理量的真实值与计算值之间的差异
- 来源与分类
- 从实际问题中抽象出的数学模型——模型误差(Modeling Error)
- 通过测量得到模型中参数的值——观测误差(Measurement Error)
- 求近似解——方法误差/阶段误差(Truncation Error)
- 机器字长有限——舍入误差(Roundoff Error)
例:近似计算∫01e−x2dx
解法之一:将e−x2作Taylor展开后再积分
∫01e−x2dx=∫01(1−x2+2!x4−3!x6+4!x8−⋯)dx=S41−31+2!1×51−3!1×71+R44!1×91−⋯
取∫01e−x2dx≈S4,则4!1×91−5!1×111+⋯称为截断误差
这里∣R4∣<4!1×91<0.005
S4=1−31+101−421≈1−0.333+0.1−0.024=0.743
舍入误差<0.0005×2=0.001
计算∫01e−x2dx的总体误差<0.005+0.001=0.006
截断误差由截去部分引起,舍入误差由留下部分引起
- 误差的传播与积累
蝴蝶效应是一个例子
例:计算In=e1∫01xnexdx,n=0,1,2,…
公式一:In=1−nIn−1
注意:本题严格满足该递推公式,也就是不存在公式上的模型误差和截断误差
I0=e1∫01exdx=1−e1≈0.63212056记作I0∗
则初始误差∣E0∣=∣I0−I0∗∣<0.5×10−8
e1∫01xn⋅e0dx<In<e1∫01xn⋅e1dx∴e(n+1)1<In<n+11I1∗=1−1⋅I0∗=0.36787944………I10∗=1−10⋅I9∗=0.08812800I11∗=1−11⋅I10∗=0.03059200I12∗=1−12⋅I11∗=0.63289600I13∗=1−13⋅I12∗=−7.2276480I14∗=1−14⋅I13∗=94.9594241I15∗=1−15⋅I14∗=−1423.3914
由关系式e(n+1)1<In<n+11可知,具有单调递减的单调性,大于0并不断逼近。观察列出的结果可观察到从I12∗开始的答案不满足单调性。
尽管严格满足递推公式,但是在实际的运算中逐渐失真最终出现不可信答案。因为满足直接法,所以不存在方法设计误差,问题出现在了舍入误差,舍入误差在递推的过程中发生了传播和累计,变得不可控——数值算法的数值不稳定。
只有数值稳定的算法才可以在计算机上运行。
考察第n步的误差∣En∣
∣En∣=∣In−In∗∣=∣(1−nIn−1)−(1−nIn−1∗)∣=n∣En−1∣=⋯=n!∣E0∣
误差∣En∣是误差∣E0∣的n!倍,可见初始的小扰动∣E0∣<0.5×10−8迅速积累,误差呈递增走势,所以误差不可控。
公式二:In=1−nIn−1⇒In−1=n1(1−In)
注意:此公式与公式一在理论上是等价的,也就是同样不存在公式设计上的误差
方法:先估计一个IN,再反推要求的In(n<<N)
∵e(N+1)1<IN<N+11
当N足够大的时候,该区间的左右端点距离已经极为接近,我们可取该区间中点为近似值
可取IN∗=21[e(N+1)1+N+11]≈IN
取得IN∗后代入递推公式二