G2
(2);
}
注:
函数N,G基本思路、原理是相同的,只是将函数换了而已,方法简单、易懂,但不够简洁,可以考虑重新编程序,将他们用同一个函数表示出来,而调用时的参数不同来加以区分,这样可以简化程序,减少程序的篇幅。
九结果讨论
1.程序运行结果如下:
(1)开始调试程序时所选取的初值,导致迭代发散:
初值为0.15时,采用(Ⅲ)迭代所得根为-1:
(2)下面是改变出始值之后的结果
函数的计算结果
函数的计算结果
2.结果讨论:
从上面两个函数的例子,比较三种算法所得的结果,可以看出来迭代法和方法(Ⅲ)收敛的速度比较快,而(Ⅱ)的收敛速度相对较慢,达到相同精度的迭代次数要远大于其他两种方法(如二中,迭代法和方法(Ⅲ)的次数分别为4、5,而方法(Ⅱ)需要迭代14次)。
八问题思考与总结
通过编写和调试程序,熟悉了迭代法。
程序中,采用了平时所熟悉的do…while循环,使得程序易于理解,但程序的最后一步,即当结果满足误差的范围时,还会多进行一次迭代。
对于第一个函数,开始时初值的选取不合理,造成了程序迭代的次数比较多,甚至还造成了死循环。
分析后知:
这是因为迭代法的局部收敛性,选取了适当的初值,最终得到了正确的结果同时,在选取初值时,我发现,对上面的,对于方法(Ⅲ),选取初值为0.15时,它与根1更接近,但是在迭代过程中,它恰恰收敛到了-1,但如果选取初值0.78,它收敛到了1。
这也进一步说明,迭代时,需要恰当的选取初值,这对结果的影响比较大。
其次,(Ⅱ)中想通过用来代替,以减少计算量,结果导致计算次数的增加,甚至使本来收敛的初值的迭代变得发散,所以方法不可取,而每隔一步计算一次公式中的导数的算法比较容易让人接受。