浅谈数值稳定性

今天谈论的重点是数值稳定性,在计算机编程中,有很多算法都需要考虑数值稳定性。比如在机器学习算法中我学过的Logistic回归的牛顿迭代解法,在牛顿迭代时需要解线性方程组,由于Hessian矩阵是对称正定的,用Cholesky矩阵分解不但可以大大减少运算量,而且还具有很好的数值稳定性。借此机会来更多地了解一下数值稳定性。

 

在计算机编程中,有时候同一个计算问题,不同算法中舍入误差对计算的结果产生的影响各不相同,舍入误差对计算结果的精确度影响小的算法,具有较好的数值稳定性;反之,算法的数值稳定性差。所设计的算法的舍入误差在一定条件下要能够控制。否则就像蝴蝶效应一样,使风和日丽的美洲几个月后出现狂风暴雨。

 

接下来我们先来看一个比较经典的例子。

 

题目:计算如下积分的值

 

    

 

分析:很容易,可以进行如下推导过程

 

    

 

根据这个递推式,可以计算任意的,但是我们再计算一下放大的误差,得到

 

      

 

可以看出误差是逐渐放大的,在一定范围内无法控制,这样做的结果就是最终答案与真实答案相差十万八千里。

 

为了提高数值的稳定性,我们在设计算法时需要遵循如下几个原则

 

(1)尽量减少运算次数

(2)加法运算时,避免大数加小数

(3)避免两个相近数相减

(4)避免小数做除数或大数做乘数

 

(1)尽量减少运算次数

 

   比如计算多项式的秦九韶算法,再比如下例

 

    题目:计算的值,要求精确到

 

    分析:用两种方法进行比较,以此说明运算次数的重要性。首先采用如下公式计算

 

        

 

         即得到

 

        

 

         要精确到,就要计算100000项,而且还有精度损失,此方法效率太低。再考虑另一种方法

 

        

 

         这样的话取,得到

 

        

 

         要精确到,只需要计算前4项就行了,因为

 

         

 

         可以看出第二种方式大大减少了计算量,精度相应也会损失很少。

 

 

(2)加法运算时,避免大数加小数

 

      针对浮点数来说,由于有效数字的保留问题,大数会“吃掉”小数。

 

 

(3)避免两个相近数相减

 

    比如在二次方程求根问题中,解,如果并且接近,这样求出

 

    

 

    其中有两个相近的数相减,这会导致误差增大,但是考虑另一种方法,先计算出

 

    

 

    然后再根据

 

   

 

    计算得到,这样做误差大大降低。

 

 

(4)避免小数做除数或大数做乘数

 

    高斯消元中,选主元与不选主元计算得到的结果有差异,因为如果不选主元可能遇到小数做除数的情况。从

    而导致结果出现偏差。

 

 

推荐文章:http://www.cyqdata.com/cnblogs/article-detail-35278

 

### 回答1: 在数值分析中,研究算法的数值稳定性和收敛性意义重大。数值稳定性指一个数值算法在输入变化时,其输出变化小的能力,是保证算法可靠性的关键要素。收敛性指一个数值算法在给定正确的输入条件的情况下,其输出能够接近期望值的能力。例如,在求解常微分方程的正确性分析中,研究算法的数值稳定性和收敛性尤为重要,由此可以保证算法的正确性和可靠性。 ### 回答2: 在数值分析中,研究算法的数值稳定性和收敛性具有重要意义。数值稳定性指的是算法对输入数据的微小扰动是否会导致输出结果的大幅变化。若算法具有良好的数值稳定性,那么即使输入数据存在一定的误差,其输出结果仍能保持在可接受的范围内,从而提高了算法的可靠性和可信度。相反,如果算法缺乏数值稳定性,输入数据的微小变动可能会导致输出结果的严重误差,使结果变得毫无意义。 收敛性则是指算法在迭代过程中逐渐接近精确解的程度。一个收敛性良好的算法能够在有限的迭代次数内逼近真实解,从而提高算法的效率和准确性。如果算法缺乏收敛性,迭代次数可能会无限增加,甚至导致无法收敛,使得算法无法得到有效的解决方案。 数值稳定性和收敛性的重要性可通过一个简单的求平方根的例子来展示。假设需要求解方程$x^2-a=0$的根,其中$a$为正实数。以牛顿迭代法为例,可以使用$x_{n+1}=\frac{1}{2}(x_n+\frac{a}{x_n})$来逐步逼近根。当$a$较小时,该迭代法具有较好的收敛性,因为方程解的近似值很快就能接近真实解。然而,当$a$接近零时,由于除以小数会导致数值上的不稳定性,迭代法容易产生大幅度的误差,使得解并不能准确逼近根。这个例子展示了数值稳定性和收敛性对于算法的影响。 综上所述,研究算法的数值稳定性和收敛性是为了保证算法能够在误差存在或迭代过程中逼近解时具有良好的行为。这种研究可以提高算法的可靠性、准确性和效率,在实际应用中具有重要意义。 ### 回答3: 在数值分析中,研究算法的数值稳定性和收敛性具有重要意义。 首先,数值稳定性是指算法对输入数据的微小扰动是否能够产生相应的微小输出变化。在实际问题中,输入数据往往存在误差,例如测量误差或计算误差。一个数值稳定的算法能够对这些误差具有一定的容忍度,不会产生过大的误差放大效应。而数值不稳定的算法则会导致结果的错误甚至完全失去意义。因此,研究算法的数值稳定性可以确保数值计算的可靠性和准确性。 其次,收敛性是指数值方法在迭代过程中逐渐接近问题的精确解。许多实际问题往往无法通过精确的数学公式求解,而需要通过数值方法来逼近解。研究算法的收敛性可以评估算法的求解效果和速度,帮助我们选择合适的算法和调整迭代参数。同时,收敛性的研究也有助于我们理解问题和算法的内在机制。 具体来说,以求解线性方程组为例,数值稳定性的意义在于保证算法在计算中不会产生大的误差放大。而收敛性的意义在于确保迭代过程能够在有限步内逼近方程组的解。如果算法的数值稳定性差,误差放大效应可能导致算法无法收敛或者产生明显的不准确结果。例如,使用不稳定的直接求解法求解希尔伯特矩阵时,可能因为舍入误差的积累导致结果严重失真;而使用稳定的迭代解法,如共轭梯度法,虽然迭代次数较多,但能在有限步内逼近准确解。 综上所述,研究算法的数值稳定性和收敛性对于保证数值计算的可靠性、准确性和高效性具有重要意义。在具体问题中,我们可以选择合适的算法和方法,以达到更好的数值稳定性和收敛性,从而得到更准确的数值结果。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值