問題:
給出方程f(x) = x^3+10x-20,求該方程在(1,2)上的根,其精度不小於10^-4
看似很簡單的乙個小問題,其實有很有細節值得注意,先給出**
方法一:
#include #include方法二:double f(double
x)int
main()
if(cnt > 0) r =mid;
else l =mid;
}printf(
"%.4lf\n
",ans);
return0;
}
#include #include兩種方法沒有本質上的區別,演算法實質是一樣的,只是在程式實現手段上稍有不同,方法一用的迴圈,而方法二用的遞迴。double
ans;
double f(double
x)void m(double l,double
r)
if(cnt > 0
) m(l,mid);
else
m(mid,r);
}int
main()
有這麼幾點需要注意
(1)如何確定精度小於1e-4?
首先我們要想明白,我們要確定的是「根」的精度,即讓f(ans)=0的那個ans的計算值和真理值得差不大於1e-4,我們不知道所謂的真理值是多少,但是我們能確認他的函式值,即0,因此這個問題就轉化成了我們計算得到的值ans的函式值f(ans)與0的絕對值差要不大於1e-4,因而我們就可以每次求出當前的mid即可能中點的值,看看他與0的差距是否小於等於1e-4,如果是,這個mid就是我們最終要求的結果。
(2)關於每次迭代l和r的值的確定,暫時沒有發現什麼一般性的規則,只是在這道題中,我們可以用影象很直觀的表達出來l和r的更替規律
首先很容易可以求出f(x)在定義域上為單調遞增,然後在x=1的值是負的,在x=2的值是正的,那麼二者之間就必然只有乙個根了,因此如果當前求得的f(ans)的值為正數和負數的情況,根據該圖,我們都能很清晰的看出來到底該把誰給賦值。
二分法求根
用二分法求下面的一元三次方程 在區間 10,10 上誤差不大於 該方法的關鍵在於要解決如下兩個問題 1 如何對區間進行二分,並在二分後的左右兩個區間中確定下一次求根搜尋的區間?假設區間端點為x1和x2,則通過計算區間的中點x0,即可將區間 x1,x2 二分為 x1,x0 和 x0,x2 這時,為了確...
方程求根二分法
方程求根二分法 在實際計算允許的誤差範圍 內 對所求根區間 a,b 不斷縮小直得到所期望精度的資料 理論基礎 1 函式在區間 a,b 上連續 2 f a f b 0 3 單調函式,乙個根 屬性 數值逼近法 誤差 精度 x x b a 2 b a pow 2,k 1 x為精確值,x 為第k次二分後資料...
C 二分法查詢,遞迴二分法
用二分法來求需要查詢的值.includeusing namespace std 查詢key元素是否存在 int findkey const int buf 100 const int ilen,const int key else right left mid 1 查詢失敗 return 1 查詢k...