注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Mr.Right

不顾一切的去想,于是我们有了梦想。脚踏实地的去做,于是梦想成了现实。

 
 
 

日志

 
 
关于我

人生一年又一年,只要每年都有所积累,有所成长,都有那么一次自己认为满意的花开时刻就好。即使一时不顺,也要敞开胸怀。生命的荣枯并不是简单的重复,一时的得失不是成败的尺度。花开不是荣耀,而是一个美丽的结束,花谢也不是耻辱,而是一个低调的开始。

网易考拉推荐

阿英讲二分法非线性方程求根以及C语言实现  

2016-12-09 19:37:25|  分类: 学习 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
// 二分法非线性方程求根 bisection c语言实现
/*
一般地,对于函数f(x),如果存在实数c,当x=c时,若f(c)=0,那么把x=c叫做函数f(x)的零点。
解方程即要求f(x)的所有零点。
假定f(x)在区间(x,y)上连续
先找到a、b属于区间(x,y),使f(a),f(b)异号,说明在区间(a,b)内一定有零点,然后求f[(a+b)/2],
现在假设f(a)<0,f(b)>0,a<b
 ①如果f[(a+b)/2]=0,该点就是零点,
如果f[(a+b)/2]<0,则在区间((a+b)/2,b)内有零点,(a+b)/2=>a,从①开始继续使用
中点函数值判断。
如果f[(a+b)/2]>0,则在区间(a,(a+b)/2)内有零点,(a+b)/2<=b,从①开始继续使用
中点函数值判断。
这样就可以不断接近零点。
通过每次把f(x)的零点所在小区间收缩一半的方法,使区间的两个端点逐步迫近函数的零点,以求得零点的近似值,这种方法叫做二分法。
给定精确度ξ,用二分法求函数f(x)零点近似值的步骤如下:
1 确定区间[a,b],验证f(a)·f(b)<0,给定精确度ξ.
2 求区间(a,b)的中点c.
3 计算f(c).
(1) 若f(c)=0,则c就是函数的零点;
(2) 若f(a)·f(c)<0,则令b=c;
(3) 若f(c)·f(b)<0 (或f(a)·f(c) ≥ 0),则令a=c.
(4) 判断是否达到精确度ξ:即若┃a-b┃<ξ,则得到零点近似值a(或b),否则重复2-4.
由于计算过程的具体运算复杂,但每一步的方式相同,所以可通过编写程序来运算。
*/
//方程式为:f(x) = 0,示例中f(x) = 1+x-x^3
//使用示例:
//input a b e: 1 2 1e-5
//solution: 1.32472
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <assert.h>
double f( double x )
{
    return 1 + x - x*x*x;
}
int main()
{
    double a = 0, b = 0, e = 1e-5;
    printf( "input a b e:\n " );
    scanf( "%lf%lf%lf", &a, &b, &e );
    e = fabs( e );
    if ( fabs( f( a ) ) <= e )
    {
        printf( "solution: %lg\n", a );
    }
    else
        if ( fabs( f( b ) ) <= e )
        {
            printf( "solution: %lg\n", b );
        }
        else
            if ( f( a )*f( b ) > 0 )
            {
                printf( "f(%lg)*f(%lg) > 0 ! need <= 0 !\n", a, b );
            }
            else
            {
                while ( fabs( b - a ) > e )
                {
                    double c = ( a + b ) / 2.0;
                    if ( f( a )* f( c ) < 0 )
                        b = c;
                    else
                        a = c;
                }
                printf( "solution: %lg\n", ( a + b ) / 2.0 );
            }
    return 0;
}
  评论这张
 
阅读(148)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

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