二分法求方程近似解 二分法求方程近似解:求方程f(x) = x^3 + x^2 - 1 = 0在[0,1]上的近似解,精确度为0.01。' u. O9 q8 M* p s0 d6 e" ^
算法分析:二分法求方程近似解的基本思想是将方程的有解区间平分为两个小区间,然后判断解在哪个小区间;继续把有解的区间一分为二进行判断,如此周而复始,直到求出满足精确要求的近似解。
6 m( ]* h8 V' X3 y$ D 二分法求方程近似解的算法步骤:
0 k! n: I5 a; }& O0 g ⑴确定区间[a,b],验证f(a).f(b) < 0,给定精确度e3 q$ I! |) A5 @, ` B
⑵求区间(a, b)的中点mid
2 g+ W4 _9 M1 f/ J9 @3 \ ⑶计算f(mid)
: R$ r7 ~( q9 j/ \" \# @6 F 若f(mid) = 0,则mid就是函数的零点
2 w l. V2 e5 v 若f(a).f(mid) < 0,则令b = mid(此时零点a < x0 < mid)
k3 h4 b3 L4 N' g 若f(mid).f(b) < 0,则令a = mid(此时零点mid < x0 < b)
$ u( p" u A4 H8 `3 _& m) E2 g2 m ⑷判断是否达到精确度e:即若|a-b| < e,则得到零点近似值a(或b);否则重复⑵-⑷。# u% o: g' s q6 S, y, V+ G! }
代码如下:
4 q% w5 f( E# \- |: \7 T: x- O1 a/ }: q double F(double a, double b, double c, double d, double x)//函数表达式0 E( M( {2 j4 Y2 y( [
{
) t& d" l+ c' Q. W5 B' {, r3 t8 [ return (((a * x + b) * x) * x + d) / c;
, G1 K9 t% A q5 i7 ]! _! | }
' W1 Q/ [/ U0 V4 j& N double Function(double a, double b, double c, double d, double low, double high, double e)
# s5 q2 E3 c3 V# ~: n# s4 y {
/ C7 f! M% U9 S double mid = (low + high) / 2;
" _# k5 m8 G4 y4 F. v) ]3 A if (F(a, b, c, d, mid) == 0)
& g1 C4 O' d- `5 W return mid;. L" k9 `9 ~4 i
while ((high-low) >= e)
/ U: D' ]4 w6 [) _ {" [6 U* B2 j# s5 X6 K; W8 c
mid = (low + high) / 2;+ T6 n3 |+ D' J* T9 H* z, _, q
if (F(a, b, c, d, mid) == 0)7 V- |9 J% g+ ~. M$ ? ]
return mid;
" u- T6 V) Z m0 T if (F(a, b, c, d, low)*F(a, b, c, d, mid) < 0)2 H: n/ p/ `2 Z, t0 ^
high = mid; x, B' d1 T; C$ }) [0 P' {
else
) w" S3 j2 S! h l9 j low = mid;
( G. E% t- v. {8 A5 ?9 ]- q }, r( o: }5 |/ K' \
return low;
* \# K! A" T) n. y/ F2 j7 ` } |