# The Science of Programming/As Time Goes By

In CME, chapter 8, SPT discusses how Newton used a dot over
a variable to indicate differentiation while Liebniz used
the notation in this book: .
The advantage to Liebniz's notation is that it explicitly
states which independent variable is to be considered when
differentiation occurs (in case there is more than one independent
variable).^{[1]}

For example, if

```
```

then

```
```

On the other hand, differentiating with respect to *t* instead of
*x* gives:

```
```

since is considered a constant with respect to the independent
variable *t*. That is to say, no matter how much you change the value
of *t*, the value of doesn't change (since you are not changing *x*, just *t*).

We have been assuming, up until now, that the independent variable and the variable with respect to which we take derivatives are one and the same.

Let's investigate what our code might look like if we did not make that assumption.

## An unassuming differentiation system

[edit | edit source]Based upon our visualization for the term constructor, we have
been assuming the independent variable is *x*, because we
end up with visualization like:

3x^2

If we don't hard-wire the independent variable, we will need
to pass it in. Here is a skeleton of a version of *term* where
the name of the independent variable is to be passed in:

function term(a,iv,n) { function value(x) { ... } function toString() { ... } function diff(wrtv) { ... } this; }

The first major difference between the new version of *term*
and the old version is that the new *term* has three formal parameters,
instead of two. The second formal parameter, *iv*, which stands
for the **i**ndependent **v**ariable, represents the
independent variable. We presume it will be
be bound to symbols such as *x*, *t*, and the like.
We see this in the basic *toString* method (the one with no simplifications)
which changes from:

function toString() { "" + a + "x^" + n; }

to:

function toString() { "" + a + iv + "^" + n; }

Note that *x* in the original version was part of a string
and thus fixed. In the second, *iv* is a variable that
is (or rather will be) bound to a symbol. Looking at a
visualization will help us sort things out:

var t = term(5,:w,3); sway> t . toString(); STRING: 5w^3

The second major change is that the differentiation method, *diff*,
now takes an argument, *wrtv*, which stands for the
**w**ith-**r**espect-**t**o **v**ariable. This is the
variable with respect to which
differentiation should proceed. If the independent variable
and the with-respect-to variable
are the same, differentiation proceeds as before. If not,
a constant zero is generated:

function diff(wrtv) { if (wrtv == iv) { if(n == 0,term(0,iv,0),term(a * n,iv,n - 1)); } else { constant(0); } }

Now let's test:

var a = t . diff(:w); //iv and wrtv match var b = t . diff(:x); //iv and wrtv do not match sway> t . toString(); STRING: 5w^3 sway> a . toString(); STRING: 15w^2 sway> b . toString(); STRING: 0

This output assumes the *toString* method of *term* performs
the simplifications discussed in the previous chapter.

## What about the *value* method?

[edit | edit source]We do not need to change the *value* method for terms. This is because
a *value* for the independent variable is used, rather than its *name*.
In other words, the *value* method performs a numeric calculation,
while
the *diff* method performs a symbolic calculation.
Thus, *value* needs
a number and *diff* needs a name.

Since both *toString* and *diff* use the name of a term variable
rather than a value, they both needed modification because names
are not longer hard-wired.

## Questions

[edit | edit source]**1**.
What happens if we rename the formal parameter *iv* to be *x* and replace every occurrence of *iv* with *x*. Explain.

**2**.
Redefine the simplifying *term* constructor so that it does not assume the independent variable to be *x*.

**3**.
Redefine the simplifying *sum* constructor so that it does not assume the independent variable to be *x*.

**4**.
Complete the unassuming differentiation system (*minus*, *times*, and *div*).

**5**.
Using sway do 2 on p. 92.

**6**.
Using sway do 4 and 5 on p. 92.

**7**.
We are doing a game to throw a beanbag into a trash can and we want
to model the physics correctly. The horizontal displacement is
and the vertical displacement is
.
What is change of both *x* and *z* with *t*?
Let ,
,
, and
.
Plot *x* and *z*,
and the velocity in *x* and *z* directions versus time from 0 to 10.

## Footnotes

[edit | edit source]- ↑
As SPT points out, the dot notation is used with the assumtion that
differentiation is performed with respect to time
*t*. Hence, the name of this chapter.