【數值計算方法】二分法求根的C++簡單實現


給定精確度ξ,用二分法求函數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,則令a=c.
(4) 判斷是否達到精確度ξ:即若|a-b|<ξ,則得到零點近似值a(或b),否則重復2-4
double fun(double a, double b,double ep)//二分法,[a,b]區間進行迭代遞歸,ep是精度
{
    int k = 0;
    while (abs(a - b) > 2 * ep)
    {
        double x0 = (a + b) * 0.5;
        double fx0 = fx(x0);
        double fa = fx(a);
        double fb = fx(b);
        if (fa * fx0 < 0)
        {
            b = x0;
        }
        else if (fa * x0 == 0)
        {
            break;
        }
        else
        {
            a = x0;
        }
        k++;
        printResult(a, b, k);
    }
    return (a + b )*0.5;
}
double fx(double x)//函數式只需要對返回值進行修改即可
{
    return exp(x) - x * x + 3.0 * x - 2.0;
}
void printResult(double ax, double bx,int k)
{
    cout<<k<<"\t" << ax << "\t" << bx << "\t" << (ax+bx)*0.5 << "\t";
    if (fx((ax + bx) * 0.5) > 0)
    {
        cout << "+" << endl;
    }
    else
    {
        cout << "-" << endl;
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM