posts - 218, comments - 61, trackbacks - 0, articles - 0
   :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

迭代法

Posted on 2006-06-13 12:08 魔のkyo 阅读(197) 评论(0)  编辑 收藏 引用 所属分类: Programming
#include  < iostream >
using   namespace  std;

namespace  sqrt_nsp{
    
double  n;
    
double  sqrt_iter( double  x){
        
return  (x + sqrt_nsp::n / x) / 2 ;
    }
}


/*
------迭代法------
前置条件
x=g(x)是f(x)=0的迭代函数
1)存在区间[a,b],使当x属于[a, b]时,g(x)属于[a, b]
2)|g'(x)|恒小于1
3)x0属于[a,b]

后置条件
返回f(x)=0在[a,b]上的根
*/
double  iter_algo( double  ( * g)( double ),  double  x0)
{
    
double  t = g(x0);
    
while (t - x0 > 1e - 6   || t - x0 <- 1e - 6 ){
        x0
= t;
        t
= g(x0);
    }
    
return  t;
}

int  main ()
{
    sqrt_nsp::n
= 2 ;
    printf(
" %lf\n " ,iter_algo( & sqrt_nsp::sqrt_iter, 1 ));
}
发觉库函数abs()丢失精度丢失的厉害。一开始iter_algo函数中while循环的条件是用abs表示的,输出结果的精度总是不够
只有注册用户登录后才能发表评论。