home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / INFO / TURBOPAS / PAS_ENG.ZIP / TRAP2.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1985-07-19  |  1.2 KB  |  55 lines

  1. program trap2;  { -> 266 }
  2. { integration by the trapezoidal rule }
  3.  
  4. const tol  = 1.0E-4;
  5. var sum,upper,lower : real;
  6.  
  7.  
  8. function fx(x: real): real;
  9. { find f(x)=1/x }
  10. { watch out for x=0 ! }
  11. begin
  12.   fx:=1.0/x
  13. end;
  14.  
  15. procedure trapez(lower,upper,tol: real;
  16.   var sum  : real);
  17.  
  18. { numerical integration by the trapezoid method }
  19. { function is FX, limits are LOWER and UPPER }
  20. { with number of regions equal to PIECES }
  21. { fixed partition is DELTA_X, answer is SUM }
  22.  
  23. var pieces,i   : integer;
  24.  x,delta_x,end_sum,mid_sum,sum1 : real;
  25. begin
  26.   pieces:=1;
  27.   delta_x:=(upper-lower)/pieces;
  28.   end_sum:=fx(lower)+fx(upper);
  29.   sum:=end_sum*delta_x/2.0;
  30.   writeln('    1',sum);
  31.   mid_sum:=0.0;
  32.   repeat
  33.     pieces:=pieces*2;
  34.     sum1:=sum;
  35.     delta_x:=(upper-lower)/pieces;
  36.     for i:=1 to pieces div 2 do
  37.     begin
  38.       x:=lower+delta_x*(2.0*i-1.0);
  39.       mid_sum:=mid_sum+fx(x)
  40.     end;
  41.   sum:=(end_sum+2.0*mid_sum)*delta_x*0.5;
  42.   writeln(pieces:5,sum)
  43.   until abs(sum-sum1)<=abs(tol*sum)
  44. end;  { TRAPEZ }
  45.  
  46. begin  { main program }
  47.   clrscr;
  48.   lower:=1.0;
  49.   upper:=9.0;
  50.   writeln;
  51.   trapez(lower,upper,tol,sum);
  52.   writeln;
  53.   writeln(chr(7),'area=',sum)
  54. end.
  55.