72 lines
2.1 KiB
Plaintext
72 lines
2.1 KiB
Plaintext
integrals: procedure options (main); /* 1 September 2019 */
|
|
|
|
f: procedure (x, function) returns (float(18));
|
|
declare x float(18), function fixed binary;
|
|
select (function);
|
|
when (1) return (x**3);
|
|
when (2) return (1/x);
|
|
when (3) return (x);
|
|
when (4) return (x);
|
|
end;
|
|
end f;
|
|
|
|
declare (a, b) fixed decimal (10);
|
|
declare (rect_area, trap_area, Simpson) float(18);
|
|
declare (d, dx) float(18);
|
|
declare (S1, S2) float(18);
|
|
declare N fixed decimal (15), function fixed binary;
|
|
declare k fixed decimal (7,2);
|
|
|
|
put (' Rectangle-left Rectangle-mid Rectangle-right' ||
|
|
' Trapezoid Simpson');
|
|
do function = 1 to 4;
|
|
select(function);
|
|
when (1) do; N = 100; a = 0; b = 1; end;
|
|
when (2) do; N = 1000; a = 1; b = 100; end;
|
|
when (3) do; N = 5000000; a = 0; b = 5000; end;
|
|
when (4) do; N = 6000000; a = 0; b = 6000; end;
|
|
end;
|
|
|
|
dx = (b-a)/float(N);
|
|
|
|
/* Rectangle method, left-side */
|
|
rect_area = 0;
|
|
do d = 0 to N-1;
|
|
rect_area = rect_area + dx*f(a + d*dx, function);
|
|
end;
|
|
put skip edit (rect_area) (E(25, 15));
|
|
|
|
/* Rectangle method, mid-point */
|
|
rect_area = 0;
|
|
do d = 0 to N-1;
|
|
rect_area = rect_area + dx*f(a + d*dx + dx/2, function);
|
|
end;
|
|
put edit (rect_area) (E(25, 15));
|
|
|
|
/* Rectangle method, right-side */
|
|
rect_area = 0;
|
|
do d = 1 to N;
|
|
rect_area = rect_area + dx*f(a + d*dx, function);
|
|
end;
|
|
put edit (rect_area) (E(25, 15));
|
|
|
|
/* Trapezoid method */
|
|
trap_area = 0;
|
|
do d = 0 to N-1;
|
|
trap_area = trap_area + dx*(f(a+d*dx, function) + f(a+(d+1)*dx, function))/2;
|
|
end;
|
|
put edit (trap_area) (X(1), E(25, 15));
|
|
|
|
/* Simpson's Rule */
|
|
S1 = f(a+dx/2, function);
|
|
S2 = 0;
|
|
do d = 1 to N-1;
|
|
S1 = S1 + f(a+d*dx+dx/2, function);
|
|
S2 = S2 + f(a+d*dx, function);
|
|
end;
|
|
Simpson = dx * (f(a, function) + f(b, function) + 4*S1 + 2*S2) / 6;
|
|
put edit (Simpson) (X(1), E(25, 15));
|
|
end;
|
|
|
|
end integrals;
|