二分算法——求解方程的根


題目:求下面方程的一個根:f(x)=x3-5x2+10x-80=0,若求出的根是a,則要求|f(a)|<=10-6

解法:對f(x)求導,得f'(x)=3x2-10x+10.由一元二次方程求根公式知方程f'(x)=0無解,因此f'(x)恆大於0.故f(x)是單調遞增的。易知f(0)<0且f(100)>0,所以區間[0,100]內必然有且只有一個根。由於f(x)在[0,100]內是單調的,所以可以用二分的辦法在區間[0,100]中尋找根。

代碼:

class Program
{
    //x的方程
    static double F(double x)
    {
        return Math.Pow(x, 3) - 5 * Math.Pow(x, 2) + 10 * x - 80;
    }

    static void Main(string[] args)
    {
        double e = Math.Pow(10, -6);//結果小於10的負6次方,則認為得到答案的解
        int count = 1;//執行次數標志

        double min = 0;//區間最小值
        double max = 100;//區間最大值
        double root = min + (max - min) / 2;//區間中間值

        double x = F(root);//計算結果

        //只要值不小於10的負6次方,則認為還應該繼續二分查找
        while (Math.Abs(x) > e)
        {
            if (x > 0) max = root;//如果計算結果x>0,則認為結果在[0,root]區間
            else min = root;//如果計算結果x<=0,則認為結果在[root,max]區間

            root = min + (max - min) / 2;//重新設置新的中間值
            x = F(root);//計算新的函數值
            count++;//執行次數++
        }

        Console.WriteLine("結果為:{0},共計算:{1}次", root.ToString("#0.00000000"), count);
        Console.ReadLine();
    }
}

 


免責聲明!

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



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