5 Z i& N* M8 | S8 n。 $ p# U/ g$ l5 i. C。& q2 ?- K* u6 w% T7 \
。% q# n5 ~' e+ K u* a0 ?9 `. f( I
我们要分到什么时候呢? 分到 | 后一个面积和 - 前一个面积和 | < 规定误差 时。这样我们就达到了精确的目的。 ; K& G+ k1 _8 _& F& g- N' I: ~$ T1 m/ R
7 E+ P* [3 m: o代码清单:3 w( U1 B" o* A8 {- [( A" R
public class Jifen_bianchang {% P% W9 ?4 @2 r4 S* w4 e
, E/ [ l6 Y1 t6 C7 {. p9 m static double e = 0.00001;// 误差/ A0 `2 Z+ ?/ ?6 v6 F+ Z
1 z2 b. J" L) D& v C# [
public static void main(String[] args) { # o+ E8 _# R! h double a = 0;// 积分下限# z, S. |* V4 S. T$ j
double b = 1;// 积分上限& l' c; _' y* p) I0 w
double area = getArea(a, b);+ o0 J9 I7 n% K, i& k# T: V7 |( s7 Y
System.out.println(area); - n) G. B. A( o% X } 5 P& z5 [+ K: o* X& Q$ l; b* O, c : c/ q* ]+ @: [0 Q9 r public static double getArea(double a, double b) {% g) I+ H) k+ O0 q, x
& R$ Y I( Z( ]9 v int sign = 1;// 正负标志位; W& X; u$ }9 X9 C9 y
if (a > b) { / I0 s( J& N9 I double t = a; # Y4 `, k3 I- H, I a = b;4 K! X1 Q5 g. h6 R8 x" N" ]
b = t;3 c) D5 ?3 A& y- N2 k4 @" y# J# k
sign = -1; % Z; R, @* t1 @- _0 {0 \: l } 3 a1 w2 |. ?5 u% T double s1 = 0;// 前一个面积和) u. Y) j8 e8 \3 E& n0 F
double s2 = 0;// 后一个面积和 l6 W6 W" b# ~8 v& |5 f4 } double h = b - a; * L6 d) z. f8 M; R! G0 N s2 = getOneArea(a, b, h);( T/ P) \- `6 |2 e9 p
" e; Z8 x& T# x1 h) c for (int i = 2; Math.abs(s1 - s2) > e; i *= 2) { 6 |8 x6 `! r2 | s# ~" ` double t = h / i;// 每个梯形高 & n. R( o) y! [. O& Q* o) U double sum = 0;# P+ `! }% r: H
double x = a;! i4 c1 S& `5 @: b! y
for (int j = 0; j < i; j++) {// 求梯形和 * O& A `+ v7 j: O/ m- m sum += getOneArea(x, x + t, t); 3 H) m; l- J, C9 M( y k5 m x = x + t;9 @7 j8 n0 U, p8 S
} 6 Q. X; ]! D) K i7 ?0 h s1 = s2;6 R1 [8 f& b6 `& p7 Y
s2 = sum;4 v W5 i1 t6 ^; [6 c0 i( x
} 1 k4 L* H6 P4 a8 f; H# A return sign * s2;9 _5 r4 O# T2 r4 [( D k$ c. V
}& Q4 L, G7 m! l i4 `3 e3 w
% @/ \+ w/ I) B1 ?( m2 m6 Z public static double getOneArea(double a, double b, double h) {# ~- p! ]7 i2 k+ o% W$ C- J
- @; H% a1 X. ]( l6 x
return (f(a) + f(b)) * h / 2; 5 W8 C$ h- i6 c$ K. i6 A$ j }5 t: X: A0 b( x8 n
( a5 Z% J9 r3 p" G public static double f(double x) { * Q" m' F+ ~9 S( \8 @: {3 i return x * x; / R0 j; r! B4 B8 F } $ e2 C* {3 `2 k2 }# J 5 t, D* j( J8 X
}) C3 I m, D* r7 y9 n0 ^
输出:0.333335876464843752 X: u h+ Y" w7 L! Q