Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
71
Task/Numerical-integration/PL-I/numerical-integration.pli
Normal file
71
Task/Numerical-integration/PL-I/numerical-integration.pli
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
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;
|
||||
Loading…
Add table
Add a link
Reference in a new issue