$SPAD/src/input easter.input

Timothy Daly December 3, 2016

Abstract

Contents

2

1 License

— license —

--Copyright The Numerical Algorithms Group Limited 1991.

———-

— * —

)spool easter.output
)set message test on
)set message auto off
)clear all
)set break resume
)set messages time off
)set quit unprotected
)set streams calculate 7

———-

2 Numbers

Let’s begin by playing with numbers: infinite precision integers — * —

--S 1 of 200
factorial(50)
--R
--R
--R   (1)  30414093201713378043612608166064768844377641568960512000000000000
--R                                                        Type: PositiveInteger
--E 1
--S 2 of 200
factor(%)
--R
--R
--R         47 22 12 8  4  3  2  2  2
--R   (2)  2  3  5  7 11 13 17 19 23 29 31 37 41 43 47
--R                                                      Type: Factored(Integer)
--E 2

———-

Infinite precision rational numbers — * —

--S 3 of 200
1/2 + 1/3 + 1/4 + 1/5 + 1/6 + 1/7 + 1/8 + 1/9 + 1/10
--R
--R
--R        4861
--R   (3)  ----
--R        2520
--R                                                      Type: Fraction(Integer)
--E 3

———-

Arbitrary precision floating point numbers — * —

--S 4 of 200
digits(50);
--R
--R
--R                                                        Type: PositiveInteger
--E 4

———-

This number is nearly an integer — * —

--S 5 of 200
exp(sqrt(163.)*%pi)
--R
--R
--R   (5)  26253741 2640768743.9999999999 9925007259 7198185688 9
--R                                                                  Type: Float
--E 5
--S 6 of 200
digits(20);
--R
--R
--R                                                        Type: PositiveInteger
--E 6

———-

Special functions — * —

--S 7 of 200
besselJ(2, 1 + %i)
--R
--R

--R   (7)  4.1579886943962155E-2 + 0.24739764151330637 %i
--R                                                   Type: Complex(DoubleFloat)
--E 7

———-

Complete decimal expansion of a rational number — * —

--S 8 of 200
decimal(1/7)
--R
--R
--R          ______
--R   (8)  0.142857
--R                                                       Type: DecimalExpansion
--E 8

———-

Continued fractions — * —

--S 9 of 200
continuedFraction(3.1415926535)
--R
--R
--R              1 |     1  |     1 |      1  |     1 |     1 |     1 |
--R   (9)  3 + +---+ + +----+ + +---+ + +-----+ + +---+ + +---+ + +---+ + ...
--R            | 7     | 15     | 1     | 292     | 1     | 1     | 6
--R                                             Type: ContinuedFraction(Integer)
--E 9

———-

Simplify an expression with nested square roots — * —

--S 10 of 200
sqrt(2*sqrt(3) + 4)
--R
--R
--R          +---------+
--R          |  +-+
--R   (10)  \|2\|3  + 4
--R                                                        Type: AlgebraicNumber
--E 10
--S 11 of 200
simplify(%)
--R

--R
--R          +---------+
--R          |  +-+
--R   (11)  \|2\|3  + 4
--R                                                    Type: Expression(Integer)
--E 11

———-

Try a more complicated example (from the Putnam exam)

— * —

--S 12 of 200
sqrt(14 + 3*sqrt(3 + 2*sqrt(5 - 12*sqrt(3 - 2*sqrt(2)))))
--R
--R
--R          +---------------------------------------+
--R          |  +------------------------------+
--R          |  |  +----------------------+
--R          |  |  |     +-----------+
--R          |  |  |     |    +-+
--R   (12)  \|3\|2\|- 12\|- 2\|2  + 3  + 5  + 3  + 14
--R                                                        Type: AlgebraicNumber
--E 12
--S 13 of 200
simplify(%)
--R
--R
--R          +---------------------------------------+
--R          |  +------------------------------+
--R          |  |  +----------------------+
--R          |  |  |     +-----------+
--R          |  |  |     |    +-+
--R   (13)  \|3\|2\|- 12\|- 2\|2  + 3  + 5  + 3  + 14
--R                                                    Type: Expression(Integer)
--E 13

———-

Cardinal numbers — * —

--S 14 of 200
2*Aleph(0) - 3
--R
--R
--R   (14)  Aleph(0)
--R                                              Type: Union(CardinalNumber,...)
--E 14

———-

3 Algebra

Numbers are nice, but symbols allow for variability—try some high school algebra: rational simplification

— * —

--S 15 of 200
(x**2 - 4)/(x**2 + 4*x + 4)
--R
--R
--R         x - 2
--R   (15)  -----
--R         x + 2
--R                                          Type: Fraction(Polynomial(Integer))
--E 15

———-

This example requires more sophistication — * —

--S 16 of 200
(%e**x - 1)/(%e**(x/2) + 1)
--R
--R
--R           x
--R         %e  - 1
--R   (16)  -------
--R           x
--R           -
--R           2
--R         %e  + 1
--R                                                    Type: Expression(Integer)
--E 16
--S 17 of 200
normalize(%)
--R
--R
--R           x
--R           -
--R           2
--R   (17)  %e  - 1
--R                                                    Type: Expression(Integer)
--E 17

———-

Expand and factor polynomials — * —

--S 18 of 200
(x + 1)**20
--R
--R
--R   (18)
--R      20      19       18        17        16         15         14         13
--R     x   + 20x   + 190x   + 1140x   + 4845x   + 15504x   + 38760x   + 77520x
--R   +
--R            12          11          10          9          8         7         6
--R     125970x   + 167960x   + 184756x   + 167960x  + 125970x  + 77520x  + 38760x
--R   +
--R           5        4        3       2
--R     15504x  + 4845x  + 1140x  + 190x  + 20x + 1
--R                                                    Type: Polynomial(Integer)
--E 18
--S 19 of 200
D(%, x)
--R
--R
--R   (19)
--R        19       18        17         16         15          14          13
--R     20x   + 380x   + 3420x   + 19380x   + 77520x   + 232560x   + 542640x
--R   +
--R             12           11           10           9           8           7
--R     1007760x   + 1511640x   + 1847560x   + 1847560x  + 1511640x  + 1007760x
--R   +
--R            6          5         4         3        2
--R     542640x  + 232560x  + 77520x  + 19380x  + 3420x  + 380x + 20
--R                                                    Type: Polynomial(Integer)
--E 19
--S 20 of 200
factor(%)
--R
--R
--R                  19
--R   (20)  20(x + 1)
--R                                          Type: Factored(Polynomial(Integer))
--E 20
--S 21 of 200
x**100 - 1
--R
--R
--R          100

--R   (21)  x    - 1
--R                                                    Type: Polynomial(Integer)
--E 21
--S 22 of 200
factor(%)
--R
--R
--R   (22)
--R                     2       4    3    2           4    3    2
--R     (x - 1)(x + 1)(x  + 1)(x  - x  + x  - x + 1)(x  + x  + x  + x + 1)
--R  *
--R       8    6    4    2       20    15    10    5       20    15    10    5
--R     (x  - x  + x  - x  + 1)(x   - x   + x   - x  + 1)(x   + x   + x   + x  + 1)
--R  *
--R       40    30    20    10
--R     (x   - x   + x   - x   + 1)
--R                                          Type: Factored(Polynomial(Integer))
--E 22

———-

Factor polynomials over finite fields and field extensions — * —

--S 23 of 200
p:= x**4 - 3*x**2 + 1
--R
--R
--R          4     2
--R   (23)  x  - 3x  + 1
--R                                                    Type: Polynomial(Integer)
--E 23
--S 24 of 200
factor(p)
--R
--R
--R           2           2
--R   (24)  (x  - x - 1)(x  + x - 1)
--R                                          Type: Factored(Polynomial(Integer))
--E 24
--S 25 of 200
phi:= rootOf(phi**2 - phi - 1);
--R
--R
--R                                                        Type: AlgebraicNumber
--E 25

--S 26 of 200
factor(p, [phi])
--R
--R
--R   (26)  (x - phi)(x - phi + 1)(x + phi - 1)(x + phi)
--R                                  Type: Factored(Polynomial(AlgebraicNumber))
--E 26
--S 27 of 200
factor(p :: Polynomial(PrimeField(5)))
--R
--R
--R                2       2
--R   (27)  (x + 2) (x + 3)
--R                                    Type: Factored(Polynomial(PrimeField(5)))
--E 27
--S 28 of 200
expand(%)
--R
--R
--R          4     2
--R   (28)  x  + 2x  + 1
--R                                              Type: Polynomial(PrimeField(5))
--E 28

———-

Partial fraction decomposition — * —

--S 29 of 200
(x**2 + 2*x + 3)/(x**3 + 4*x**2 + 5*x + 2)
--R
--R
--R             2
--R            x  + 2x + 3
--R   (29)  -----------------
--R          3     2
--R         x  + 4x  + 5x + 2
--R                                          Type: Fraction(Polynomial(Integer))
--E 29
--S 30 of 200
padicFraction(
   partialFraction(numerator(%) :: UnivariatePolynomial(x, Fraction Integer),
                   factor(denominator(%) :: Polynomial Integer) ::
                      Factored UnivariatePolynomial(x, Fraction Integer)))
--R
--R

--R             2         2        3
--R   (30)  - ----- + -------- + -----
--R           x + 1          2   x + 2
--R                   (x + 1)
--R             Type: PartialFraction(UnivariatePolynomial(x,Fraction(Integer)))
--E 30

———-

4 Trigonometry

Trigonometric manipulations—these are typically difficult for students — * —

--S 31 of 200
r:= cos(3*x)/cos(x)
--R
--R
--R         cos(3x)
--R   (31)  -------
--R          cos(x)
--R                                                    Type: Expression(Integer)
--E 31
--S 32 of 200
real(complexNormalize(%))
--R
--R
--R                  2          2
--R   (32)  - 2sin(x)  + 2cos(x)  - 1
--R                                                    Type: Expression(Integer)
--E 32
--S 33 of 200
real(normalize(simplify(complexNormalize(r))))
--R
--R
--R   (33)  2cos(2x) - 1
--R                                                    Type: Expression(Integer)
--E 33

———-

Use rewrite rules — * —

--S 34 of 200
sincosAngles:= rule _
  (cos((n | integer?(n)) * x) == _

      cos((n - 1)*x) * cos(x) - sin((n - 1)*x) * sin(x); _
   sin((n | integer?(n)) * x) == _
      sin((n - 1)*x) * cos(x) + cos((n - 1)*x) * sin(x) )
--R
--R
--R   (34)
--R   {cos(n x) == - sin(x)sin((n - 1)x) + cos(x)cos((n - 1)x),
--R    sin(n x) == cos(x)sin((n - 1)x) + cos((n - 1)x)sin(x)}
--R                           Type: Ruleset(Integer,Integer,Expression(Integer))
--E 34
--S 35 of 200
sincosAngles r
--R
--R
--R                  2         2
--R   (35)  - 3sin(x)  + cos(x)
--R                                                    Type: Expression(Integer)
--E 35
--S 36 of 200
r:= 'r;
--R
--R
--R                                                            Type: Variable(r)
--E 36

———-

5 Determining Zero Equivalence

The following expressions are all equal to zero — * —

--S 37 of 200
sqrt(997) - (997**3)**(1/6)
--R
--R
--R   (37)  0
--R                                                        Type: AlgebraicNumber
--E 37
--S 38 of 200
sqrt(999983) - (999983**3)**(1/6)
--R
--R
--R   (38)  0
--R                                                        Type: AlgebraicNumber

--E 38
--S 39 of 200
(2**(1/3) + 4**(1/3))**3 - 6*(2**(1/3) + 4**(1/3)) - 6
--R
--R
--R          3+-+3+-+2     3+-+2     3+-+    3+-+
--R   (39)  3\|2 \|4   + (3\|2   - 6)\|4  - 6\|2
--R                                                        Type: AlgebraicNumber
--E 39
--S 40 of 200
simplify(%)
--R
--R
--R          3+-+3+-+2     3+-+2     3+-+    3+-+
--R   (40)  3\|2 \|4   + (3\|2   - 6)\|4  - 6\|2
--R                                                    Type: Expression(Integer)
--E 40

———-

This expression is zero for x, y > 0 and n not equal to zero — * —

--S 41 of 200
x**(1/n)*y**(1/n) - (x*y)**(1/n)
--R
--R
--R                1    1 1
--R                -    - -
--R                n    n n
--R   (41)  - (x y)  + x y
--R                                                    Type: Expression(Integer)
--E 41
--S 42 of 200
normalize(%)
--R
--R
--R   (42)  0
--R                                                    Type: Expression(Integer)
--E 42

———-

See Joel Moses, “Algebraic Simplification: A Guide for the Perplexed”, CACM, Volume 14, Number 8, August 1971

— * —

--S 43 of 200

expr:= log(tan(1/2*x + %pi/4)) - asinh(tan(x))
--R
--R
--R                 2x + %pi
--R   (43)  log(tan(--------)) - asinh(tan(x))
--R                     4
--R                                                    Type: Expression(Integer)
--E 43
--S 44 of 200
complexNormalize(%)
--R
--R
--R   (44)
--R     -
--R        log
--R                                +---+ 4
--R                     (2x + %pi)\|- 1
--R                     ----------------
--R                             4
--R                 ((%e                )  - 1)
--R              *
--R                  +----------------------------------------------------+
--R                  |                               +---+ 4
--R                  |                    (2x + %pi)\|- 1
--R                  |                    ----------------
--R                  |                            4
--R                  |                4(%e                )
--R                  |- --------------------------------------------------
--R                  |                +---+ 8                  +---+ 4
--R                  |     (2x + %pi)\|- 1          (2x + %pi)\|- 1
--R                  |     ----------------         ----------------
--R                  |             4                        4
--R                 \|  (%e                )  - 2(%e                )  + 1
--R             +
--R                                     +---+ 4
--R                          (2x + %pi)\|- 1
--R                          ----------------
--R                  +---+           4             +---+
--R               - \|- 1 (%e                )  - \|- 1
--R          /
--R                           +---+ 4
--R                (2x + %pi)\|- 1
--R                ----------------
--R                        4
--R             (%e                )  - 1
--R   +
--R                               +---+ 2
--R                    (2x + %pi)\|- 1
--R                    ----------------

--R            +---+           4             +---+
--R         - \|- 1 (%e                )  + \|- 1
--R     log(--------------------------------------)
--R                              +---+ 2
--R                   (2x + %pi)\|- 1
--R                   ----------------
--R                           4
--R                (%e                )  + 1
--R                                                    Type: Expression(Integer)
--E 44

———-

Use a roundabout method—show that expr is a constant equal to zero — * —

--S 45 of 200
D(expr, x)
--R
--R
--R   (45)
--R                        +-----------+
--R        2x + %pi 2      |      2             2x + %pi       2        2x + %pi
--R   (tan(--------)  + 1)\|tan(x)  + 1  - 2tan(--------)tan(x)  - 2tan(--------)
--R            4                                    4                       4
--R   ---------------------------------------------------------------------------
--R                                          +-----------+
--R                                2x + %pi  |      2
--R                           2tan(--------)\|tan(x)  + 1
--R                                    4
--R                                                    Type: Expression(Integer)
--E 45
--S 46 of 200
simplify(real(complexNormalize(expand(simplify(%)))))
--R
--R
--R   (46)
--R                       +------------------------------------------------+
--R             x 2       |                        1
--R       (2cos(-)  - 1)  |------------------------------------------------ - 1
--R             2         |      x 8         x 6         x 4        x 2
--R                      4|16cos(-)  - 32cos(-)  + 24cos(-)  - 8cos(-)  + 1
--R                      \|      2           2           2          2
--R   ----------------------------------------------------------------------------
--R                              +------------------------------------------------+
--R         x 4        x 2       |                        1
--R   (4cos(-)  - 4cos(-)  + 1)  |------------------------------------------------
--R         2          2         |      x 8         x 6         x 4        x 2
--R                             4|16cos(-)  - 32cos(-)  + 24cos(-)  - 8cos(-)  + 1

--R                             \|      2           2           2          2
--R                                                    Type: Expression(Integer)
--E 46
--S 47 of 200
normalize(eval(expr, x = 0))
--R
--R
--R   (47)  0
--R                                                    Type: Expression(Integer)
--E 47
--S 48 of 200
log((2*sqrt(r) + 1)/sqrt(4*r + 4*sqrt(r) + 1))
--R
--R
--R                   +-+
--R                 2\|r  + 1
--R   (48)  log(-----------------)
--R              +--------------+
--R              |  +-+
--R             \|4\|r  + 4r + 1
--R                                                    Type: Expression(Integer)
--E 48
--S 49 of 200
simplify(%)
--R
--R
--R                   +-+
--R                 2\|r  + 1
--R   (49)  log(-----------------)
--R              +--------------+
--R              |  +-+
--R             \|4\|r  + 4r + 1
--R                                                    Type: Expression(Integer)
--E 49
--S 50 of 200
(4*r + 4*sqrt(r) + 1)**(sqrt(r)/(2*sqrt(r) + 1)) _
   * (2*sqrt(r) + 1)**(1/(2*sqrt(r) + 1)) - 2*sqrt(r) - 1
--R
--R
--R                                                 +-+
--R                        1                       \|r
--R                    ---------                ---------
--R                      +-+                      +-+
--R            +-+     2\|r  + 1   +-+          2\|r  + 1     +-+
--R   (50)  (2\|r  + 1)         (4\|r  + 4r + 1)          - 2\|r  - 1
--R                                                    Type: Expression(Integer)

--E 50
--S 51 of 200
normalize(%)
--R
--R
--R   (51)  0
--R                                                    Type: Expression(Integer)
--E 51

———-

6 The Complex Domain

Complex functions—separate into their real and imaginary parts — * —

--S 52 of 200
rectform(z) == real(z) + %i*imag(z)
--R
--R                                                                   Type: Void
--E 52
--S 53 of 200
rectform(log(3 + 4*%i))
--R
--R   Compiling function rectform with type Expression(Complex(Integer))
--R       -> Expression(Complex(Integer))
--R
--R                            4
--R         log(25) + 2%i atan(-)
--R                            3
--R   (53)  ---------------------
--R                   2
--R                                           Type: Expression(Complex(Integer))
--E 53
--S 54 of 200
simplify(rectform(tan(x + %i*y)))
--R
--R
--R                       - 2y                   2       - 2y
--R         - 2%i cos(x)%e    sin(x) + (- 2cos(x)  + 1)%e     + 1
--R   (54)  -----------------------------------------------------
--R                  - 2y                      2        - 2y
--R         2cos(x)%e    sin(x) + (- 2%i cos(x)  + %i)%e     - %i
--R                                           Type: Expression(Complex(Integer))
--E 54

———-

Check for branch abuse. See David R. Stoutemyer, “Crimes and Misdemeanors in the Computer Algebra Trade”, Notices of the AMS, Volume 38, Number 7, September 1991. This first expression can simplify to \sqrt{(xy)}/\sqrt{(x)}, but no further in general (consider what happens when x, y = -1).

— * —

--S 55 of 200
sqrt(x*y*abs(z)**2) / (sqrt(x)*abs(z))
--R
--R
--R          +-----------+
--R          |          2
--R         \|x y abs(z)
--R   (55)  --------------
--R                  +-+
--R           abs(z)\|x
--R                                                    Type: Expression(Integer)
--E 55

———-

If z = −1, \sqrt{(}1/z) is not equal to 1/\sqrt{(}z)

— * —

--S 56 of 200
sqrt(1/z) - 1/sqrt(z)
--R
--R
--R          +-+
--R          |1  +-+
--R          |- \|z  - 1
--R         \|z
--R   (56)  ------------
--R              +-+
--R             \|z
--R                                                    Type: Expression(Integer)
--E 56

———-

If z = 3πi, log(exp(z)) is not equal to z — * —

--S 57 of 200
log(%e**z)
--R
--R
--R   (57)  z
--R                                                    Type: Expression(Integer)

--E 57
--S 58 of 200
normalize(%)
--R
--R
--R   (58)  z
--R                                                    Type: Expression(Integer)
--E 58

———-

The principal value of this expression is (10 − 4π)i — * —

--S 59 of 200
log(%e**(10*%i))
--R
--R
--R               10%i
--R   (59)  log(%e    )
--R                                           Type: Expression(Complex(Integer))
--E 59
--S 60 of 200
normalize(%)
--R
--R
--R               10%i
--R   (60)  log(%e    )
--R                                           Type: Expression(Complex(Integer))
--E 60

———-

If z = π, arctan(tan(z)) is not equal to z — * —

--S 61 of 200
atan(tan(z))
--R
--R
--R   (61)  z
--R                                                    Type: Expression(Integer)
--E 61

———-

If z = 2πi, \sqrt{(} exp(z)) is not equal to exp(z/2)

— * —

--S 62 of 200
sqrt(%e**z) - %e**(z/2)
--R
--R
--R                    z
--R          +---+     -
--R          |  z      2
--R   (62)  \|%e   - %e
--R                                                    Type: Expression(Integer)
--E 62

———-

7 Equations

Manipulate an equation using a natural syntax — * —

--S 63 of 200
(x = 0)/2 + 1
--R
--R
--R         x + 2
--R   (63)  -----= 1
--R           2
--R                                Type: Equation(Fraction(Polynomial(Integer)))
--E 63

———-

Solve various nonlinear equations—this cubic polynomial has all real roots — * —

--S 64 of 200
radicalSolve(3*x**3 - 18*x**2 + 33*x - 19 = 0, x)
--R
--R
--R   (64)
--R                        +-------------+2                 +-------------+
--R                        | +-+    +---+                   | +-+    +---+
--R            +---+       |\|3  + \|- 1        +---+       |\|3  + \|- 1
--R       (- 3\|- 3  + 3)  |-------------  + (6\|- 3  + 6)  |------------- - 2
--R                       3|      +-+                      3|      +-+
--R                       \|    6\|3                       \|    6\|3
--R   [x= --------------------------------------------------------------------,
--R                                          +-------------+
--R                                          | +-+    +---+
--R                              +---+       |\|3  + \|- 1
--R                           (3\|- 3  + 3)  |-------------

--R                                         3|      +-+
--R                                         \|    6\|3
--R                        +-------------+2                 +-------------+
--R                        | +-+    +---+                   | +-+    +---+
--R            +---+       |\|3  + \|- 1        +---+       |\|3  + \|- 1
--R       (- 3\|- 3  - 3)  |-------------  + (6\|- 3  - 6)  |------------- + 2
--R                       3|      +-+                      3|      +-+
--R                       \|    6\|3                       \|    6\|3
--R    x= --------------------------------------------------------------------,
--R                                          +-------------+
--R                                          | +-+    +---+
--R                              +---+       |\|3  + \|- 1
--R                           (3\|- 3  - 3)  |-------------
--R                                         3|      +-+
--R                                         \|    6\|3
--R          +-------------+2     +-------------+
--R          | +-+    +---+       | +-+    +---+
--R          |\|3  + \|- 1        |\|3  + \|- 1
--R       3  |-------------  + 6  |------------- + 1
--R         3|      +-+          3|      +-+
--R         \|    6\|3           \|    6\|3
--R    x= ------------------------------------------]
--R                       +-------------+
--R                       | +-+    +---+
--R                       |\|3  + \|- 1
--R                    3  |-------------
--R                      3|      +-+
--R                      \|    6\|3
--R                                    Type: List(Equation(Expression(Integer)))
--E 64
--S 65 of 200
map(e +-> lhs(e) = rectform(rhs(e)), %)
--R
--R   Compiling function rectform with type Expression(Integer) ->
--R      Expression(Complex(Integer))
--R
--R   (65)
--R   [
--R     x =
--R             +-+          %pi 2           +-+         %pi      +-+     %pi
--R           (\|3  - %i)sin(---)  + ((- 2%i\|3  - 2)cos(---) + 4\|3 )sin(---)
--R                           18                          18               18
--R         +
--R               +-+          %pi 2       +-+    %pi     +-+
--R           (- \|3  + %i)cos(---)  - 4%i\|3 cos(---) + \|3  + %i
--R                             18                 18
--R      /
--R           +-+    %pi        +-+    %pi
--R         2\|3 sin(---) - 2%i\|3 cos(---)

--R                   18                18
--R     ,
--R
--R     x =
--R               +-+          %pi 2         +-+         %pi      +-+     %pi
--R           (- \|3  - %i)sin(---)  + ((2%i\|3  - 2)cos(---) + 4\|3 )sin(---)
--R                             18                        18               18
--R         +
--R             +-+          %pi 2       +-+    %pi     +-+
--R           (\|3  + %i)cos(---)  - 4%i\|3 cos(---) - \|3  + %i
--R                           18                 18
--R      /
--R           +-+    %pi        +-+    %pi
--R         2\|3 sin(---) - 2%i\|3 cos(---)
--R                   18                18
--R     ,
--R
--R     x =
--R                  %pi 2         %pi      +-+     %pi           %pi 2
--R           %i sin(---)  + (2cos(---) + 2\|3 )sin(---) - %i cos(---)
--R                   18            18               18            18
--R         +
--R                 +-+    %pi
--R           - 2%i\|3 cos(---) - %i
--R                         18
--R      /
--R          +-+    %pi       +-+    %pi
--R         \|3 sin(---) - %i\|3 cos(---)
--R                  18               18
--R     ]
--R                           Type: List(Equation(Expression(Complex(Integer))))
--E 65

———-

Some simple seeming problems can have messy answers — * —

--S 66 of 200
eqn:= x**4 + x**3 + x**2 + x + 1 = 0
--R
--R
--R          4    3    2
--R   (66)  x  + x  + x  + x + 1= 0
--R                                          Type: Equation(Polynomial(Integer))
--E 66
--S 67 of 200
radicalSolve(eqn, x)
--R

--R
--R   (67)
--R   [
--R     x =
--R           -
--R                2
--R             *
--R                ROOT
--R                                 +-------------------+2
--R                                 |     +-+      +---+
--R                                 |- 25\|3  + 45\|- 5
--R                           - 36  |-------------------
--R                                3|          +-+
--R                                \|       54\|3
--R                         +
--R                                 +-------------------+
--R                                 |     +-+      +---+
--R                                 |- 25\|3  + 45\|- 5
--R                           - 30  |------------------- - 40
--R                                3|          +-+
--R                                \|       54\|3
--R                      *
--R                         ROOT
--R                                    +-------------------+2
--R                                    |     +-+      +---+
--R                                    |- 25\|3  + 45\|- 5
--R                                36  |-------------------
--R                                   3|          +-+
--R                                   \|       54\|3
--R                              +
--R                                      +-------------------+
--R                                      |     +-+      +---+
--R                                      |- 25\|3  + 45\|- 5
--R                                - 15  |------------------- + 40
--R                                     3|          +-+
--R                                     \|       54\|3
--R                           /
--R                                  +-------------------+
--R                                  |     +-+      +---+
--R                                  |- 25\|3  + 45\|- 5
--R                              36  |-------------------
--R                                 3|          +-+
--R                                 \|       54\|3
--R                     +
--R                             +-------------------+
--R                             |     +-+      +---+
--R                             |- 25\|3  + 45\|- 5
--R                       - 45  |-------------------
--R                            3|          +-+
--R                            \|       54\|3

--R                  /
--R                           +-------------------+
--R                           |     +-+      +---+
--R                           |- 25\|3  + 45\|- 5
--R                       36  |-------------------
--R                          3|          +-+
--R                          \|       54\|3
--R                    *
--R                       ROOT
--R                                  +-------------------+2
--R                                  |     +-+      +---+
--R                                  |- 25\|3  + 45\|- 5
--R                              36  |-------------------
--R                                 3|          +-+
--R                                 \|       54\|3
--R                            +
--R                                    +-------------------+
--R                                    |     +-+      +---+
--R                                    |- 25\|3  + 45\|- 5
--R                              - 15  |------------------- + 40
--R                                   3|          +-+
--R                                   \|       54\|3
--R                         /
--R                                +-------------------+
--R                                |     +-+      +---+
--R                                |- 25\|3  + 45\|- 5
--R                            36  |-------------------
--R                               3|          +-+
--R                               \|       54\|3
--R         +
--R             +---------------------------------------------------------+
--R             |    +-------------------+2      +-------------------+
--R             |    |     +-+      +---+        |     +-+      +---+
--R             |    |- 25\|3  + 45\|- 5         |- 25\|3  + 45\|- 5
--R             |36  |-------------------  - 15  |------------------- + 40
--R             |   3|          +-+             3|          +-+
--R             |   \|       54\|3              \|       54\|3
--R           2 |---------------------------------------------------------  - 1
--R             |                     +-------------------+
--R             |                     |     +-+      +---+
--R             |                     |- 25\|3  + 45\|- 5
--R             |                 36  |-------------------
--R             |                    3|          +-+
--R            \|                    \|       54\|3
--R      /
--R         4
--R     ,
--R
--R     x =
--R             2

--R          *
--R             ROOT
--R                              +-------------------+2      +-------------------+
--R                              |     +-+      +---+        |     +-+      +---+
--R                              |- 25\|3  + 45\|- 5         |- 25\|3  + 45\|- 5
--R                        - 36  |-------------------  - 30  |-------------------
--R                             3|          +-+             3|          +-+
--R                             \|       54\|3              \|       54\|3
--R                      +
--R                        - 40
--R                   *
--R                     +---------------------------------------------------------+
--R                     |    +-------------------+2      +-------------------+
--R                     |    |     +-+      +---+        |     +-+      +---+
--R                     |    |- 25\|3  + 45\|- 5         |- 25\|3  + 45\|- 5
--R                     |36  |-------------------  - 15  |------------------- + 40
--R                     |   3|          +-+             3|          +-+
--R                     |   \|       54\|3              \|       54\|3
--R                     |---------------------------------------------------------
--R                     |                     +-------------------+
--R                     |                     |     +-+      +---+
--R                     |                     |- 25\|3  + 45\|- 5
--R                     |                 36  |-------------------
--R                     |                    3|          +-+
--R                    \|                    \|       54\|3
--R                  +
--R                          +-------------------+
--R                          |     +-+      +---+
--R                          |- 25\|3  + 45\|- 5
--R                    - 45  |-------------------
--R                         3|          +-+
--R                         \|       54\|3
--R               /
--R                        +-------------------+
--R                        |     +-+      +---+
--R                        |- 25\|3  + 45\|- 5
--R                    36  |-------------------
--R                       3|          +-+
--R                       \|       54\|3
--R                 *
--R                   +---------------------------------------------------------+
--R                   |    +-------------------+2      +-------------------+
--R                   |    |     +-+      +---+        |     +-+      +---+
--R                   |    |- 25\|3  + 45\|- 5         |- 25\|3  + 45\|- 5
--R                   |36  |-------------------  - 15  |------------------- + 40
--R                   |   3|          +-+             3|          +-+
--R                   |   \|       54\|3              \|       54\|3
--R                   |---------------------------------------------------------
--R                   |                     +-------------------+
--R                   |                     |     +-+      +---+

--R                   |                     |- 25\|3  + 45\|- 5
--R                   |                 36  |-------------------
--R                   |                    3|          +-+
--R                  \|                    \|       54\|3
--R         +
--R             +---------------------------------------------------------+
--R             |    +-------------------+2      +-------------------+
--R             |    |     +-+      +---+        |     +-+      +---+
--R             |    |- 25\|3  + 45\|- 5         |- 25\|3  + 45\|- 5
--R             |36  |-------------------  - 15  |------------------- + 40
--R             |   3|          +-+             3|          +-+
--R             |   \|       54\|3              \|       54\|3
--R           2 |---------------------------------------------------------  - 1
--R             |                     +-------------------+
--R             |                     |     +-+      +---+
--R             |                     |- 25\|3  + 45\|- 5
--R             |                 36  |-------------------
--R             |                    3|          +-+
--R            \|                    \|       54\|3
--R      /
--R         4
--R     ,
--R
--R     x =
--R           -
--R                2
--R             *
--R                ROOT
--R                                 +-------------------+2
--R                                 |     +-+      +---+
--R                                 |- 25\|3  + 45\|- 5
--R                           - 36  |-------------------
--R                                3|          +-+
--R                                \|       54\|3
--R                         +
--R                                 +-------------------+
--R                                 |     +-+      +---+
--R                                 |- 25\|3  + 45\|- 5
--R                           - 30  |------------------- - 40
--R                                3|          +-+
--R                                \|       54\|3
--R                      *
--R                         ROOT
--R                                    +-------------------+2
--R                                    |     +-+      +---+
--R                                    |- 25\|3  + 45\|- 5
--R                                36  |-------------------
--R                                   3|          +-+
--R                                   \|       54\|3
--R                              +

--R                                      +-------------------+
--R                                      |     +-+      +---+
--R                                      |- 25\|3  + 45\|- 5
--R                                - 15  |------------------- + 40
--R                                     3|          +-+
--R                                     \|       54\|3
--R                           /
--R                                  +-------------------+
--R                                  |     +-+      +---+
--R                                  |- 25\|3  + 45\|- 5
--R                              36  |-------------------
--R                                 3|          +-+
--R                                 \|       54\|3
--R                     +
--R                           +-------------------+
--R                           |     +-+      +---+
--R                           |- 25\|3  + 45\|- 5
--R                       45  |-------------------
--R                          3|          +-+
--R                          \|       54\|3
--R                  /
--R                           +-------------------+
--R                           |     +-+      +---+
--R                           |- 25\|3  + 45\|- 5
--R                       36  |-------------------
--R                          3|          +-+
--R                          \|       54\|3
--R                    *
--R                       ROOT
--R                                  +-------------------+2
--R                                  |     +-+      +---+
--R                                  |- 25\|3  + 45\|- 5
--R                              36  |-------------------
--R                                 3|          +-+
--R                                 \|       54\|3
--R                            +
--R                                    +-------------------+
--R                                    |     +-+      +---+
--R                                    |- 25\|3  + 45\|- 5
--R                              - 15  |------------------- + 40
--R                                   3|          +-+
--R                                   \|       54\|3
--R                         /
--R                                +-------------------+
--R                                |     +-+      +---+
--R                                |- 25\|3  + 45\|- 5
--R                            36  |-------------------
--R                               3|          +-+
--R                               \|       54\|3
--R         +

--R               +---------------------------------------------------------+
--R               |    +-------------------+2      +-------------------+
--R               |    |     +-+      +---+        |     +-+      +---+
--R               |    |- 25\|3  + 45\|- 5         |- 25\|3  + 45\|- 5
--R               |36  |-------------------  - 15  |------------------- + 40
--R               |   3|          +-+             3|          +-+
--R               |   \|       54\|3              \|       54\|3
--R           - 2 |---------------------------------------------------------  - 1
--R               |                     +-------------------+
--R               |                     |     +-+      +---+
--R               |                     |- 25\|3  + 45\|- 5
--R               |                 36  |-------------------
--R               |                    3|          +-+
--R              \|                    \|       54\|3
--R      /
--R         4
--R     ,
--R
--R     x =
--R             2
--R          *
--R             ROOT
--R                              +-------------------+2      +-------------------+
--R                              |     +-+      +---+        |     +-+      +---+
--R                              |- 25\|3  + 45\|- 5         |- 25\|3  + 45\|- 5
--R                        - 36  |-------------------  - 30  |-------------------
--R                             3|          +-+             3|          +-+
--R                             \|       54\|3              \|       54\|3
--R                      +
--R                        - 40
--R                   *
--R                     +---------------------------------------------------------+
--R                     |    +-------------------+2      +-------------------+
--R                     |    |     +-+      +---+        |     +-+      +---+
--R                     |    |- 25\|3  + 45\|- 5         |- 25\|3  + 45\|- 5
--R                     |36  |-------------------  - 15  |------------------- + 40
--R                     |   3|          +-+             3|          +-+
--R                     |   \|       54\|3              \|       54\|3
--R                     |---------------------------------------------------------
--R                     |                     +-------------------+
--R                     |                     |     +-+      +---+
--R                     |                     |- 25\|3  + 45\|- 5
--R                     |                 36  |-------------------
--R                     |                    3|          +-+
--R                    \|                    \|       54\|3
--R                  +
--R                        +-------------------+
--R                        |     +-+      +---+
--R                        |- 25\|3  + 45\|- 5
--R                    45  |-------------------

--R                       3|          +-+
--R                       \|       54\|3
--R               /
--R                        +-------------------+
--R                        |     +-+      +---+
--R                        |- 25\|3  + 45\|- 5
--R                    36  |-------------------
--R                       3|          +-+
--R                       \|       54\|3
--R                 *
--R                   +---------------------------------------------------------+
--R                   |    +-------------------+2      +-------------------+
--R                   |    |     +-+      +---+        |     +-+      +---+
--R                   |    |- 25\|3  + 45\|- 5         |- 25\|3  + 45\|- 5
--R                   |36  |-------------------  - 15  |------------------- + 40
--R                   |   3|          +-+             3|          +-+
--R                   |   \|       54\|3              \|       54\|3
--R                   |---------------------------------------------------------
--R                   |                     +-------------------+
--R                   |                     |     +-+      +---+
--R                   |                     |- 25\|3  + 45\|- 5
--R                   |                 36  |-------------------
--R                   |                    3|          +-+
--R                  \|                    \|       54\|3
--R         +
--R               +---------------------------------------------------------+
--R               |    +-------------------+2      +-------------------+
--R               |    |     +-+      +---+        |     +-+      +---+
--R               |    |- 25\|3  + 45\|- 5         |- 25\|3  + 45\|- 5
--R               |36  |-------------------  - 15  |------------------- + 40
--R               |   3|          +-+             3|          +-+
--R               |   \|       54\|3              \|       54\|3
--R           - 2 |---------------------------------------------------------  - 1
--R               |                     +-------------------+
--R               |                     |     +-+      +---+
--R               |                     |- 25\|3  + 45\|- 5
--R               |                 36  |-------------------
--R               |                    3|          +-+
--R              \|                    \|       54\|3
--R      /
--R         4
--R     ]
--R                                    Type: List(Equation(Expression(Integer)))
--E 67

———-

Check one of the answers — * —

--S 68 of 200

eval(eqn, %.1)
--R
--R
--R   (68)
--R                                      +-------------------+
--R                                      |     +-+      +---+
--R             +---+ +-+2       +---+   |- 25\|3  + 45\|- 5
--R         (90\|- 5 \|3   - 270\|- 5 )  |-------------------
--R                                     3|          +-+
--R                                     \|       54\|3
--R      *
--R         ROOT
--R                         +-------------------+2      +-------------------+
--R                         |     +-+      +---+        |     +-+      +---+
--R                         |- 25\|3  + 45\|- 5         |- 25\|3  + 45\|- 5
--R                  (- 36  |-------------------  - 30  |------------------- - 40)
--R                        3|          +-+             3|          +-+
--R                        \|       54\|3              \|       54\|3
--R               *
--R                   +---------------------------------------------------------+
--R                   |    +-------------------+2      +-------------------+
--R                   |    |     +-+      +---+        |     +-+      +---+
--R                   |    |- 25\|3  + 45\|- 5         |- 25\|3  + 45\|- 5
--R                   |36  |-------------------  - 15  |------------------- + 40
--R                   |   3|          +-+             3|          +-+
--R                   |   \|       54\|3              \|       54\|3
--R                   |---------------------------------------------------------
--R                   |                     +-------------------+
--R                   |                     |     +-+      +---+
--R                   |                     |- 25\|3  + 45\|- 5
--R                   |                 36  |-------------------
--R                   |                    3|          +-+
--R                  \|                    \|       54\|3
--R              +
--R                      +-------------------+
--R                      |     +-+      +---+
--R                      |- 25\|3  + 45\|- 5
--R                - 45  |-------------------
--R                     3|          +-+
--R                     \|       54\|3
--R           /
--R                    +-------------------+
--R                    |     +-+      +---+
--R                    |- 25\|3  + 45\|- 5
--R                36  |-------------------
--R                   3|          +-+
--R                   \|       54\|3
--R             *
--R                 +---------------------------------------------------------+
--R                 |    +-------------------+2      +-------------------+

--R                 |    |     +-+      +---+        |     +-+      +---+
--R                 |    |- 25\|3  + 45\|- 5         |- 25\|3  + 45\|- 5
--R                 |36  |-------------------  - 15  |------------------- + 40
--R                 |   3|          +-+             3|          +-+
--R                 |   \|       54\|3              \|       54\|3
--R                 |---------------------------------------------------------
--R                 |                     +-------------------+
--R                 |                     |     +-+      +---+
--R                 |                     |- 25\|3  + 45\|- 5
--R                 |                 36  |-------------------
--R                 |                    3|          +-+
--R                \|                    \|       54\|3
--R     +
--R                                       +-------------------+
--R                                       |     +-+      +---+
--R              +---+ +-+2       +---+   |- 25\|3  + 45\|- 5
--R       (- 135\|- 5 \|3   + 405\|- 5 )  |-------------------
--R                                      3|          +-+
--R                                      \|       54\|3
--R  /
--R                                    +-------------------+2
--R                                    |     +-+      +---+
--R            +---+ +-+2        +-+   |- 25\|3  + 45\|- 5
--R       (432\|- 5 \|3   + 1584\|3 )  |-------------------
--R                                   3|          +-+
--R                                   \|       54\|3
--R     +
--R                                   +-------------------+
--R                                   |     +-+      +---+
--R            +---+ +-+2       +-+   |- 25\|3  + 45\|- 5         +-+        +---+
--R     (- 180\|- 5 \|3   - 660\|3 )  |------------------- + 1760\|3  + 1440\|- 5
--R                                  3|          +-+
--R                                  \|       54\|3
--R     =
--R     0
--R                                          Type: Equation(Expression(Integer))
--E 68
--S 69 of 200
%e**(2*x) + 2*%e**x + 1 = z
--R
--R
--R           2x      x
--R   (69)  %e   + 2%e  + 1= z
--R                                          Type: Equation(Expression(Integer))
--E 69
--S 70 of 200
solve(%, x)
--R

--R
--R                  +-+                +-+
--R   (70)  [x= log(\|z  - 1),x= log(- \|z  - 1)]
--R                                    Type: List(Equation(Expression(Integer)))
--E 70

———-

This equation is already factored and so should be easy to solve — * —

--S 71 of 200
(x + 1) * (sin(x)**2 + 1)**2 * cos(3*x)**3 = 0
--R
--R
--R                       3      4                  3      2                 3
--R   (71)  (x + 1)cos(3x) sin(x)  + (2x + 2)cos(3x) sin(x)  + (x + 1)cos(3x) = 0
--R                                          Type: Equation(Expression(Integer))
--E 71
--S 72 of 200
solve(%, x)
--R
--R
--R                   +---+             +---+     %pi
--R   (72)  [x= asin(\|- 1 ),x= - asin(\|- 1 ),x= ---,x= - 1]
--R                                                6
--R                                    Type: List(Equation(Expression(Integer)))
--E 72

———-

The following equations have an infinite number of solutions (let n be an arbitrary integer): z = 0[+n2πi]

— * —

--S 73 of 200
solve(%e**z = 1, z)
--R
--R
--R   (73)  [z= 0]
--R                                    Type: List(Equation(Expression(Integer)))
--E 73

———-

x = π/4[+nπ] — * —

--S 74 of 200
solve(sin(x) = cos(x), x)

--R
--R
--R             %pi
--R   (74)  [x= ---]
--R              4
--R                                    Type: List(Equation(Expression(Integer)))
--E 74
--S 75 of 200
solve(tan(x) = 1, x)
--R
--R
--R             %pi
--R   (75)  [x= ---]
--R              4
--R                                    Type: List(Equation(Expression(Integer)))
--E 75

———-

x = 0, 0[+nπ, +n2π] — * —

--S 76 of 200
solve(sin(x) = tan(x), x)
--R
--R
--R   (76)  [x= 0]
--R                                    Type: List(Equation(Expression(Integer)))
--E 76

———-

This equation has no solutions — * —

--S 77 of 200
solve(sqrt(x**2 + 1) = x - 2, x)
--R
--R
--R   (77)  []
--R                                    Type: List(Equation(Expression(Integer)))
--E 77

———-

Solve a system of linear equations — * —

--S 78 of 200
eq1:=   x +   y +   z =  6

--R
--R
--R   (78)  z + y + x= 6
--R                                          Type: Equation(Polynomial(Integer))
--E 78
--S 79 of 200
eq2:= 2*x +   y + 2*z = 10
--R
--R
--R   (79)  2z + y + 2x= 10
--R                                          Type: Equation(Polynomial(Integer))
--E 79
--S 80 of 200
eq3:=   x + 3*y +   z = 10
--R
--R
--R   (80)  z + 3y + x= 10
--R                                          Type: Equation(Polynomial(Integer))
--E 80

———-

Note that the solution is parametric — * —

--S 81 of 200
solve([eq1, eq2, eq3], [x, y, z])
--R
--R
--I   (81)  [[x= - %BU + 4,y= 2,z= %BU]]
--R                    Type: List(List(Equation(Fraction(Polynomial(Integer)))))
--E 81

———-

Solve a system of nonlinear equations — * —

--S 82 of 200
eq1:= x**2*y + 3*y*z - 4 = 0
--R
--R
--R                 2
--R   (82)  3y z + x y - 4= 0
--R                                          Type: Equation(Polynomial(Integer))
--E 82
--S 83 of 200
eq2:= -3*x**2*z + 2*y**2 + 1 = 0
--R

--R
--R             2      2
--R   (83)  - 3x z + 2y  + 1= 0
--R                                          Type: Equation(Polynomial(Integer))
--E 83
--S 84 of 200
eq3:= 2*y*z**2 - z**2 - 1 = 0
--R
--R
--R                  2
--R   (84)  (2y - 1)z  - 1= 0
--R                                          Type: Equation(Polynomial(Integer))
--E 84

———-

Solving this by hand would be a nightmare — * —

--S 85 of 200
solve([eq1, eq2, eq3], [x, y, z])
--R
--R
--R   (85)
--R   [[x= 1,y= 1,z= 1], [x= - 1,y= 1,z= 1],
--R             2                      2
--R    [- 3z + x  + 2= 0,y= - 3z + 1,3z  - 2z + 1= 0],
--R
--R                                                4      3      2
--R         4      3      2          2        - 18z  + 24z  + 21z  + 12z + 3
--R     [12z  - 12z  - 30z  + 7z + 3x = 0, y= ------------------------------,
--R                                                          2
--R        5     4     3     2
--R      6z  - 6z  - 9z  - 7z  - 3z - 1= 0]
--R     ]
--R                    Type: List(List(Equation(Fraction(Polynomial(Integer)))))
--E 85

———-

8 Matrix Algebra

— * —

--S 86 of 200
m:= matrix([[a, b], [1, a*b]])
--R

--R
--R         +a   b +
--R   (86)  |      |
--R         +1  a b+
--R                                            Type: Matrix(Polynomial(Integer))
--E 86

———-

Invert the matrix — * —

--S 87 of 200
minv:= inverse(m)
--R
--R
--R         +     a            1   +
--R         |  ------     - ------ |
--R         |   2            2     |
--R         |  a  - 1       a  - 1 |
--R   (87)  |                      |
--R         |      1          a    |
--R         |- ---------  ---------|
--R         |    2          2      |
--R         +  (a  - 1)b  (a  - 1)b+
--R                       Type: Union(Matrix(Fraction(Polynomial(Integer))),...)
--E 87
--S 88 of 200
m * minv
--R
--R
--R         +1  0+
--R   (88)  |    |
--R         +0  1+
--R                                  Type: Matrix(Fraction(Polynomial(Integer)))
--E 88

———-

Define a Vandermonde matrix (useful for doing polynomial interpolations) — * —

--S 89 of 200
matrix([[1,    1,    1,    1   ], _
        [w,    x,    y,    z   ], _
        [w**2, x**2, y**2, z**2], _
        [w**3, x**3, y**3, z**3]])
--R
--R
--R         +1   1   1   1 +

--R         |              |
--R         |w   x   y   z |
--R         |              |
--R   (89)  | 2   2   2   2|
--R         |w   x   y   z |
--R         |              |
--R         | 3   3   3   3|
--R         +w   x   y   z +
--R                                            Type: Matrix(Polynomial(Integer))
--E 89
--S 90 of 200
determinant(%)
--R
--R
--R   (90)
--R              2       2    2        2    2   3
--R     ((x - w)y  + (- x  + w )y + w x  - w x)z
--R   +
--R                3     3    3        3    3   2
--R     ((- x + w)y  + (x  - w )y - w x  + w x)z
--R   +
--R        2    2  3       3    3  2    2 3    3 2           2    2   3
--R     ((x  - w )y  + (- x  + w )y  + w x  - w x )z + (- w x  + w x)y
--R   +
--R         3    3   2       2 3    3 2
--R     (w x  - w x)y  + (- w x  + w x )y
--R                                                    Type: Polynomial(Integer)
--E 90

———-

The following formula implies a general result — * —

--S 91 of 200
factor(%)
--R
--R
--R   (91)  (x - w)(y - x)(y - w)(z - y)(z - x)(z - w)
--R                                          Type: Factored(Polynomial(Integer))
--E 91

———-

Compute the eigenvalues of a matrix from its characteristic polynomial — * —

--S 92 of 200
m:= matrix([[ 5, -3, -7], _
            [-2,  1,  2], _

            [ 2, -3, -4]])
--R
--R
--R         + 5   - 3  - 7+
--R         |             |
--R   (92)  |- 2   1    2 |
--R         |             |
--R         + 2   - 3  - 4+
--R                                                        Type: Matrix(Integer)
--E 92
--S 93 of 200
characteristicPolynomial(m, lambda)
--R
--R
--R                 3          2
--R   (93)  - lambda  + 2lambda  + 5lambda - 6
--R                                                    Type: Polynomial(Integer)
--E 93
--S 94 of 200
solve(% = 0, lambda)
--R
--R
--R   (94)  [lambda= 3,lambda= 1,lambda= - 2]
--R                          Type: List(Equation(Fraction(Polynomial(Integer))))
--E 94
--S 95 of 200
m:= 'm;
--R
--R
--R                                                            Type: Variable(m)
--E 95

———-

9 Sums and Products

9.1 Sums: finite and infinite

— * —

--S 96 of 200
summation(k**3, k = 1..n)
--R
--R

--R          n
--R         --+    3
--R   (96)  >     k
--R         --+
--R         k= 1
--R                                                    Type: Expression(Integer)
--E 96
--S 97 of 200
sum(k**3, k = 1..n)
--R
--R
--R          4     3    2
--R         n  + 2n  + n
--R   (97)  -------------
--R               4
--R                                          Type: Fraction(Polynomial(Integer))
--E 97
--S 98 of 200
limit(sum(1/k**2 + 1/k**3, k = 1..n), n = %plusInfinity)
--R
--R
--R   (98)  "failed"
--R                                                    Type: Union("failed",...)
--E 98

———-

9.2 Products

— * —

--S 99 of 200
product(k, k = 1..n)
--R
--R
--R           n
--R         ++-++
--R   (99)   | |   k
--R          | |
--R         k= 1
--R                                                    Type: Expression(Integer)
--E 99

———-

10 Calculus

10.1 Limits — start with a famous example

— * —

--S 100 of 200
limit((1 + 1/n)**n, n = %plusInfinity)
--R
--R
--R   (100)  %e
--R                      Type: Union(OrderedCompletion(Expression(Integer)),...)
--E 100
--S 101 of 200
limit((1 - cos(x))/x**2, x = 0)
--R
--R
--R          1
--R   (101)  -
--R          2
--R                      Type: Union(OrderedCompletion(Expression(Integer)),...)
--E 101

———-

Apply the chain rule—this is important for PDEs and many other applications — * —

--S 102 of 200
y:= operator('y);
--R
--R
--R                                                          Type: BasicOperator
--E 102
--S 103 of 200
x:= operator('x);
--R
--R
--R                                                          Type: BasicOperator
--E 103
--S 104 of 200
D(y(x(t)), t, 2)
--R
--R
--R           ,   2 ,,          ,       ,,
--R   (104)  x (t) y  (x(t)) + y (x(t))x  (t)
--R

--R                                                    Type: Expression(Integer)
--E 104
)clear properties x y

———-

10.2 Indefinite Integrals

— * —

--S 105 of 200
1/(x**3 + 2)
--R
--R
--R             1
--R   (105)  ------
--R           3
--R          x  + 2
--R                                          Type: Fraction(Polynomial(Integer))
--E 105

———-

This would be very difficult to do by hand — * —

--S 106 of 200
integrate(%, x)
--R
--R
--R   (106)
--R          +-+     2 3+-+2    3+-+          +-+     3+-+
--R       - \|3 log(x  \|4  - 2x\|4  + 4) + 2\|3 log(x\|4  + 2)
--R     +
--R               +-+3+-+    +-+
--R             x\|3 \|4  - \|3
--R       6atan(----------------)
--R                     3
--R  /
--R       +-+3+-+
--R     6\|3 \|4
--R                                         Type: Union(Expression(Integer),...)
--E 106
--S 107 of 200
D(%, x)
--R

--R
--R             1
--R   (107)  ------
--R           3
--R          x  + 2
--R                                                    Type: Expression(Integer)
--E 107

———-

This example involves several symbolic parameters — * —

--S 108 of 200
integrate(1/(a + b*cos(x)), x)
--R
--R
--R   (108)
--R                         +-------+
--R                         | 2    2        2    2
--R        (- a cos(x) - b)\|b  - a   + (- b  + a )sin(x)
--R    log(----------------------------------------------)
--R                         b cos(x) + a
--R   [---------------------------------------------------,
--R                          +-------+
--R                          | 2    2
--R                         \|b  - a
--R                   +---------+
--R                   |   2    2
--R            sin(x)\|- b  + a
--R    2atan(---------------------)
--R          (b + a)cos(x) + b + a
--R    ----------------------------]
--R             +---------+
--R             |   2    2
--R            \|- b  + a
--R                                   Type: Union(List(Expression(Integer)),...)
--E 108
--S 109 of 200
map(simplify, map(f +-> D(f, x), %))
--R
--R
--R                 1            1
--R   (109)  [------------,------------]
--R           b cos(x) + a b cos(x) + a
--R                                              Type: List(Expression(Integer))
--E 109

———- Calculus on a non-smooth (but well defined) function

— * —

--S 110 of 200
D(abs(x), x)
--R
--R
--R          abs(x)
--R   (110)  ------
--R             x
--R                                                    Type: Expression(Integer)
--E 110
--S 111 of 200
integrate(abs(x), x)
--R
--R
--R             x
--R           ++
--I   (111)   |   abs(%J)d%J
--R          ++
--R                                         Type: Union(Expression(Integer),...)
--E 111

———-

Calculus on a piecewise defined function — * —

--S 112 of 200
a(x) == if x < 0 then -x else x
--R
--R                                                                   Type: Void
--E 112
--S 113 of 200
D(a(x), x)
--R
--R   Compiling function a with type Variable(x) -> Polynomial(Integer)
--R
--R   (113)  1
--R                                                    Type: Polynomial(Integer)
--E 113
--S 114 of 200
integrate(a(x), x)
--R
--R
--R          1  2
--R   (114)  - x
--R          2

--R                                          Type: Polynomial(Fraction(Integer))
--E 114
)clear properties a

———-

The following two integrals should be equivalent. The correct solution is [(1 + x)^{(}3/2) + (1 − x)^{(}3/2)]/3

— * —

--S 115 of 200
integrate(x/(sqrt(1 + x) + sqrt(1 - x)), x)
--R
--R
--R                  +-----+             +-------+
--R          (x + 1)\|x + 1  + (- x + 1)\|- x + 1
--R   (115)  -------------------------------------
--R                            3
--R                                         Type: Union(Expression(Integer),...)
--E 115
--S 116 of 200
integrate((sqrt(1 + x) - sqrt(1 - x))/2, x)
--R
--R
--R                  +-----+             +-------+
--R          (x + 1)\|x + 1  + (- x + 1)\|- x + 1
--R   (116)  -------------------------------------
--R                            3
--R                                         Type: Union(Expression(Integer),...)
--E 116

———-

10.3 Definite Integrals

The following two functions have a pole at zero — * —

--S 117 of 200
integrate(1/x, x = -1..1)
--R
--R
--RDaly Bug
--R   >> Error detected within library code:
--R   integrate: pole in path of integration
--R
--R   Continuing to read the file...

--R
--E 117
--S 118 of 200
integrate(1/x**2, x = -1..1)
--R
--R
--RDaly Bug
--R   >> Error detected within library code:
--R   integrate: pole in path of integration
--R
--R   Continuing to read the file...
--R
--E 118

———-

Different branches of the square root need to be chosen in the intervals [0, 1] and [1, 2]. The correct results are 4/3, [4 − \sqrt{(8)}]/3, [8 − \sqrt{(8)}]/3, respectively.

— * —

--S 119 of 200
integrate(sqrt(x + 1/x - 2), x = 0..1)
--R
--R
--R   (117)  potentialPole
--R                                         Type: Union(pole: potentialPole,...)
--E 119
--S 120 of 200
integrate(sqrt(x + 1/x - 2), x = 0..1, "noPole")
--R
--R
--R            4
--R   (118)  - -
--R            3
--R                  Type: Union(f1: OrderedCompletion(Expression(Integer)),...)
--E 120
--S 121 of 200
integrate(sqrt(x + 1/x - 2), x = 1..2)
--R
--R
--R   (119)  potentialPole
--R                                         Type: Union(pole: potentialPole,...)
--E 121
--S 122 of 200
integrate(sqrt(x + 1/x - 2), x = 1..2, "noPole")
--R

--R
--R              +-+
--R          - 2\|2  + 4
--R   (120)  -----------
--R               3
--R                  Type: Union(f1: OrderedCompletion(Expression(Integer)),...)
--E 122
--S 123 of 200
integrate(sqrt(x + 1/x - 2), x = 0..2)
--R
--R
--R   (121)  potentialPole
--R                                         Type: Union(pole: potentialPole,...)
--E 123
--S 124 of 200
integrate(sqrt(x + 1/x - 2), x = 0..2, "noPole")
--R
--R
--R              +-+
--R            2\|2
--R   (122)  - -----
--R              3
--R                  Type: Union(f1: OrderedCompletion(Expression(Integer)),...)
--E 124

———-

10.4 Contour integrals

— * —

--S 125 of 200
integrate(cos(x)/(x**2 + a**2), x = %minusInfinity..%plusInfinity)
--R
--R
--R   (123)  potentialPole
--R                                         Type: Union(pole: potentialPole,...)
--E 125
--S 126 of 200
integrate(cos(x)/(x**2 + a**2), x = %minusInfinity..%plusInfinity, "noPole")
--R
--R
--R   (124)  "failed"
--R                                                Type: Union(fail: failed,...)
--E 126

———-

10.5 Integrand with a branch point

— * —

--S 127 of 200
integrate(t**(a - 1)/(1 + t), t = 0..%plusInfinity)
--R
--R
--R   (125)  potentialPole
--R                                         Type: Union(pole: potentialPole,...)
--E 127
--S 128 of 200
integrate(t**(a - 1)/(1 + t), t = 0..%plusInfinity, "noPole")
--R
--R
--R   (126)  "failed"
--R                                                Type: Union(fail: failed,...)
--E 128

———-

Multiple integrals: volume of a tetrahedron — * —

--S 129 of 200
integrate(integrate(integrate(1, z = 0..c*(1 - x/a - y/b)), _
                    y = 0..b*(1 - x/a)), _
          x = 0..a)
--R
--R
--R          a b c
--R   (127)  -----
--R            6
--R                  Type: Union(f1: OrderedCompletion(Expression(Integer)),...)
--E 129

———-

10.6 Series

Taylor series—this first example comes from special relativity — * —

--S 130 of 200
1/sqrt(1 - (v/c)**2)
--R
--R
--R                1
--R   (128)  ------------
--R           +---------+
--R           |   2    2
--R           |- v  + c
--R           |---------
--R           |     2
--R          \|    c
--R                                                    Type: Expression(Integer)
--E 130
--S 131 of 200
series(%, v = 0)
--R
--R
--R               1   2    3   4     5   6      8
--R   (129)  1 + --- v  + --- v  + ---- v  + O(v )
--R                2        4         6
--R              2c       8c       16c
--R                       Type: UnivariatePuiseuxSeries(Expression(Integer),v,0)
--E 131
--S 132 of 200
1/%**2
--R
--R
--R               1  2      8
--R   (130)  1 - -- v  + O(v )
--R               2
--R              c
--R                       Type: UnivariatePuiseuxSeries(Expression(Integer),v,0)
--E 132
--S 133 of 200
tsin:= series(sin(x), x = 0)
--R
--R
--R              1  3    1   5     1   7      9
--R   (131)  x - - x  + --- x  - ---- x  + O(x )
--R              6      120      5040
--R                       Type: UnivariatePuiseuxSeries(Expression(Integer),x,0)
--E 133
--S 134 of 200
tcos:= series(cos(x), x = 0)
--R

--R
--R              1  2    1  4    1   6      8
--R   (132)  1 - - x  + -- x  - --- x  + O(x )
--R              2      24      720
--R                       Type: UnivariatePuiseuxSeries(Expression(Integer),x,0)
--E 134

———-

Note that additional terms will be computed as needed — * —

--S 135 of 200
tsin/tcos
--R
--R
--R              1  3    2  5    17  7      9
--R   (133)  x + - x  + -- x  + --- x  + O(x )
--R              3      15      315
--R                       Type: UnivariatePuiseuxSeries(Expression(Integer),x,0)
--E 135
--S 136 of 200
series(tan(x), x = 0)
--R
--R
--R              1  3    2  5    17  7      9
--R   (134)  x + - x  + -- x  + --- x  + O(x )
--R              3      15      315
--R                       Type: UnivariatePuiseuxSeries(Expression(Integer),x,0)
--E 136

———-

Look at the Taylor series around x = 1 — * —

)set streams calculate 1
--S 137 of 200
log(x)**a*exp(-b*x)
--R
--R
--R            - b x      a
--R   (135)  %e     log(x)
--R                                                    Type: Expression(Integer)
--E 137
--S 138 of 200
series(%, x = 1)

--R
--R
--RDaly Bug
--R   >> Error detected within library code:
--R   No series expansion
--R
--R   Continuing to read the file...
--R
--E 138
)set streams calculate 7

———-

Compare the Taylor series of two different formulations of a function — * —

--S 139 of 200
taylor(log(sinh(z)) + log(cosh(z + w)), z = 0)
--R
--R
--RDaly Bug
--R   >> Error detected within library code:
--R   No Taylor expansion: logarithmic singularity
--R
--R   Continuing to read the file...
--R
--E 139
--S 140 of 200
% - taylor(log(sinh(z) * cosh(z + w)), z = 0)
--R
--R
--RDaly Bug
--R   >> Error detected within library code:
--R   No Taylor expansion: logarithmic singularity
--R
--R   Continuing to read the file...
--R
--E 140

———-

10.7 Power series

Compute the general formula — * —

--S 141 of 200

log(sin(x)/x)
--R
--R
--R              sin(x)
--R   (136)  log(------)
--R                 x
--R                                                    Type: Expression(Integer)
--E 141
--S 142 of 200
series(%, x = 0)
--R
--R
--R            1  2    1   4     1   6     1    8      10
--R   (137)  - - x  - --- x  - ---- x  - ----- x  + O(x  )
--R            6      180      2835      37800
--R                       Type: UnivariatePuiseuxSeries(Expression(Integer),x,0)
--E 142
--S 143 of 200
exp(-x)*sin(x)
--R
--R
--R            - x
--R   (138)  %e   sin(x)
--R                                                    Type: Expression(Integer)
--E 143
--S 144 of 200
series(%, x = 0)
--R
--R
--R               2   1  3    1  5    1  6    1   7      9
--R   (139)  x - x  + - x  - -- x  + -- x  - --- x  + O(x )
--R                   3      30      90      630
--R                       Type: UnivariatePuiseuxSeries(Expression(Integer),x,0)
--E 144

———-

Derive an explicit Taylor series solution of y as a function of x from the following implicit relation

— * —

--S 145 of 200
y:= operator('y);
--R
--R
--R                                                          Type: BasicOperator
--E 145

--S 146 of 200
x = sin(y(x)) + cos(y(x))
--R
--R
--R   (141)  x= sin(y(x)) + cos(y(x))
--R                                          Type: Equation(Expression(Integer))
--E 146
--S 147 of 200
seriesSolve(%, y, x = 1, 0)
--R
--R
--RDaly Bug
--R   >> Error detected within library code:
--R   Improper initial value
--R
--R   Continuing to read the file...
--R
--E 147
)clear properties y

———-

10.8 Pade (rational function) approximation

— * —

--S 148 of 200
pade(1, 1, taylor(exp(-x), x = 0))
--R
--R
--R          - x + 2
--R   (142)  -------
--R           x + 2
--R       Type: Union(Fraction(UnivariatePolynomial(x,Expression(Integer))),...)
--E 148

———-

11 Transforms

11.1 Laplace and inverse Laplace transforms

— * —

--S 149 of 200
laplace(cos((w - 1)*t), t, s)
--R
--R
--R                  s
--R   (143)  ----------------
--R           2         2
--R          w  - 2w + s  + 1
--R                                                    Type: Expression(Integer)
--E 149
--S 150 of 200
inverseLaplace(%, s, t)
--R
--R
--R                +-----------+
--R                | 2
--R   (144)  cos(t\|w  - 2w + 1 )
--R                                         Type: Union(Expression(Integer),...)
--E 150

———-

12 Difference and Differential Equations

12.1 Second order linear recurrence equation

— * —

--S 151 of 200
r:= operator('r);
--R
--R
--R                                                          Type: BasicOperator
--E 151
--S 152 of 200
r(n + 2) - 2 * r(n + 1) + r(n) = 2
--R
--R
--R   (146)  r(n + 2) - 2r(n + 1) + r(n)= 2
--R                                          Type: Equation(Expression(Integer))
--E 152
--S 153 of 200
[%, r(0) = 1, r(1) = m]
--R

--R
--R   (147)  [r(n + 2) - 2r(n + 1) + r(n)= 2,r(0)= 1,r(1)= m]
--R                                    Type: List(Equation(Expression(Integer)))
--E 153
)clear properties r

———-

12.2 Second order ODE with initial conditions

solve first using Laplace transforms — * —

--S 154 of 200
f:= operator('f);
--R
--R
--R                                                          Type: BasicOperator
--E 154
--S 155 of 200
ode:= D(f(t), t, 2) + 4*f(t) = sin(2*t)
--R
--R
--R           ,,
--R   (149)  f  (t) + 4f(t)= sin(2t)
--R
--R                                          Type: Equation(Expression(Integer))
--E 155
--S 156 of 200
map(e +-> laplace(e, t, s), %)
--R
--R
--R            2                          ,                2
--R   (150)  (s  + 4)laplace(f(t),t,s) - f (0) - f(0)s= ------
--R                                                      2
--R                                                     s  + 4
--R                                          Type: Equation(Expression(Integer))
--E 156

———-

Now, solve the ODE directly — * —

--S 157 of 200
solve(ode, f, t = 0, [0, 0])

--R
--R
--R          sin(2t) - 2t cos(2t)
--R   (151)  --------------------
--R                    8
--R                                         Type: Union(Expression(Integer),...)
--E 157

———-

12.3 First order linear ODE

— * —

--S 158 of 200
y:= operator('y);
--R
--R
--R                                                          Type: BasicOperator
--E 158
--S 159 of 200
x**2 * D(y(x), x) + 3*x*y(x) = sin(x)/x
--R
--R
--R           2 ,               sin(x)
--R   (153)  x y (x) + 3x y(x)= ------
--R                                x
--R                                          Type: Equation(Expression(Integer))
--E 159
--S 160 of 200
solve(%, y, x)
--R
--R
--R                         cos(x)          1
--R   (154)  [particular= - ------,basis= [--]]
--R                            3            3
--R                           x            x
--RType: Union(Record(particular: Expression(Integer),basis: List(Expression(Integer))),...)
--E 160

———-

12.4 Nonlinear ODE

— * —

--S 161 of 200
D(y(x), x, 2) + y(x)*D(y(x), x)**3 = 0
--R
--R
--R           ,,           ,   3
--R   (155)  y  (x) + y(x)y (x) = 0
--R
--R                                          Type: Equation(Expression(Integer))
--E 161
--S 162 of 200
solve(%, y, x)
--R
--R
--RDaly Bug
--R   >> Error detected within library code:
--R   getlincoeff: not an appropriate ordinary differential equation
--R
--R   Continuing to read the file...
--R
--E 162

———-

A simple parametric ODE — * —

--S 163 of 200
D(y(x, a), x) = a*y(x, a)
--R
--R
--R   (156)  y  (x,a)= a y(x,a)
--R           ,1
--R                                          Type: Equation(Expression(Integer))
--E 163
--S 164 of 200
solve(%, y, x);
--R
--R
--RDaly Bug
--R   >> Error detected within library code:
--R   parseODE: equation has order 0
--R
--R   Continuing to read the file...
--R
--E 164

———-

12.5 ODE with boundary conditions

This problem has nontrivial solutions y(x) = A sin([π/2 + nπ]x) for n an arbitrary integer. — * —

--S 165 of 200
solve(D(y(x), x, 2) + k**2*y(x) = 0, y, x)
--R
--R
--R   (157)  [particular= 0,basis= [cos(k x),sin(k x)]]
--RType: Union(Record(particular: Expression(Integer),basis: List(Expression(Integer))),...)
--E 165
-- bc(%, x = 0, y = 0, x = 1, D(y(x), x) = 0)

———-

12.6 System of two linear, constant coefficient ODEs

— * —

--S 166 of 200
x:= operator('x);
--R
--R
--R                                                          Type: BasicOperator
--E 166
--S 167 of 200
system:= [D(x(t), t) = x(t) - y(t), D(y(t), t) = x(t) + y(t)]
--R
--R
--R            ,                    ,
--R   (159)  [x (t)= - y(t) + x(t),y (t)= y(t) + x(t)]
--R
--R                                    Type: List(Equation(Expression(Integer)))
--E 167

———-

Check the answer. Triangular system of two ODEs — * —

--S 168 of 200
system:= [D(x(t), t) = x(t) * (1 + cos(t)/(2 + sin(t))), _
          D(y(t), t) = x(t) - y(t)]
--R
--R
--R            ,     x(t)sin(t) + x(t)cos(t) + 2x(t)  ,

--R   (160)  [x (t)= -------------------------------,y (t)= - y(t) + x(t)]
--R                             sin(t) + 2
--R                                    Type: List(Equation(Expression(Integer)))
--E 168

———-

Try solving this system one equation at a time — * —

--S 169 of 200
s:=solve(system.1, x, t)
--R
--R
--R                                   t            t
--R   (161)  [particular= 0,basis= [%e sin(t) + 2%e ]]
--RType: Union(Record(particular: Expression(Integer),basis: List(Expression(Integer))),...)
--E 169
--S 170 of 200
eq1 := x(t) = C1 * s.basis.1
--R
--R
--R                     t               t
--R   (162)  x(t)= C1 %e sin(t) + 2C1 %e
--R                                          Type: Equation(Expression(Integer))
--E 170
--S 171 of 200
s1:=solve(map(e +-> subst(e, eq1), system.2), y, t)
--R
--R
--R   (163)
--R                      - t   t 2                              - t   t 2
--R                2C1 %e   (%e ) sin(t) + (- C1 cos(t) + 5C1)%e   (%e )
--R   [particular= ------------------------------------------------------,
--R                                           5
--R              - t
--R    basis= [%e   ]]
--RType: Union(Record(particular: Expression(Integer),basis: List(Expression(Integer))),...)
--E 171
--S 172 of 200
eq2 := y(t) = simplify(s1.particular) + C2 * s1.basis.1
--R
--R
--R                      t                              t         - t
--R                2C1 %e sin(t) + (- C1 cos(t) + 5C1)%e  + 5C2 %e
--R   (164)  y(t)= --------------------------------------------------
--R                                         5

--R                                          Type: Equation(Expression(Integer))
--E 172
--S 173 of 200
map(e +-> rightZero eval(e, [eq1, D(eq1,t), eq2 , D(eq2,t)]), system)
--R
--R
--R   (165)  [0= 0,0= 0]
--R                                    Type: List(Equation(Expression(Integer)))
--E 173
)clear properties x y

———-

13 Operators

13.1 Linear differential operator

— * —

--S 174 of 200
DD:= operator("D") :: Operator(Expression Integer)
--R
--R
--R   (166)  D
--R                                          Type: Operator(Expression(Integer))
--E 174
--S 175 of 200
evaluate(DD, e +-> D(e, x))$Operator(Expression Integer)
--R
--R
--R   (167)  D
--R                                          Type: Operator(Expression(Integer))
--E 175
--S 176 of 200
L:= (DD - 1) * (DD + 2)
--R
--R
--R                 2
--R   (168)  D 2 + D  - D - 2
--R                                          Type: Operator(Expression(Integer))
--E 176
--S 177 of 200
g:= operator('g)

--R
--R
--R   (169)  g
--R                                                          Type: BasicOperator
--E 177
--S 178 of 200
L(f(x))
--R
--R
--R           ,,       ,
--R   (170)  f  (x) + f (x) - 2f(x)
--R
--R                                                    Type: Expression(Integer)
--E 178
--S 179 of 200
subst(L(subst(g(y), y = x)), x = y)
--R
--R
--R           ,,       ,
--R   (171)  g  (y) + g (y) - 2g(y)
--R
--R                                                    Type: Expression(Integer)
--E 179
--S 180 of 200
subst(L(subst(A * sin(z**2), z = x)), x = z)
--R
--R
--R                 2           2                    2
--R   (172)  (- 4A z  - 2A)sin(z ) + (2A z + 2A)cos(z )
--R                                                    Type: Expression(Integer)
--E 180

———-

13.2 Truncated Taylor series operator

— * —

--S 181 of 200
T:= (f, xx, a) +-> subst((DD**0)(f(x)), x = a)/factorial(0) * (xx - a)**0 + _
                   subst((DD**1)(f(x)), x = a)/factorial(1) * (xx - a)**1 + _
                   subst((DD**2)(f(x)), x = a)/factorial(2) * (xx - a)**2
--R
--R
--R   (173)

--R     (f,xx,a)
--R   +->
--R               0                                 1
--R       subst(DD (f(x)),x= a)         0   subst(DD (f(x)),x= a)         1
--R       --------------------- (xx - a)  + --------------------- (xx - a)
--R            factorial(0)                      factorial(1)
--R     +
--R               2
--R       subst(DD (f(x)),x= a)         2
--R       --------------------- (xx - a)
--R            factorial(2)
--R                                                      Type: AnonymousFunction
--E 181
--S 182 of 200
T(f, x, a)
--R
--R
--R            2           2  ,,                ,
--R          (x  - 2a x + a )f  (a) + (2x - 2a)f (a) + 2f(a)
--R
--R   (174)  -----------------------------------------------
--R                                 2
--R                                                    Type: Expression(Integer)
--E 182
--S 183 of 200
T(g, y, b)
--R
--R
--R            2           2  ,,                ,
--R          (y  - 2b y + b )g  (b) + (2y - 2b)g (b) + 2g(b)
--R
--R   (175)  -----------------------------------------------
--R                                 2
--R                                                    Type: Expression(Integer)
--E 183
--S 184 of 200
Sin:= operator("sin") :: Operator(Expression Integer)
--R
--R
--R   (176)  sin
--R                                          Type: Operator(Expression(Integer))
--E 184
--S 185 of 200
evaluate(Sin, x +-> sin(x))$Operator(Expression Integer)
--R
--R

--R   (177)  sin
--R                                          Type: Operator(Expression(Integer))
--E 185
--S 186 of 200
T(Sin, z, c)
--R
--R
--R              2           2
--R          (- z  + 2c z - c  + 2)sin(c) + (2z - 2c)cos(c)
--R   (178)  ----------------------------------------------
--R                                 2
--R                                                    Type: Expression(Integer)
--E 186

———-

14 Programming

Write a simple program to compute Legendre polynomials — * —

--S 187 of 200
p(n, x) == 1/(2**n*factorial(n)) * D((x**2 - 1)**n, x, n)
--R
--R                                                                   Type: Void
--E 187
--S 188 of 200
for i in 0..4 _
  repeat {  output(""); _
            output(concat(["p(", string(i), ", x) = "])); _
            output(p(i, x))}
--R
--R   Compiling function p with type (NonNegativeInteger,Variable(x)) ->
--R      Polynomial(Fraction(Integer))
--R
--R   p(0, x) =
--R   1
--R
--R   p(1, x) =
--R   x
--R
--R   p(2, x) =
--R   3  2   1
--R   - x  - -
--R   2      2
--R

--R   p(3, x) =
--R   5  3   3
--R   - x  - - x
--R   2      2
--R
--R   p(4, x) =
--R   35  4   15  2   3
--R   -- x  - -- x  + -
--R    8       4      8
--R                                                                   Type: Void
--E 188
--S 189 of 200
eval(p(4, x), x = 1)
--R
--R   Compiling function p with type (PositiveInteger,Variable(x)) ->
--R      Polynomial(Fraction(Integer))
--R
--R   (181)  1
--R                                          Type: Polynomial(Fraction(Integer))
--E 189

———-

Now, perform the same computation using a recursive definition — * —

--S 190 of 200
pp(0, x) == 1
--R
--R                                                                   Type: Void
--E 190
--S 191 of 200
pp(1, x) == x
--R
--R                                                                   Type: Void
--E 191
--S 192 of 200
pp(n, x) == ((2*n - 1)*x*pp(n - 1, x) - (n - 1)*pp(n - 2, x))/n
--R
--R                                                                   Type: Void
--E 192
--S 193 of 200
for i in 0..4 repeat { output(""); _
                       output(concat(["pp(", string(i), ", x) = "])); _
                       output(pp(i, x))}
--R

--R   Compiling function pp with type (Integer,Variable(x)) -> Polynomial(
--R      Fraction(Integer))
--R
--R   pp(0, x) =
--R   1
--R
--R   pp(1, x) =
--R   x
--R
--R   pp(2, x) =
--R   3  2   1
--R   - x  - -
--R   2      2
--R
--R   pp(3, x) =
--R   5  3   3
--R   - x  - - x
--R   2      2
--R
--R   pp(4, x) =
--R   35  4   15  2   3
--R   -- x  - -- x  + -
--R    8       4      8
--R                                                                   Type: Void
--E 193
)clear properties p pp

———-

15 Translation

15.1 Horner’s rule

This is important for numerical algorithms — * —

--S 194 of 200
a:= operator('a)
--R
--R
--R   (186)  a
--R                                                          Type: BasicOperator
--E 194
--S 195 of 200
sum(a(i)*x**i, i = 1..5)
--R

--R
--R               5        4        3        2
--R   (187)  a(5)x  + a(4)x  + a(3)x  + a(2)x  + a(1)x
--R                                                    Type: Expression(Integer)
--E 195
--S 196 of 200
p:= factor(%)
--R
--R
--R               5        4        3        2
--R   (188)  a(5)x  + a(4)x  + a(3)x  + a(2)x  + a(1)x
--R                                          Type: Factored(Expression(Integer))
--E 196

———-

Convert the result into FORTRAN syntax — * —

)set fortran ints2floats off
--S 197 of 200
outputAsFortran('p = p)
--R
--R      p=a(5)*x**5+a(4)*x**4+a(3)*x**3+a(2)*x*x+a(1)*x
--R                                                                   Type: Void
--E 197

———-

16 Boolean Logic

16.1 Simplify logical expressions

— * —

--S 198 of 200
true and false
--R
--R
--R   (190)  false
--R                                                                Type: Boolean
--E 198
--S 199 of 200
x or (not x)

--R
--R
--RDaly Bug
--R   Argument number 1 to "or" must be a Boolean.
--E 199
--S 200 of 200
x or y or (x and y)
--R
--R
--RDaly Bug
--R   Argument number 1 to "or" must be a Boolean.
--E 200
)spool
)lisp (bye)

———-

References^{[1] nothing}

67