home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / cpmug / cpmug083.ark / SOLVE4%.EQN < prev    next >
Encoding:
Text File  |  1984-04-29  |  4.8 KB  |  161 lines

  1.  file SOLVE4%.EQN                         GAE - Feb. 1982
  2. Make a file called SOLVE4.EQN as follows:
  3. (1)  Start with the existing file SOLVE.EQN.
  4. (2)  Delete the entire FUNCTION SOLEXP (about 50 lines).
  5. (3)  Insert in its place the entire file SOLVE4%.EQN below
  6.           this line:
  7. -------------------------------------------------------------
  8.  
  9. FUNCTION SOLEXP (EX1,
  10.   % Local: % EX2,EX3,EX4,EX5,EX6,EX7,EX8,EX9,EX10,LEX1,LEX2,LEX3,LEX4),
  11.   EX1: NUM (FCTR(EX1)),
  12.   BLOCK WHEN SUM(EX1), EX1: NUM(EXPD(EX1))  EXIT,
  13.   ENDBLOCK,
  14.   WHEN ZERO(EX1), LIST(INDET "==" ARB(#ARB)) EXIT,
  15.   WHEN FREE(EX1, INDET), FALSE EXIT,
  16.   BLOCK WHEN PRODUCT(EX1), LEX1: REST(EX1) EXIT,
  17.     LEX1: LIST(EX1)
  18.   ENDBLOCK,
  19.   LOOP
  20.     EX1: NUM(EXPD(POP(LEX1))),
  21.     BLOCK
  22.       WHEN SUM(EX1),
  23.         LEX3:REST(EX1), EX6:EX7:EX8:EX9:EX10:0, EX2:FALSE,
  24.         LOOP
  25.           EX3: POP(LEX3),
  26.           BLOCK WHEN FREE(EX3,INDET), EX6: EX6+EX3 EXIT,
  27.             EX4: EX5: 1,
  28.             BLOCK WHEN PRODUCT(EX3), LEX4: REST(EX3) EXIT,
  29.               LEX4: LIST(EX3)
  30.             ENDBLOCK,
  31.             LOOP
  32.               EX3: POP(LEX4),
  33.               BLOCK WHEN FREE(EX3, INDET), EX4: EX4*EX3 EXIT,
  34.                 EX5: EX5*EX3
  35.               ENDBLOCK,
  36.               WHEN ATOM(LEX4), EXIT
  37.             ENDLOOP,
  38.             WHEN EMPTY(EX2), EX7: EX4, EX2: EX5  EXIT,
  39.             WHEN EX5 = EX2, EX7: EX7+EX4 EXIT,
  40.             WHEN EX5 = EX2^2, EX8: EX8+EX4 EXIT,
  41.             WHEN EX5 = EX2^3, EX9: EX9+EX4 EXIT,
  42.             WHEN EX5 = EX2^4, EX10: EX10+EX4 EXIT,
  43.             WHEN NOT ZERO(EX9), EX2:0 EXIT,
  44.             WHEN NOT ZERO(EX10), EX2:0 EXIT,
  45.             WHEN EX5^2 = EX2,
  46.               EX10:EX8, EX8:EX7, EX7:EX4, EX2:EX5 EXIT,
  47.             WHEN NOT ZERO(EX8), EX2:0 EXIT,
  48.             WHEN EX5^3=EX2,
  49.               EX9:EX7, EX7:EX4, EX2:EX5 EXIT,
  50.             WHEN EX5^4=EX2,
  51.               EX10:EX7, EX7:EX4, EX2:EX5 EXIT,
  52.             WHEN EX5^3=EX2^2,
  53.               EX9: EX7, EX8: EX4, EX7: 0, EX2: EX2/EX5 EXIT,
  54.             WHEN EX5^2=EX2^2,
  55.               EX9: EX4, EX8: EX7, EX7: 0, EX2: EX5/EX2 EXIT,
  56.             EX2:0
  57.           ENDBLOCK,
  58.           WHEN ZERO(EX2), EX1: LIST (EX1 "==" 0) EXIT,
  59.           WHEN ATOM (LEX3),
  60.             WHEN NOT ZERO(EX10),
  61.               EX1:BIQUAD1(EX6,EX7,EX8,EX9,EX10)  EXIT,
  62.             WHEN NOT ZERO(EX9),
  63.               EX1:CUBIC1(EX6,EX7,EX8,EX9)  EXIT,
  64.             WHEN NOT ZERO(EX8),
  65.               EX1:QUADRAT1(EX6,EX7,EX8)  EXIT,
  66.             EX1:LINEAR1(EX6,EX7)  EXIT,
  67.         ENDLOOP EXIT,
  68.       WHEN NOT FREE(EX1,INDET),
  69.         EX2: EX1,
  70.         EX1: SOLF(0) EXIT,
  71.       EX1: FALSE,
  72.     ENDBLOCK,
  73.     LEX2: UNION(EX1, LEX2),
  74.     WHEN ATOM (LEX1), LEX2 EXIT,
  75.   ENDLOOP,
  76. ENDFUN $
  77.  
  78. FUNCTION LINEAR1(EX6,EX7),
  79.   % fluid : EX2 %
  80.   SOLF(-EX6/EX7),
  81. ENDFUN $
  82.  
  83. FUNCTION QUADRAT1(EX6,EX7,EX8),
  84.   % fluid : EX2 %
  85.   EX6: QUADRAT(EX6,EX7,EX8),
  86.   UNION (SOLF(POP(EX6)),SOLF(POP(EX6))),
  87. ENDFUN $
  88.  
  89. FUNCTION SQRT(EX1,
  90.   %local % PBRCH),
  91.   PBRCH: TRUE,
  92.   EX1^(1/2),
  93. ENDFUN $
  94.  
  95. FUNCTION QUADRAT(EX6,EX7,EX8),
  96.   WHEN E6=0, ADJOIN(0,LINEAR(EX7,EX8))  EXIT,
  97.   EX6:SQRT(EX7^2-4*EX8*EX6),
  98.   LIST((-EX7+EX6)/(2*EX8), (-EX7-EX6)/(2*EX8)),
  99. ENDFUN $
  100.  
  101. FUNCTION CUBIC1(EX6,EX7,EX8,EX9),
  102.   %fluid : EX2 %
  103.   EX6: CUBIC(EX6,EX7,EX8,EX9),
  104.   UNION(SOLF(POP(EX6)),
  105.   UNION(SOLF(POP(EX6)),
  106.         SOLF(POP(EX6)))),
  107. ENDFUN $
  108.  
  109. #OMEGA: -1/2 + #I*3^(1/2)/2 $
  110. #OMSQ:  -1/2 - #I*3^(1/2)/2 $
  111.  
  112. FUNCTION CUBRT(EX1,
  113.   % local : % PBRCH),
  114.   PBRCH: TRUE,
  115.   EX1^(1/3),
  116. ENDFUN $
  117.  
  118. FUNCTION CUBIC(EX6,EX7,EX8,EX9)
  119.   WHEN EX6=0, ADJOIN(0,QUADRAT(EX7,EX8,EX9))  EXIT,
  120.   EX8: EX8/EX9, EX7: EX7/EX9, EX6: EX6/EX9,
  121.   EX6: QUADRAT((EX8^2-3*EX7)^3, 2*EX8^3-9*EX8*EX7+27*EX6,1),
  122.   EX9: CUBRT(POP(EX6)),
  123.   BLOCK
  124.     WHEN EX9=0, EX7: CUBRT(POP(EX6))  EXIT,
  125.     EX7: (EX8*EX8-3*EX7)/EX9,
  126.   ENDBLOCK,
  127.   LIST((-EX8+EX9+EX7)/3,
  128.        (-EX8+#OMSQ*EX9+#OMEGA*EX7)/3,
  129.        (-EX8+#OMEGA*EX9+#OMSQ*EX7)/3),
  130. ENDFUN $
  131.  
  132. FUNCTION BIQUAD1(EX6,EX7,EX8,EX9,EX10),
  133.   %fluid : EX2 %
  134.   EX6: BIQUAD(EX6,EX7,EX8,EX9,EX10),
  135.   UNION(UNION(SOLF(POP(EX6)),
  136.               SOLF(POP(EX6))),
  137.         UNION(SOLF(POP(EX6)),
  138.               SOLF(POP(EX6)))),
  139. ENDFUN $
  140.  
  141. FUNCTION BIQUAD(EX6,EX7,EX8,EX9,EX10,
  142.   % local : % EX1),
  143.   WHEN EX6=0, ADJOIN(0,CUBIC(EX7,EX8,EX9,EX10))  EXIT,
  144.   EX9: EX9/EX10, EX8: EX8/EX10, EX7: EX7/EX10, EX6: EX6/EX10,
  145.   EX1: CUBIC(-(EX9^3-4*EX9*EX8+8*EX7)^2,
  146.            3*EX9^4-16*EX9*EX9*EX8+16*EX9*EX7+16*EX8*EX8-64*EX6,
  147.            -3*EX9*EX9+8*EX8,
  148.            1),
  149.   EX10:SQRT(POP(EX1)),
  150.   EX6:SQRT(POP(EX1)),
  151.   BLOCK
  152.     WHEN EX10*EX6=0, EX8:SQRT(POP(EX1))  EXIT,
  153.     EX8:(-EX9^3+4*EX9*EX8-8*EX7)/(EX6*EX10),
  154.   ENDBLOCK,
  155.   LIST((-EX9+EX10+EX6+EX8)/4,
  156.        (-EX9+EX10-EX6-EX8)/4,
  157.        (-EX9-EX10+EX6-EX8)/4,
  158.        (-EX9-EX10-EX6+EX8)/4),
  159. ENDFUN $
  160.  
  161.