home *** CD-ROM | disk | FTP | other *** search
-
-
- { -> 278 }
- procedure simps(
- lower,upper,tol : real;
- var sum : real);
-
- { numerical integration by Simpson's rule }
- { function is fx, limits are lower and upper }
- { with number of regions equal to pieces }
- { partition is delta_x, answer is sum }
-
- var i : integer;
- x,delta_x,even_sum,
- odd_sum,end_sum,
- end_cor,sum1 : real;
- pieces : integer;
-
- begin
- pieces:=2;
- delta_x:=(upper-lower)/pieces;
- odd_sum:=fx(lower+delta_x);
- even_sum:=0.0;
- end_sum:=fx(lower)+fx(upper);
- end_cor:=dfx(lower)-dfx(upper);
- sum:=(end_sum+4.0*odd_sum)*delta_x/3.0;
- repeat
- pieces:=pieces*2;
- sum1:=sum;
- delta_x:=(upper-lower)/pieces;
- even_sum:=even_sum+odd_sum;
- odd_sum:=0.0;
- for i:=1 to pieces div 2 do
- begin
- x:=lower+delta_x*(2.0*i-1.0);
- odd_sum:=odd_sum+fx(x)
- end;
- sum:=(7.0*end_sum+14.0*even_sum+16.00*odd_sum
- +end_cor*delta_x)*delta_x/15.0;
- until (sum<>sum1) and (abs(sum-sum1)<=abs(tol*sum))
- end; { simps }
-
-
-