home *** CD-ROM | disk | FTP | other *** search
/ Simtel MSDOS 1992 September / Simtel20_Sept92.cdr / msdos / turbopas / pas_sci.arc / SIMPS.LIB < prev    next >
Text File  |  1985-09-06  |  1KB  |  45 lines

  1.  
  2.  
  3. { -> 278 }
  4. procedure simps(
  5.         lower,upper,tol    : real;
  6.         var sum        : real);
  7.  
  8. { numerical integration by Simpson's rule }
  9. { function is fx, limits are lower and upper }
  10. { with number of regions equal to pieces }
  11. { partition is delta_x, answer is sum }
  12.  
  13. var    i        : integer;
  14.     x,delta_x,even_sum,
  15.     odd_sum,end_sum,
  16.     end_cor,sum1    : real;
  17.     pieces        : integer;
  18.  
  19. begin
  20.   pieces:=2;
  21.   delta_x:=(upper-lower)/pieces;
  22.   odd_sum:=fx(lower+delta_x);
  23.   even_sum:=0.0;
  24.   end_sum:=fx(lower)+fx(upper);
  25.   end_cor:=dfx(lower)-dfx(upper);
  26.   sum:=(end_sum+4.0*odd_sum)*delta_x/3.0;
  27.   repeat
  28.     pieces:=pieces*2;
  29.     sum1:=sum;
  30.     delta_x:=(upper-lower)/pieces;
  31.     even_sum:=even_sum+odd_sum;
  32.     odd_sum:=0.0;
  33.     for i:=1 to pieces div 2 do
  34.       begin
  35.     x:=lower+delta_x*(2.0*i-1.0);
  36.     odd_sum:=odd_sum+fx(x)
  37.       end;
  38.     sum:=(7.0*end_sum+14.0*even_sum+16.00*odd_sum
  39.                 +end_cor*delta_x)*delta_x/15.0;
  40.   until (sum<>sum1) and (abs(sum-sum1)<=abs(tol*sum))
  41. end;    { simps }
  42.  
  43.  
  44.  
  45.