48 lines
1.3 KiB
Plaintext
48 lines
1.3 KiB
Plaintext
include c:\cxpl\codes; \intrinsic 'code' declarations
|
|
|
|
func real Func(FN, X); \Return F(X) for function number FN
|
|
int FN; real X;
|
|
[case FN of
|
|
1: return X*X*X;
|
|
2: return 1.0/X;
|
|
3: return X
|
|
other return 0.0;
|
|
];
|
|
|
|
func Integrate(A, B, FN, N); \Display area under curve for function FN
|
|
real A, B; int FN, N; \limits A, B, and number of slices N
|
|
real DX, X, Area; \delta X
|
|
int I;
|
|
[DX:= (B-A)/float(N);
|
|
X:= A; Area:= 0.0; \rectangular left
|
|
for I:= 1 to N do
|
|
[Area:= Area + Func(FN,X)*DX; X:= X+DX];
|
|
RlOut(0, Area);
|
|
X:= A; Area:= 0.0; \rectangular right
|
|
for I:= 1 to N do
|
|
[X:= X+DX; Area:= Area + Func(FN,X)*DX];
|
|
RlOut(0, Area);
|
|
X:= A+DX/2.0; Area:= 0.0; \rectangular mid point
|
|
for I:= 1 to N do
|
|
[Area:= Area + Func(FN,X)*DX; X:= X+DX];
|
|
RlOut(0, Area);
|
|
X:= A; Area:= 0.0; \trapezium
|
|
for I:= 1 to N do
|
|
[Area:= Area + (Func(FN,X)+Func(FN,X+DX))/2.0*DX; X:= X+DX];
|
|
RlOut(0, Area);
|
|
X:= A; Area:= 0.0; \Simpson's rule
|
|
for I:= 1 to N do
|
|
[Area:= Area +
|
|
DX/6.0*(Func(FN,X) + 4.0*Func(FN,(X+X+DX)/2.0) + Func(FN,X+DX));
|
|
X:= X+DX];
|
|
RlOut(0, Area);
|
|
CrLf(0);
|
|
];
|
|
|
|
[Format(9,6);
|
|
Integrate(0.0, 1.0, 1, 100);
|
|
Integrate(1.0, 100.0, 2, 1000);
|
|
Integrate(0.0, 5000.0, 3, 5_000_000);
|
|
Integrate(0.0, 6000.0, 3, 6_000_000);
|
|
]
|