Wolfram ResearchPRODUCTSPURCHASEFOR USERSCOMPANYOUR SITES
THIS IS DOCUMENTATION FOR AN OBSOLETE PRODUCT.
SEE THE DOCUMENTATION CENTER FOR THE LATEST INFORMATION.
Previous section-----Next section

2.3.14 An Example: Defining Your Own Integration Function

Now that we have introduced the basic features of patterns in Mathematica, we can use them to give a more or less complete example. We will show how you could define your own simple integration function in Mathematica.

From a mathematical point of view, the integration function is defined by a sequence of mathematical relations. By setting up transformation rules for patterns, you can implement these mathematical relations quite directly in Mathematica.

mathematical form Mathematica definition
 integrate[y_ + z_, x_] :=
integrate[y, x] + integrate[z, x]
 ( independent of  )
integrate[c_ y_, x_] :=
c integrate[y, x] /; FreeQ[c, x]
 integrate[c_, x_] := c x /; FreeQ[c, x]
 ,  integrate[x_^n_., x_] := x^(n+1)/(n+1) /;
FreeQ[n, x] && n NotEqual -1
 integrate[1/(a_. x_ + b_.), x_] :=
Log[a x + b]/a /; FreeQ[{a,b}, x]
 integrate[Exp[a_. x_ + b_.], x_] :=
Exp[a x + b]/a /; FreeQ[{a,b}, x]

Definitions for an integration function.
This implements the linearity relation for integrals:  .

In[1]:=  integrate[y_ + z_, x_] :=
integrate[y, x] + integrate[z, x]

The associativity of Plus makes the linearity relation work with any number of terms in the sum.

In[2]:=  integrate[a x + b x^2 + 3, x]

Out[2]=

This makes integrate pull out factors that are independent of the integration variable x.

In[3]:=  integrate[c_ y_, x_] := c integrate[y, x] /; FreeQ[c, x]

Mathematica tests each term in each product to see whether it satisfies the FreeQ condition, and so can be pulled out.

In[4]:=  integrate[a x + b x^2 + 3, x]

Out[4]=

This gives the integral  of a constant.

In[5]:=  integrate[c_, x_] := c x /; FreeQ[c, x]

Now the constant term in the sum can be integrated.

In[6]:=  integrate[a x + b x^2 + 3, x]

Out[6]=

This gives the standard formula for the integral of  . By using the pattern x_^n_., rather than x_^n_, we include the case of  .

In[7]:=  integrate[x_^n_., x_] :=
x^(n+1)/(n+1) /; FreeQ[n, x] && n NotEqual -1

Now this integral can be done completely.

In[8]:=  integrate[a x + b x^2 + 3, x]

Out[8]=

Of course, the built-in integration function Integrate (with a capital I) could have done the integral anyway.

In[9]:=  Integrate[a x + b x^2 + 3, x]

Out[9]=

Here is the rule for integrating the reciprocal of a linear function. The pattern a_. x_ + b_. stands for any linear function of x.

In[10]:=  integrate[1/(a_. x_ + b_.), x_] :=
Log[a x + b]/a /; FreeQ[{a,b}, x]

Here both a and b take on their default values.

In[11]:=  integrate[1/x, x]

Out[11]=

Here is a more complicated case. The symbol a now matches 2 p.

In[12]:=  integrate[1/(2 p x - 1), x]

Out[12]=

You can go on and add many more rules for integration. Here is a rule for integrating exponentials.

In[13]:=  integrate[Exp[a_. x_ + b_.], x_] :=
Exp[a x + b]/a /; FreeQ[{a,b}, x]


Any questions about topics on this page? Click here to get an individual response.Buy NowFree TrialMore Information



 © 2009 Wolfram Research, Inc.  Terms of Use  Privacy Policy |
Sign up for our newsletter: