Chinaunix首页 | 论坛 | 博客
  • 博客访问: 502372
  • 博文数量: 164
  • 博客积分: 10010
  • 博客等级: 上将
  • 技术积分: 2240
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-07 12:55
文章存档

2008年(164)

我的朋友

分类:

2008-03-09 21:44:02

一、迭代法

  迭代法是用于求方程或方程组近似根的一种常用的算法设计方法。设方程为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);
  printf(“方程的近似根是%f\n”,x0);
}
迭代算法也常用于求方程组的根,令
    X=(x0,x1,…,xn-1)
设方程组为:
    xi=gi(X)     (I=0,1,…,n-1)
则求方程组根的迭代算法可描述如下:
【算法】迭代法求方程组的根
  {   for (i=0;i      x=初始近似根;
    do {
      for (i=0;i        y=x;
      for (i=0;i        x=gi(X);
      for (delta=0.0,i=0;i        if (fabs(y-x)>delta)     delta=fabs(y-x);
      } while (delta>Epsilon);
    for (i=0;i      printf(“变量x[%d]的近似根是 %f”,I,x);
    printf(“\n”);
  }
  具体使用迭代法求根时应注意以下两种可能发生的情况:
(1)   如果方程无解,算法求出的近似根序列就不会收敛,迭代过程会变成死循环,因此在使用迭代算法前应先考察方程是否有解,并在程序中对迭代的次数给予限制;
(2)   方程虽然有解,但迭代公式选择不当,或迭代的初始近似根选择不合理,也会导致迭代失败
阅读(1072) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~