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

  1.  
  2.  
  3. { -> 270 }
  4. procedure trapez(
  5.         lower,upper,tol: real;
  6.         var sum        : real);
  7.  
  8. { numerical integration by the trapezoid method }
  9. { function is f (as parameter), limits are LOWER and UPPER }
  10. { with number of regions equal to PIECES }
  11. { fixed partition is DELTA_X, answer is SUM }
  12.  
  13. var    pieces,i            : integer;
  14.     x,delta_x,end_sum,mid_sum,
  15.     end_cor,sum1            : real;
  16.  
  17. begin
  18.   pieces:=1;
  19.   delta_x:=(upper-lower)/pieces;
  20.   end_sum:=fx(lower)+fx(upper);
  21.   end_cor:=(dfx(upper)-dfx(lower))/12.0;
  22.   sum:=end_sum*delta_x/2.0;
  23.   writeln('    1',sum);
  24.   mid_sum:=0.0;
  25.   repeat
  26.     pieces:=pieces*2;
  27.     sum1:=sum;
  28.     delta_x:=(upper-lower)/pieces;
  29.     for i:=1 to pieces div 2 do
  30.     begin
  31.       x:=lower+delta_x*(2.0*i-1.0);
  32.       mid_sum:=mid_sum+fx(x)
  33.     end;
  34.   sum:=(end_sum+2.0*mid_sum)*delta_x*0.5-sqr(delta_x)*end_cor;
  35.   writeln(pieces:5,sum)
  36.   until abs(sum-sum1)<=abs(tol*sum)
  37. end;        { TRAPEZ }
  38.  
  39.  
  40.