### Programming Tutorial Exercise 10

Taking the derivative of a term of the form x^n will produce a term like @c{\$n x^{n-1}\$} n x^(n-1). Taking the derivative of a constant produces zero. From this it is easy to see that the nth derivative of a polynomial, evaluated at x = 0, will equal the coefficient on the x^n term times n!.

(Because this definition is long, it will be repeated in concise form below. You can use M-# m to load it from there. While you are entering a Z ` Z ' body in a macro, Calc simply collects keystrokes without executing them. In the following diagrams we'll pretend Calc actually executed the keystrokes as you typed them, just for purposes of illustration.)

```2:  5 x^4 + (x + 1)^2          3:  5 x^4 + (x + 1)^2
1:  6                          2:  0
.                          1:  6
.

' 5 x^4 + (x+1)^2 RET 6        C-x ( Z `  [ ] t 1  0 TAB
```

Variable 1 will accumulate the vector of coefficients.

```2:  0              3:  0                  2:  5 x^4 + ...
1:  5 x^4 + ...    2:  5 x^4 + ...        1:  1
.              1:  1                      .
.

Z ( TAB         RET 0 s l x RET            M-TAB ! /  s | 1
```

Note that s | 1 appends the top-of-stack value to the vector in a variable; it is completely analogous to s + 1. We could have written instead, r 1 TAB | t 1.

```1:  20 x^3 + 2 x + 2      1:  0         1:  [1, 2, 1, 0, 5, 0, 0]
.                         .             .

a d x RET                 1 Z )         DEL r 1  Z ' C-x )
```

To convert back, a simple method is just to map the coefficients against a table of powers of x.

```2:  [1, 2, 1, 0, 5, 0, 0]    2:  [1, 2, 1, 0, 5, 0, 0]
1:  6                        1:  [0, 1, 2, 3, 4, 5, 6]
.                            .

6 RET                        1 + 0 RET 1 C-u v x

```

```2:  [1, 2, 1, 0, 5, 0, 0]    2:  1 + 2 x + x^2 + 5 x^4
1:  [1, x, x^2, x^3, ... ]       .
.

' x RET TAB V M ^            *
```

Once again, here are the whole polynomial to/from vector programs:

```C-x ( Z `  [ ] t 1  0 TAB
Z (  TAB RET 0 s l x RET M-TAB ! /  s | 1
a d x RET
1 Z ) r 1
Z '
C-x )

C-x (  1 + 0 RET 1 C-u v x ' x RET TAB V M ^ *  C-x )
```