mirror of
https://github.com/retro-software/B5500-software.git
synced 2026-03-02 17:44:40 +00:00
1. Commit library tape images, directories, and extracted text files. 2. Commit additional utilities under Unisys-Emode-Tools.
160 lines
12 KiB
Plaintext
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
|