创建博客 登录  
 加关注
   显示下一条  |  关闭

(((silence)))

#define if(...) if(!(__VA_ARGS__))

 
 
 

日志

 
 

期末实现了一坨C++数值算法[7] 牛顿迭代法  

2009-12-30 12:27:25|  分类: 编程 |  标签: |字号 订阅

这个也太简单了,直接上代码……

 

// 简单的求导
static inline double df ( NA::functionDP_DP f, double x )
{
    const double eps=1.0e-4;
    return (f(x+eps)-f(x)) / eps;
}

// 牛顿迭代法求解非线性方程
// f:   函数
// y:   对应的y值
// x0:  x 的初始值
// eps: x 的精确度
// eta: y 的精确度
// N:   允许的最大迭代次数
// 返回值: 在 [a,b] 区间内使 |f(x)-y|<eps 成立的 x 值。
double newtonSolve(
                   NA::functionDP_DP f,
                   double y,
                   double x0,
                   double eps,
                   double eta,
                   int N
) {
    double x=x0;
    for( ; fabs(f(x)-y)>=eta; ) {
        x-=f(x)/df(f,x);
        if ( fabs(x-x0)<eps ) {
            return x; // throw ( NA::Error("newtonSolve: No solution") ); ??
        }
        x0=x;
    }
    return x;
}

 

OVER

  评论这张
转发至微博
转发至微博
0   分享到:        
阅读(276)| 评论(0)| 不可引用 |举报

历史上的今天

相关文章

最近读者

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--相关文章--> <#--历史上的今天--> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2012