# The Representation of Derivatives

Derivatives in *Mathematica* work essentially the same as in standard mathematics. The usual mathematical notation, however, often hides many details. To understand how derivatives are represented in *Mathematica*, you must look at these details.

The standard mathematical notation is really a shorthand for , where is a "dummy variable". Similarly, is a shorthand for . As suggested by the notation , the object can in fact be viewed as a "pure function", to be evaluated with a particular choice of its parameter . You can think of the operation of differentiation as acting on a function , to give a new function, usually called .

With functions of more than one argument, the simple notation based on primes breaks down. You cannot tell, for example, whether stands for or , and for almost any , these will have totally different values. Once again, however, is just a dummy variable, whose sole purpose is to show with respect to which "slot" is to be differentiated.

In *Mathematica*, as in some branches of mathematics, it is convenient to think about a kind of differentiation that acts on *functions*, rather than expressions. An operation is needed that takes the function , and gives the *derivative function* . Operations such as this that act on *functions*, rather than variables, are known in mathematics as *operators*.

The object in *Mathematica* is the result of applying the differentiation operator to the function . The full form of is in fact Derivative[1][f]. Derivative[1] is the *Mathematica* differentiation operator.

The arguments in the operator Derivative[n_{1}, n_{2}, ...] specify how many times to differentiate with respect to each "slot" of the function on which it acts. By using operators to represent differentiation, *Mathematica* avoids any need to introduce explicit "dummy variables".

In[1]:= |

Out[1]//FullForm= | |

In[2]:= |

Out[2]//FullForm= | |

In[3]:= |

Out[3]//FullForm= | |

In[4]:= |

Out[4]= |

In[5]:= |

Out[5]//FullForm= | |

In[6]:= |

Out[6]//FullForm= | |

In[7]:= |

Out[7]//FullForm= | |

In[8]:= |

Out[8]//FullForm= | |

In[9]:= |

Out[9]= |

In[10]:= |

Out[10]//FullForm= | |

The object behaves essentially like any other function in *Mathematica*. You can evaluate the function with any argument, and you can use standard *Mathematica* operations to change the argument. (This would not be possible if explicit dummy variables had been introduced in the course of the differentiation.)

In[11]:= |

Out[11]//FullForm= | |

In[12]:= |

Out[12]= |

In[13]:= |

Out[13]= |

There is some slight subtlety when you need to deduce the value of based on definitions for objects like .

In[14]:= |

In[15]:= |

Out[15]= |

In[16]:= |

Out[16]= |

In[17]:= |

Out[17]= |

The function is completely determined by the form of the function . Definitions for objects like do not immediately apply, however, to expressions like . The problem is that has the full form Derivative[1][f][x], which nowhere contains anything that explicitly matches the pattern . In addition, for many purposes it is convenient to have a representation of the function itself, without necessarily applying it to any arguments.

What *Mathematica* does is to try and find the explicit form of a *pure function* which represents the object . When *Mathematica* gets an expression like Derivative[1][f], it effectively converts it to the explicit form D[f[#], #]& and then tries to evaluate the derivative. In the explicit form, *Mathematica* can immediately use values that have been defined for objects like . If *Mathematica* succeeds in doing the derivative, it returns the explicit pure-function result. If it does not succeed, it leaves the derivative in the original form.

In[18]:= |

Out[18]= |

In[19]:= |

Out[19]= |