1、分析实验结果体会初值对迭代的影响2 实验内容(1) 用龙贝格算法计算输入:积分区间,误差限输出:序列Tn,Sn,Cn,Rn及积分结果(参考书本P81的表2-4) (2)中点加速法求的导数。(3)用牛顿下山法解方程(初值为0.6)初值,误差限,迭代最大次数,下山最大次数近似根各步下山因子 3 算法基本原理在许多实际问题中,常常需要计算定积分的值。根据微积分学基本定理,若被积函数f(x)在区间a,b上连续,只要能找到f(x)的一个原函数F(x),便可利用牛顿-莱布尼兹公式求得积分值。但是在实际使用中,往往遇到如下困难,而不能使用牛顿-莱布尼兹公式。(1) 找不到用初等函数表示的原函数(2) 虽然找
2、到了原函数,但因表达式过于复杂而不便计算(3) f(x)是由测量或计算得到的表格函数由于以上种种困难,有必要研究积分的数值计算问题。利用插值多项式 则积分转化为,显然易算。称为插值型求积公式。最简单的插值型求积公式是梯形公式和Simpson公式,。当求积结点提供较多,可以分段使用少结点的梯形公式和Simpson公式,并称为复化梯形公式、复化Simpson公式。如步长未知,可以通过误差限的控制用区间逐次分半的策略自动选取步长的方法称自适应算法。梯形递推公式给出了区间分半前后的递推关系。由梯形递推公式求得梯形序列,相邻序列值作线性组合得Simpson序列, Simpson序列作线性组合得柯特斯序列
3、, 柯特斯序列作线性组合的龙贝格序列。若|R2-R1|e,则输出R2;否则依此类推。如此加工数据的过程叫龙贝格算法,如下图所示:图2.1龙贝格算法数据加工流程复化梯形公式复化Simpson公式梯形递推公式加权平均公式: 龙贝格算法大大加快了误差收敛的速度,由梯形序列O(h2) 提高到龙贝格序列的O(h8)求非线性方程组的解是科学计算常遇到的问题,有很多实际背景各种算法层出不穷,其中迭代是主流算法。只有建立有效的迭代格式,迭代数列才可以收敛于所求的根。因此设计算法之前,对于一般迭代进行收敛性的判断是至关重要的。牛顿法也叫切线法,是迭代算法中典型方法,只要初值选取适当,在单根附近,牛顿法收敛速度很
4、快,初值对于牛顿迭代至关重要。当初值选取不当可以采用牛顿下山算法进行纠正。一般迭代: 牛顿公式: 牛顿下山公式: 下山因子 下山条件4 算法描述(1) 梯形递推算法见流程图(2) 龙贝格算法见流程图图2.2梯形递推算法流程图图2.3龙贝格算法流程图(3) 牛顿下山算法见流程图图3.2牛顿下山算法流程图5 输入输出A龙贝格实验输出:参考输出:对比结果完全一致B中心加速求导:结果准确。C牛顿下山:结果准确,迭代次数较小。6 源代码A龙贝格:/Sin(x)/x in 0,1#include cmath#define eps 1e-12using namespace std;double a, b,
5、h;double fx(double x)if (x=0) return 1;return sin(x)/x;int main()cinab;h = fabs(b-a);double S1, S2, T1, T2, C1, C2, R1, R2;double x, f;T2 = T1 = (fx(a)+fx(b) * h/2;int k = 0;R1=0; R2=1; h *= 2;while (fabs(R2-R1)eps) coutT21) coutS22) coutC23) coutR2;coutendl; T1 = T2; S1 = S2;1) C1 = C2;2) R1 = R2;k
6、+; h/=2;f = 0; x = a + h/2;while (xb)f += fx(x);x += h;T2 = (T1 + h * f) / 2;S2 = T2 + (T2 - T1)/3;if (k=1) continue;C2 = S2 + (S2 - S1)/15;if (k=2) continue;R2 = C2 + (C2 - C1)/63;system(pause);return 0;/ y = e x#define eps 1e-6double G(double h)if (hfabs(ff(x);return y;double Iteration(double x0,
7、double(*f)(double), bool z)double x1 = f(x0);while (fabs(x1-x0)E & k100) if (z) printf(x%d = %.11fn, k, x0);x0 = x1;x1 = f(x0);if (k=100) printf(Iteration failed.nelse printf(The Solve is: %.8fn, x0);double x;printf(Please input x0:x;Iteration(x, fai, 1);7 总结通过这一次实验,理解并掌握了自适应算法和收敛加速算法的基本思想,熟悉复化梯形方法、
8、复化Simpson方法、梯形递推算法、龙贝格算法。编程实现了复化Simpson方法、龙贝格算法和中心加速求导方法;分析实验结果体会各种方法的精确度,建立计算机求解定积分问题的感性认识。熟悉了非线性方程求根简单迭代法,牛顿迭代及牛顿下山法,能编程实现简单迭代法,牛顿迭代及牛顿下山法,认识选择迭代格式的重要性,对迭代速度建立感性的认识;分析实验结果体会初值对迭代的影响。在编写牛顿下山法的过程中发现对下山因子的选取理解不到位。经过调试个请教老师,明白了:当迭代值不满足单调下降时,下山因子从1开始每次折半尝试,目的是通过缩小下山因子,来修正迭代值。图像上理解就是折半步长。故每次迭代后都需判定单调性,选取下山因子。、
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1