C语言:二分法

Python014

C语言:二分法,第1张

这段代码是求解方程f(x)=0在区间[-10,10]上的根的数值解。

方法的思想就是:一直选取区间中间的数值,如果发现中间的函数值与一侧函数值,异号,那么说明解在这个更小的区间中,采用eps=1e-5作为区间的极限大小,通过迭代的方法求解这个方程的数值解。

所以了解了上述思想,那么else if(f(a)*f(c)<0) b=c说明的是 f(a)和f(c)异号,那么使用b=(a+b)/2缩小迭代区间,继续迭代;同理else a=c说明f(a)和f(c)同号,那么使用a(a+b)/2缩小迭代区间,继续迭代!

二分法查找还是二分法求方程式解

#include<stdio.h>

#include <math.h>

float f( float a )

{

    return a*a*a + a - 1

}

float jie( float a, float b )

{

    /* x*x*x + x -1 = 0 */

    float m = (a+b)/2

    printf( "a=%f,b=%f\n", a, b)

    printf( "fm=%f, fa=%f, fb=%f\n", f(m), f(a), f(b) )

    if ( f(a)*f(b)> 0 )

    {

        printf( "起始区间不正确\n" )

        return m

    }

    if ( fabs(f(m)) < 0.0001 )

        return m

    if ( f(m)*f(a) > 0 )

        return jie( m, b )

    else

        return jie( a, m )

}

int main()

{

    float a, b, x

    printf( "输入起始区间: " )

    scanf( "%f %f", &a, &b )

    x = jie( a, b )

    printf( "x^3+x-1=0 x= %.3f\n", x )

}