to i.left :fn :x :step output invoke :fn :x end to i.right :fn :x :step output invoke :fn :x + :step end to i.mid :fn :x :step output invoke :fn :x + :step/2 end to i.trapezium :fn :x :step output ((i.left :fn :x :step) + (i.right :fn :x :step)) / 2 end to i.simpsons :fn :x :step output ( (i.left :fn :x :step) + (i.mid :fn :x :step) * 4 + (i.right :fn :x :step) ) / 6 end to integrate :method :fn :steps :a :b localmake "step (:b - :a) / :steps localmake "sigma 0 ; for [x :a :b-:step :step] [make "sigma :sigma + apply :method (list :fn :x :step)] repeat :steps [ make "sigma :sigma + (invoke :method :fn :a :step) make "a :a + :step ] output :sigma * :step end to fn2 :x output 2 / (1 + 4 * :x * :x) end print integrate "i.left "fn2 4 -1 2 ; 2.456897 print integrate "i.right "fn2 4 -1 2 ; 2.245132 print integrate "i.mid "fn2 4 -1 2 ; 2.496091 print integrate "i.trapezium "fn2 4 -1 2 ; 2.351014 print integrate "i.simpsons "fn2 4 -1 2 ; 2.447732