// Rosetta Code problem: https://rosettacode.org/wiki/Numerical_integration // by Jjuanhdez, 06/2022 print "function range steps leftrect midrect rightrect trap simpson " frmt$ = "%1.10f" print "f(x) = x^3 0 - 1 100 "; Integrate(0.0, 1.0, 1, 100) print "f(x) = 1/x 1 - 100 1000 "; Integrate(1.0, 100.0, 2, 1000) frmt$ = "%8.3f" print "f(x) = x 0 - 5000 5000000 "; Integrate(0.0, 5000.0, 3, 5000000) print "f(x) = x 0 - 6000 6000000 "; Integrate(0.0, 6000.0, 3, 6000000) end sub Func(FN, X) //Return F(X) for function number FN switch FN case 1 return X ^ 3 case 2 return 1.0 / X case 3 return X default return 0.0 end switch end sub sub Integrate(A, B, FN, N) //Display area under curve for function FN // A, B, FN limits A, B, and number of slices N DX = (B-A)/N X = A Area = 0.0 //rectangular left for i = 1 to N Area = Area + Func(FN,X)*DX X = X + DX next i print str$(Area, frmt$); X = A Area = 0.0 //rectangular right for i = 1 to N X = X + DX Area = Area + Func(FN,X)*DX next i print " "; print str$(Area, frmt$); X = A + DX / 2.0 Area = 0.0 //rectangular mid point for i = 1 to N Area = Area + Func(FN,X)*DX X = X + DX next i print " "; print str$(Area, frmt$); X = A Area = 0.0 //trapezium for i = 1 to N Area = Area + (Func(FN,X)+Func(FN,X + DX))/2.0*DX X = X + DX next i print " "; print str$(Area, frmt$); X = A Area = 0.0 //Simpson's rule for i = 1 to N Area = Area + DX/6.0*(Func(FN,X) + 4.0*Func(FN,(X+X + DX)/2.0) + Func(FN,X + DX)) X = X + DX next i print " "; print str$(Area, frmt$) end sub