'**************************************************** '* Program to demonstrate the series * '* reversion subroutine * '* ------------------------------------------------ * '* Reference: BASIC Scientific Subroutines, Vol. II * '* By F.R. Ruckdeschel, BYTE/McGRAWW-HILL, 1981 [1].* '* ------------------------------------------------ * '* SAMPLE RUN: * '* * '* What is the degree of the input polynomial: 3 * '* * '* Input the coefficients as prompted: * '* * '* A( 0) = ? 1 * '* A( 1) = ? 1 * '* A( 2) = ? 1 * '* A( 3) = ? 1 * '* * '* The reversed polynomial coefficients are: * '* * '* B( 0) = 9 * '* B( 1) = 1 * '* B( 2) = 0 * '* B( 3) = -1 * '* B( 4) = 0 * '* B( 5) = 3 * '* B( 6) = 0 * '* B( 7) = -12 * '* * '**************************************************** DEFINT I-N DEFDBL A-H, O-Z DIM A(10), b(10) CLS PRINT INPUT " What is the degree of the input polynomial: ", n PRINT PRINT " Input the coefficients as prompted:" PRINT FOR i = 0 TO n PRINT " A("; i; ") = "; : INPUT A(i) NEXT PRINT GOSUB 1000 IF A(1) <> 0 THEN PRINT " The reversed polynomial coefficients are:" PRINT FOR i = 0 TO 7 PRINT " B("; i; ") = "; b(i) NEXT END IF PRINT END '****************************************************** '* Series reversion subroutine * '* -------------------------------------------------- * '* This routine takes a polynomial * '* Y = A(0) + A(1) * X + ... and returns a polynomial * '* X = B(0) + B(1) * Y + ... A(1) must be <> 0. * '* The degree of reversion is limited to seven. * ' --------------------------------------------------- * '* Reference: CRC Standard Mathematical Tables, * '* 24th edition. * '****************************************************** 1000 a1 = A(1) IF a1 = 0 THEN PRINT "Divide zero error (A(1) must be nonzero)." RETURN END IF b(1) = 1# / a1 A = 1# / a1 b = A * A: A = A * b b(2) = -a2 / A a3 = A(3): A = A * b b(3) = A * (2 * a2 * a2 - a1 * a3) a4 = A(4): A = A * b b(4) = A * (5 * a1 * a2 * a3 - a1 * a1 * a4 - 5 * a2 * a2 * a2) a5 = A(5): A = A * b b(5) = 6 * a1 * a1 * a2 * a4 + 3 * a1 * a1 * a3 * a3 + 14 * a2 * a2 * a2 * a2 b(5) = b(5) - a1 * a1 * a1 * a5 - 21 * a1 * a2 * a2 * a3 b(5) = A * b(5) a6 = A(6): A = A * b b(6) = 7 * a1 * a1 * a1 * a2 * a5 + 7 * a1 * a1 * a1 * a3 * a4 + 84 * a1 * a2 * a2 * a2 * a3 b(6) = b(6) - a1 * a1 * a1 * a1 * a6 - 28 * a1 * a1 * a2 * a2 * a4 b(6) = b(6) - 28 * a1 * a1 * a2 * a3 * a3 - 42 * a2 * a2 * a2 * a2 * a2 b(6) = A * b(6) a7 = A(7): A = A * b b(7) = 8 * a1 * a1 * a1 * a1 * a2 * a6 + 8 * a1 * a1 * a1 * a1 * a3 * a5 b(7) = b(7) + 4 * a1 * a1 * a1 * a1 * a4 * a4 + 120 * a1 * a1 * a2 * a2 * a2 * a4 b(7) = b(7) + 180 * a1 * a1 * a2 * a2 * a3 * a3 + 132 * a2 * a2 * a2 * a2 * a2 * a2 b(7) = b(7) - a1 * a1 * a1 * a1 * a1 * a7 - 36 * a1 * a1 * a1 * a2 * a2 * a5 b(7) = b(7) - 72 * a1 * a1 * a1 * a2 * a3 * a4 - 12 * a1 * a1 * a1 * a3 * a3 * a3 b(7) = b(7) - 330 * a1 * a2 * a2 * a2 * a2 * a3 b(7) = A * b(7) b(0) = 0 A = A(0) FOR i = 1 TO 7 b(0) = b(0) - b(i) * A A = A * A(0) NEXT RETURN 'End of file reverse.bas