一、误差的基本概念
由数学方法解决实际问题时,通常按照以下过程:
引起误差的原因有很多:
- 模型误差:实际问题的解与数学模型解的之差。
- 观测误差:数学问题的一些参量的值往往由观测得到,但是观测不可能绝对准确,由此产生的误差称为“观测误差”。
- 截断误差:一般数学问题难以求出精确解,需要简化为较易求解的问题,以简化问题的解作为原问题解的近似,例如泰勒展开后省略后面的无穷多项。
- 舍入误差:计算过程中,受到机器字长的限制,无穷小数和位数很多的数必须舍入成一定的位数,这样的误差为“舍入误差”。
二、绝对误差和相对误差
设
为近似值
根据测量工具或计算情况,可以估计出
称
设
由于计算过程中准确值
证明相对误差可以如上取得:
当
很小时,可以得到: 可知两者的差是
的高阶无穷小,可以忽略不计。
同样,相对误差只能估计其上限,如果存在正数
称其为
三、误差的传播
1、基本运算中的误差估计
由微分学,当自变量的改变量(误差)很小时,函数的微分作为函数的改变量的主要线性部分可以近似函数的改变量,故可以利用微分运算公式导出误差运算公式。设数值计算中求得的解与参量
设不同参量的近似值为
假设
解的绝对误差为:
其相对误差为:
根据上面两式,可以得到和差积商的误差公式:
这样,再根据三角不等式,可以得到:
2、算法的数值稳定性
计算一个数学问题,求积分制:
注意到:
根据被积分式,知随着
即:
可以设计两种算法:
- 取
按照递推公式以此计算出 的近似值。 - 取
,按照递推公式一次计算出 的近似值。
使用方法一计算I(n)代表
format longI = zeros(25,1);I(1) = log(1.2);for n = 1:24 I(n+1) = 1/n - 5 * I(n);endI(1:25)然后使用方法二计算,下面给出其MATLAB代码:
format longI = zeros(25,1);I(25) = (1 / (6 * 25) + 1 / (5 * 25)) / 2;for n = 24:-1:1 I(n) = (1 / n - I(n+1)) / 5;endI(1:25)分别比较它们的输出结果:
| 方法一 | 方法二 | |
|---|---|---|
| 0 | 0.182321556793955 | 0.182321556793955 |
| 1 | 0.088392216030227 | 0.088392216030227 |
| 2 | 0.058038919848865 | 0.058038919848866 |
| 3 | 0.043138734089010 | 0.043138734089005 |
| 4 | 0.034306329554950 | 0.034306329554975 |
| 5 | 0.028468352225249 | 0.028468352225126 |
| 6 | 0.024324905540419 | 0.024324905541035 |
| 7 | 0.021232615155046 | 0.021232615151969 |
| 8 | 0.018836924224770 | 0.018836924240154 |
| 9 | 0.016926489987263 | 0.016926489910342 |
| 10 | 0.015367550063686 | 0.015367550448288 |
| 11 | 0.014071340590662 | 0.014071338667650 |
| 12 | 0.012976630380023 | 0.012976639995085 |
| 13 | 0.012039925022960 | 0.012039876947652 |
| 14 | 0.011228946313773 | 0.011229186690311 |
| 15 | 0.010521935097804 | 0.010520733215111 |
| 16 | 0.009890324510982 | 0.009896333924444 |
| 17 | 0.009371906856857 | 0.009341859789542 |
| 18 | 0.008696021271271 | 0.008846256607844 |
| 19 | 0.009151472591016 | 0.008400295908150 |
| 20 | 0.004242637044922 | 0.007998520459251 |
| 21 | 0.026405862394440 | 0.007626445322793 |
| 22 | -0.086574766517654 | 0.007322318840580 |
| 23 | 0.476352093457833 | 0.006866666666667 |
| 24 | -2.3400938006225 | 0.007333333333333 |
两种方法在
即每递推一次,误差的绝对值就扩大五倍,上述计算过程中采用format long有16位有效数字,故:
那么在第
而
但是每一次递推,其误差的绝对值都在减小,到
上述事实说明,对于同一数学问题,使用的算法不同,效果也不同,我们称计算过程中舍入误差不增长的算法具有数值稳定性,否则数值就是不稳定的。例如上述问题中,方法一数值不稳定,方法二数值稳定,我们希望选择数值更加稳定的方法。
四、数值计算中应该注意的问题
1、避免两个相近的数相减
根据相对误差公式:
可知两数之差
当
2、避免大数吃小数的情况
计算机在进行运算过程中,首先要把参加运算的数字进行对阶,即把两数都写成绝对值小于
如果计算机只能表示四位小数,那么计算出来的只有
3、避免除数的绝对值远小于被除数的绝对值
根据公式:
当
4、要简化运算、减少运算次数,提高效率
对于计算
来计算,取
对于计算多项式的值:
如果直接相加,那么需要做
则只需要进行