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

(((silence)))

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

 
 
 

日志

 
 

期末实现了一坨C++数值算法[6] 二分法  

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

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

 

// 二分法求解非线性方程
// f:   函数
// y:   对应的y值
// a-b: x 值所在的区间
// eps: x 的精确度
// eta: y 的精确度
// 返回值: 在 [a,b] 区间内使 |f(x)-y|<eps 成立的 x 值。
double binarySolve(
                   NA::functionDP_DP f,
                   double y,
                   double a, double b,
                   double eps,
                   double eta
) {
    double ascending = f(a)<f(b); // 递增?
    if (ascending) {
        NA_ASSERT ( (f(a)<y && y<f(b)) || !"No solution!" );
    } else {
        NA_ASSERT ( (f(a)>y && y>f(b)) || !"No solution!" );
    }

    double x=(a+b)/2.0, y0;
    for(y0 = f(x); fabs(y0-y)>=eta; x=(a+b)/2.0 ) {
        y0 = f(x);
        if ( y0>y ) {
            if (ascending)
                b=x;
            else
                a=x;
        } else {
            if (ascending)
                a=x;
            else
                b=x;
        }

        if ( b-a<=eps )
            return a;
    }
    return x;
}

 

 

OVER

  评论这张
转发至微博
转发至微博
0   分享到:        
阅读(175)| 评论(0)| 不可引用 |举报
<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--相关文章--> <#--历史上的今天--> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

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