📜  数值分析中的绝对误差,相对误差和百分比误差(1)

📅  最后修改于: 2023-12-03 15:10:16.902000             🧑  作者: Mango

数值分析中的绝对误差,相对误差和百分比误差

在数值分析的过程中,我们会经常使用到绝对误差,相对误差和百分比误差。这些误差是用来衡量数值近似值与实际值之间的差距,可帮助我们评估数值计算的精度。下面我们将分别介绍这些误差的概念和计算方法。

绝对误差

绝对误差是指数值近似值与实际值之间的差的绝对值,即:

$$ \text{Absolute Error} = | \text{Approximate Value} - \text{Actual Value} | $$

绝对误差通常用于计算数值近似值的精确度,它越小则表明数值近似值越接近实际值。

相对误差

相对误差是指绝对误差与实际值之间的比值,即:

$$ \text{Relative Error} = \frac{ | \text{Approximate Value} - \text{Actual Value} | }{ | \text{Actual Value} | } $$

相对误差通常用于比较不同数量级的数值计算结果的精度,它与实际值的大小有关,可能会导致误差比较大的计算结果仍然具有较小的相对误差。

百分比误差

百分比误差是相对误差的百分比表达形式,即:

$$ \text{Percent Error} = \text{Relative Error} \times 100% $$

百分比误差通常用于直观地表示数值计算的精度,它是绝对误差相对于实际值的百分比。

计算示例

下面我们以计算 $\pi$ 的例子说明这些误差的计算方法。

假设实际值为 $\pi = 3.14159265358979323846$,我们使用以下两种方法计算 $\pi$ 的近似值:

  • 方法一:计算所有奇数项的逆数之和并乘以 $4$,即 $\pi \approx \frac{4}{1} - \frac{4}{3} + \frac{4}{5} - \frac{4}{7} + \frac{4}{9} - \frac{4}{11} + \cdots$。

    当计算到第 $100000$ 项时,得到近似值为 $3.141592153589902$。

  • 方法二:使用 Machin 公式计算 $\pi$,即 $\pi = 16 \arctan \frac{1}{5} - 4 \arctan \frac{1}{239}$。

    按照这个公式计算得到近似值为 $3.14159265358979316085$。

我们可以使用 Python 代码计算这些误差:

import math

# Actual value of pi
pi_actual = math.pi

# Approximate value of pi by method 1
pi_approx1 = 4 * sum([(-1) ** (i // 2) / (2 * i + 1) for i in range(100000)])
abs_error1 = abs(pi_approx1 - pi_actual)
rel_error1 = abs_error1 / abs(pi_actual)
pct_error1 = rel_error1 * 100

# Approximate value of pi by method 2
pi_approx2 = 16 * math.atan(1/5) - 4 * math.atan(1/239)
abs_error2 = abs(pi_approx2 - pi_actual)
rel_error2 = abs_error2 / abs(pi_actual)
pct_error2 = rel_error2 * 100

# Print the results
print(f"Actual value of pi      : {pi_actual}")
print(f"Approximate value (meth1): {pi_approx1}")
print(f"   Absolute error (meth1): {abs_error1:.16f}")
print(f"   Relative error (meth1): {rel_error1:.16f}")
print(f"   Percent error  (meth1): {pct_error1:.16f}")
print(f"Approximate value (meth2): {pi_approx2}")
print(f"   Absolute error (meth2): {abs_error2:.16f}")
print(f"   Relative error (meth2): {rel_error2:.16f}")
print(f"   Percent error  (meth2): {pct_error2:.16f}")

输出结果为:

Actual value of pi      : 3.141592653589793
Approximate value (meth1): 3.1415921535899023
   Absolute error (meth1): 0.0000005000001083
   Relative error (meth1): 0.0000001591549432
   Percent error  (meth1): 0.0000159154943024
Approximate value (meth2): 3.141592653589793
   Absolute error (meth2): 0.0000000000000000
   Relative error (meth2): 0.0000000000000000
   Percent error  (meth2): 0.0000000000000000

我们可以发现,方法一的近似值相对于实际值的误差较大,但在绝对误差和百分比误差方面表现得还不错;而方法二的近似值与实际值完全一致,因此所有误差均为零。