1
0
mirror of https://github.com/retro-software/B5500-software.git synced 2026-03-02 17:44:40 +00:00
Files
Paul Kimpel 2c72f7fd1d Commit CUBE Library version 13 of February 1972.
1. Commit library tape images, directories, and extracted text files.
2. Commit additional utilities under Unisys-Emode-Tools.
2018-05-27 11:24:23 -07:00

160 lines
12 KiB
Plaintext

LABEL 0000000000XXXXXX0010000001
$ CARD LIST
COMMENT ROOTS OF A POLYNOMIAL BY THE SECANT METHOD. TEST0001
TEST0002
J. K. KONDO TEST0003
(PROFESSIONAL SERVICES GROUP, BURROUGHS CORPORATION) . TEST0004
TEST0005
PROCEDURE CARD SEQUENCE START WITH SCAT0001. TEST0006
FIRST RELEASE DATE 04-15-1964 ; TEST0007
TEST0008
TEST0009
BEGIN TEST0010
TEST0011
FILE IN CARD (1,10) ; TEST0012
FILE PRINTER 1 (1,15) ; TEST0013
TEST0014
LABEL START, EOP ; TEST0015
REAL LOWER, UPPER ; TEST0016
INTEGER N ; TEST0017
TEST0018
FORMAT IN FRMT(I3, 2F8.4) ; TEST0019
START: READ(CARD, FRMT, N, LOWER, UPPER)[EOP] ; TEST0020
TEST0021
BEGIN TEST0022
TEST0023
ARRAY A, RESULT[0:N] ; TEST0024
INTEGER J ; TEST0025
FORMAT IN FIN (4E20.11) ; TEST0026
FORMAT FOUT(X30, "ORIGINAL COEFFICIENTS"/(10F12.4)), TEST0027
FORM(X30, "ROOTS OF POLYNOMIAL"/(6E20.7)) ; TEST0028
TEST0029
PROCEDURE ROOTS(N, A, LOWER, UPPER, RESULT) ; SCAT0001
VALUE N, LOWER, UPPER ; SCAT0002
INTEGER N ; SCAT0003
REAL LOWER, UPPER ; SCAT0004
ARRAY A, RESULT[0] ; SCAT0005
SCAT0006
BEGIN SCAT0007
SCAT0008
COMMENT PROCEDURE ROOTS DETERMINES THE ROOTS OF A POLYNOMIAL BY SCAT0009
THE SECANT METHOD. IT IS ASSUMED THAT THE POLYNOMIAL HAS SCAT0010
NO MULTIPLE ROOTS. THE PARAMETERS OF THE PROCEDURE ROOTS:SCAT0011
N - THE DEGREE OF THE POLYNOMIAL SCAT0012
A - THE COEFFICIENTS OF THE POLYNOMIAL SCAT0013
LOWER - THE LOWER BOUND OF THE ROOTS. SCAT0014
UPPER - THE UPPER BOUND OF THE ROOTS. SCAT0015
RESULT - THE COMPUTED ROOTS OF THE POLYNOMIAL. ; SCAT0016
SCAT0017
INTEGER I, J ; SCAT0018
REAL FACT ; SCAT0019
ARRAY ROOT, C[0:N] ; SCAT0020
SCAT0021
REAL PROCEDURE SECANT(C, J, A, B) ; SCAT0022
VALUE J, A, B ; SCAT0023
INTEGER J ; SCAT0024
REAL A, B ; SCAT0025
ARRAY C[0] ; SCAT0026
SCAT0027
BEGIN SCAT0028
SCAT0029
COMMENT PROCEDURE SECANT DETERMINES THE ROOT OF THE POLYNOMIAL SCAT0030
LOCATED IN THE INTERVAL (A,B). AN APPROXIMATION IS ACCEPT-SCAT0031
ED AS A ROOT IF THE RELATIVE DIFFERENCE BETWEEN IT AND THESCAT0032
PREVIOUS APPROXIMATION IS LESS THAN EPS. IF THE APPROXI- SCAT0033
MATION DOES NOT CONVERGE WITHIN A GIVEN NUMBER OF ITERA- SCAT0034
TIONS MAX, THE ROOT IS SET EQUAL TO THE LAST APPROXIMA- SCAT0035
TION . ; SCAT0036
SCAT0037
INTEGER MAX, I ; SCAT0038
REAL C0, C1, FA, FB, FC1, EPS ; SCAT0039
LABEL IT ; SCAT0040
SCAT0041
REAL PROCEDURE FUNC(X, J, F) ; SCAT0042
VALUE X, J ; SCAT0043
REAL X ; SCAT0044
INTEGER J ; SCAT0045
ARRAY F[0] ; SCAT0046
BEGIN SCAT0047
INTEGER M ; SCAT0048
ARRAY P[0:J] ; SCAT0049
P[0] ~ F[0] ; SCAT0050
FOR M ~ 1 STEP 1 UNTIL J DO SCAT0051
P[M] ~ P[M-1] | X + F[M] ; SCAT0052
FUNC ~ P[J] ; SCAT0053
END ; SCAT0054
SCAT0055
EPS ~ @-10 ; MAX ~ 50 ; SCAT0056
I ~ 1 ; SCAT0057
C0 ~ B ; SCAT0058
FB ~ FUNC(B, J, C) ; SCAT0059
FA ~ FUNC(A, J, C) ; SCAT0060
SCAT0061
IT: C1 ~ (A | FB - B | FA) / (FB - FA) ; SCAT0062
SCAT0063
IF ABS(C1 - C0) } ABS(C0) | EPS AND I < MAX THEN SCAT0064
BEGIN SCAT0065
I ~ I + 1 ; SCAT0066
C0 ~ C1 ; SCAT0067
FC1 ~ FUNC(C1, J, C) ; SCAT0068
IF SIGN(FC1) = SIGN(FB) THEN SCAT0069
BEGIN SCAT0070
FB ~ FC1 ; B ~ C1 SCAT0071
END SCAT0072
ELSE SCAT0073
BEGIN SCAT0074
FA ~ FC1 ; A ~ C1 SCAT0075
END ; SCAT0076
GO TO IT SCAT0077
END ; SCAT0078
SCAT0079
SECANT ~ C1 SCAT0080
END PROCEDURE SECANT ; SCAT0081
SCAT0082
FACT ~ 1 ; SCAT0083
FOR J ~ 2 STEP 1 UNTIL N DO SCAT0084
BEGIN SCAT0085
FACT ~ FACT | J ; SCAT0086
C[N-J] ~ A[N-J] | FACT SCAT0087
END ; SCAT0088
C[N-1] ~ A[N-1] ; C[N] ~ A[N] ; SCAT0089
ROOT[0] ~ LOWER ; SCAT0090
ROOT[1] ~ -A[1] / (N | A[0]) ; SCAT0091
ROOT[2] ~ UPPER ; SCAT0092
C[0] ~ C[0] / 2.0 ; SCAT0093
RESULT[1] ~ SECANT(C,2,ROOT[0],ROOT[1]) ; SCAT0094
RESULT[2] ~ SECANT(C,2,ROOT[1],ROOT[2]) ; SCAT0095
SCAT0096
FOR J ~ 3 STEP 1 UNTIL N DO SCAT0097
BEGIN SCAT0098
C[0] ~ C[0] / J ; SCAT0099
FOR I ~ 1 STEP 1 UNTIL J - 1 DO SCAT0100
BEGIN SCAT0101
C[I] ~ C[I] / (J-I) ; SCAT0102
ROOT[I] ~ RESULT[I] ; SCAT0103
END ; SCAT0104
ROOT[J] ~ UPPER ; SCAT0105
FOR I ~ 1 STEP 1 UNTIL J DO SCAT0106
RESULT[I] ~ SECANT(C, J, ROOT[I-1],ROOT[I]) SCAT0107
END SCAT0108
END PROCEDURE ROOTS ; SCAT0109
TEST0030
READ(CARD, FIN, FOR J ~ 0 STEP 1 UNTIL N DO A[J]) ; TEST0031
WRITE(PRINTER[DBL]) ; TEST0032
WRITE(PRINTER[DBL],FOUT,FOR J ~ 0 STEP 1 UNTIL N DO A[J]);TEST0033
ROOTS(N, A, LOWER, UPPER, RESULT) ; TEST0034
WRITE(PRINTER, FORM, FOR J ~ 1 STEP 1 UNTIL N DO TEST0035
RESULT[J]) ; TEST0036
GO TO START ; TEST0037
END ; TEST0038
EOP: END . TEST0039
LABEL 000000000CARD 0010000001
4 1.9 8.00
1.0 @ 00 -1.975 @ 01 1.2930 @ 02 -3.138525 @ 02
2.523339 @ 02
4 0.5 4.5
1.0 @ 00 -1.00 @ 01 3.50 @ 01 -5.0 @ 01
2.40 @ 01
3 -3.0 2.0
1.0 @ 00 0.0 -7.0 @ 00 7.0 @ 00