设为首页 加入收藏

TOP

迭代(二):迭代法求方程的根(一)
2019-06-14 20:07:53 】 浏览:132
Tags:迭代 方程

      迭代法是用于求方程或方程组近似根的一种常用的算法设计方法。设方程为f(x)=0,用某种数学方法导出等价的形式x=g(x),然后按以下步骤执行:  

      (1)选一个方程的近似根,赋给变量x0。

      (2)将x0的值保存于变量x1,然后计算g(x1),并将结果存于变量x0。

      (3)当x0与x1的差的绝对值还小于指定的精度要求时,重复步骤(2)的计算。

      若方程有根,并且用上述方法计算出来的近似根序列收敛,则按上述方法求得的x0就认为是方程的根。上述算法用C++程序的形式表示为:  

   x0=初始近似根;  

   do {  

      x1=x0;  

      x0=g(x1);   //  按特定的方程计算新的近似根

      } while ( fabs(x0-x1)>Epsilon);

   cout<<“方程的近似根是”<<x0;

      例如,采用迭代法求方程x=cos(x)一个根的源程序为:

#include <iostream>
#include <cmath>
using namespace std;
int main() {
    float x0,x1=0.0;
    while(1)
    {
          x0=x1;
          x1=cos(x0);
          if (fabs(x0-x1)<1e-6)
              break;
    }
    cout<<"The real root is "<<x1<<endl;
    return 0;
}

【例3】编写一个程序,用迭代法求方程x3-x-1=0在区间[0,2]中的根。

      (1)编程思路1。

      用二分迭代法求解。

      二分迭代法的原理:先取方程f(x)=0的两个粗略解 x1和x2,若f(x1)与f(x2)的正负符号相反,则表明区间(x1,x2)中至少有方程的一个解。如果f(x)在区间(x1,x2)内单调递增或单调递减,则(x1,x2)内只有方程的一个解。具体做法:取x1,x2的中点x3,计算f(x3)的值。在x1,x2中去掉函数值与f(x3)同号者(假设f(x2)和f(x3)同号),得到一个由x1和x3构成的区间,这个区间是原来的一半,并且包含精确解。不断重复(不是无穷多次)上述步骤,可以得到一个序列:x1,x2,x3,…,xn+1,xn,…这个序列的极限便是方程的精确值。

       (2)源程序1。

#include <iostream>

#include <cmath>

using namespace std;

int main()

{

    double x1,x2,x3 ;

    x1 = 0; x2 = 2 ;       // 初始区间

    do

     {

          x3 = (x1 + x2) / 2;

       if ((x1 * x1 * x1 - x1 - 1) * (x3 * x3*x3 - x3 - 1) > 0 )

            x1 = x3 ;     // 改变区间

       else

            x2 = x3 ;     // 改变区间

    } while (fabs(x2-x1)>0.000001);  // 判断是否满足精度要求

    cout<<x1<<endl;       // 输出结果

    return 0 ;

}

      (3)编程思路2。

      用牛顿迭代法求解。

       牛顿迭代法的基本原理是:设已知方程的近似根x0,则在x0附近f(x)可用一阶泰勒多项式

近似代替。因此,方程f(x)=0可近似地表示为p(x)=0,用x1表示p(x)=0的根,它与f(x)=0的根差异不大。

      设f'(x0)!=0,由于x1满足,解得

                 

      重复这一过程,得到迭代公式:

                   

      牛顿迭代法的几何解析是:在x0处作曲线的切线,切线方程为

      令y=0,可得切线与x轴的交点坐标

 

      这就是牛顿法的迭代公式。因此,牛顿法又称“切线法”。

      (4)源程序2。

#include <iostream>

#include <cmath>

using namespace std;

int main()

{

    double x1,x2 ;

   

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇递推和迭代的比较 下一篇XPath读取xml文件

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目