作业13

                      <<算法演化论>>	
这个学期,我看了这本<<算法演化论>>,也只堪堪看完了上卷,1/3本而已。粗粗了解了一些算法,但是这些算法的公式推导,不得不说真是看不懂,数学太过深奥。以下,我略略整理了一下看完上卷内容的收获。

缩减技术:
通过某种简单的运算手段逐步缩减问题的规模,直到得出所求的解,就是缩减技术。缩减技术主要是结构递归、规模递减的设计思想,大事化小、小事化了的方法解决问题。Zeno算法,即通过简单的计算,逐步压缩问题的规模,直到规模在精度范围内可以忽略为止,就为规模压缩技术提供了生动的模型。
其实,规模压缩技术很是常见,例如累加算法、欧几里得算法、方程求根的区间压缩法、多项式求值的降阶法、解线性方程组的消去法、矩阵求逆的消去法以及解矩阵特征值问题的旋转法。这里我将介绍几个算法:
欧几里得算法,即辗转相除算法,反复调用表达式 = 方程求根的区间压缩法,可以使用不同的算法,逐步搜索法、二分法、弦位法、优选法。逐步搜索法实则是一种并不合算的方法,它的计算量非常之大,而二分法则改进了这种算法。二分法将问题规模逐次减半,不仅提高了效率,并且具有了清晰的递归结构。弦位法,也称为比例求根法,通过公式求得近似根后,再用类似二分法的办法进行根的搜索,但这种方法并不能保证比二分法收敛的更快。
多项式求值的降阶法,可以使用不同的算法,秦九韶算法、多项式求导、递推算式求终值。秦九韶算法,通过算式,逐步降低低多项式的次数,直到归结到零次式为止,即在递归加工的过程中问题的规模逐次减1。而多项式求导和递推算式求终值的方法实际上是在秦九韶算法的基础上改进的。
多项式求值的降阶法,可以使用不同的算法,回代算法、Gauss消去法、追赶法以及消去法的变形。这里我将重点介绍Gauss消去法,Gauss消去法分为消元过程与回代过程两个环节,并且这两个环节都具有递归结构,且其规模都是逐次减1,Gauss消去法可以看作是两个规模缩减过程的复合。
矩阵求逆的消去法,包括Jordan消去法和矩阵求逆。Jordan消去法实则是将增广矩阵所要单位化的列数的规模逐次减1。
解矩阵特征值问题的旋转法,即Jacobi旋转法,是通过旋转变化矩阵压缩特征值问题的规模,从而得出满足精度要求的特征值。

校正技术:
校正技术通过迭代公式计算校正量,实际上它是迭代法思想的一种体现,而迭代法是通过化繁为简、逐步求精的思想解决问题。迭代过程具有压缩性、局部收敛性、加速现象。方程求根的Newton法,以及解线性方程的迭代法、迭代加速的松弛技术都运用到了校正技术。
Newton法亦称切线法,适当选取迭代初值,根据迭代公式计算迭代值,通过条件判断计算所得的值是否是方程的根,如果不是,则根据公式继续迭代。它的优点是收敛速度快,但是它需要提供导数值,因此如果函数求导有困难,那么使用Newton法是并不方便的。
解线性方程的迭代法可以使用简单迭代,直接由方程组的等价形式可立即建立迭代公式;或者Jacobi迭代,从方程中分离变元而建立迭代公式;或者Gauss-Seidel迭代,而Gauss-Seidel迭代相较于Jacobi迭代的变化,在于从公式中计算出新值替代计算,而非仅仅使用老值。

松弛技术:
松弛技术是基于校正量的调整和松动。在古代,Π求值的过程,就运用到了松弛技术,通过圆周长可以用内接正多边形对的周长来逼近获得精确的值。如今,插值方法、数值求积、常微分方程数值解、二分加速法也是离不开松弛技术。
插值,通俗地说就是在所给的函数表中插入一些需要的函数值。插值问题可表述为,对于给定的一组数据,寻求插值公式,使其具有精度。线性插值,即是在函数的几何图形中进行两点插值,如果插值点在区间内,则称为内插,如果插值点在区间外,则称为外推。书里介绍了这么两种插值算法,Aitken算法和Neville算法,两者皆是逐步插值的基本形式,它们的共同点是将一个高阶插值过程归结为线性插值的重复,是一种将复杂过程化为简单过程的重复操作。
数值求积可以使用Newton-Cotes公式和Gauss公式,构造求积公式的关键在于选定求积节点,一旦选定了求积节点,求积系数是比较容易得到的。Newton-Cotes型的求积公式限制等分点作为求积节点,虽然简化了处理过程,但限制了求积公式的精度。Gauss型的求积公式是指不管求积节点如何选取,总能确定求积系数,使其具有2n-1次代数精度。
二分加速法,也叫Romberg加速方法,在变步长的过程中反复用二分前后的两个结果进行松弛,以逐步提高精度,从而使收敛过程加速。Romberg逐步加速过程可以理解为逐步内插过程,亦可以理解为逐步外推过程,Romberg算式实际上也是逐步插值的Neville算式,具有相同的内在结构。

快速算法设计:
众多的快速算法大多属于二分算法的设计模式。相较于规模逐次减1型的常规算法,二分法是反复施行规模减半的二分手续,二分算法是一种快速算法。Strassen快速算法、FFT算法和Cooley-Sande算法也是典型的快速算法。Strassen算法用于计算二阶矩阵求积,在矩阵逐步二分的基础上运用Strassen矩阵求积公式,可以通过更少的操作获得值。FFT算法即快速Fourier变换,在离散Fourier变换的基础上,通过相应公式反复计算求得结果。Cooley-Sande算法也是另一种形式的快速Fourier变换。

你可能感兴趣的:(作业13)