題目:求下面方程的一個根: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(); } }