home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / fortran / library / ssp / polyops / pdiv.for < prev    next >
Text File  |  1985-11-29  |  2KB  |  82 lines

  1. C
  2. C     ..................................................................
  3. C
  4. C        SUBROUTINE PDIV
  5. C
  6. C        PURPOSE
  7. C           DIVIDE ONE POLYNOMIAL BY ANOTHER
  8. C
  9. C        USAGE
  10. C           CALL PDIV(P,IDIMP,X,IDIMX,Y,IDIMY,TOL,IER)
  11. C
  12. C        DESCRIPTION OF PARAMETERS
  13. C           P     - RESULTANT VECTOR OF INTEGRAL PART
  14. C           IDIMP - DIMENSION OF P
  15. C           X     - VECTOR OF COEFFICIENTS FOR DIVIDEND POLYNOMIAL,
  16. C                   ORDERED FROM SMALLEST TO LARGEST POWER. IT IS
  17. C                   REPLACED BY REMAINDER AFTER DIVISION.
  18. C           IDIMX - DIMENSION OF X
  19. C           Y     - VECTOR OF COEFFICIENTS FOR DIVISOR POLYNOMIAL,
  20. C                   ORDERED FROM SMALLEST TO LARGEST POWER
  21. C           IDIMY - DIMENSION OF Y
  22. C           TOL   - TOLERANCE VALUE BELOW WHICH COEFFICIENTS ARE
  23. C                   ELIMINATED DURING NORMALIZATION
  24. C           IER   - ERROR CODE. 0 IS NORMAL, 1 IS FOR ZERO DIVISOR
  25. C
  26. C        REMARKS
  27. C           THE REMAINDER R REPLACES X.
  28. C           THE DIVISOR Y REMAINS UNCHANGED.
  29. C           IF DIMENSION OF Y EXCEEDS DIMENSION OF X, IDIMP IS SET TO
  30. C           ZERO AND CALCULATION IS BYPASSED
  31. C
  32. C        SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  33. C           PNORM
  34. C
  35. C        METHOD
  36. C           POLYNOMIAL X IS DIVIDED BY POLYNOMIAL Y GIVING INTEGER PART
  37. C           P AND REMAINDER R SUCH THAT X = P*Y + R.
  38. C           DIVISOR Y AND REMAINDER  VECTOR GET NORMALIZED.
  39. C
  40. C     ..................................................................
  41. C
  42.       SUBROUTINE PDIV(P,IDIMP,X,IDIMX,Y,IDIMY,TOL,IER)
  43.       DIMENSION P(1),X(1),Y(1)
  44. C
  45.       CALL PNORM (Y,IDIMY,TOL)
  46.       IF(IDIMY) 50,50,10
  47.    10 IDIMP=IDIMX-IDIMY+1
  48.       IF(IDIMP) 20,30,60
  49. C
  50. C     DEGREE OF DIVISOR WAS GREATER THAN DEGREE OF DIVIDEND
  51. C
  52.    20 IDIMP=0
  53.    30 IER=0
  54.    40 RETURN
  55. C
  56. C     Y IS ZERO POLYNOMIAL
  57. C
  58.    50 IER=1
  59.       GO TO 40
  60. C
  61. C     START REDUCTION
  62. C
  63.    60 IDIMX=IDIMY-1
  64.       I=IDIMP
  65.    70 II=I+IDIMX
  66.       P(I)=X(II)/Y(IDIMY)
  67. C
  68. C     SUBTRACT MULTIPLE OF DIVISOR
  69. C
  70.       DO 80 K=1,IDIMX
  71.       J=K-1+I
  72.       X(J)=X(J)-P(I)*Y(K)
  73.    80 CONTINUE
  74.       I=I-1
  75.       IF(I) 90,90,70
  76. C
  77. C     NORMALIZE REMAINDER POLYNOMIAL
  78. C
  79.    90 CALL PNORM(X,IDIMX,TOL)
  80.       GO TO 30
  81.       END
  82.