MathGroup Archive 1999

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: An open letter

  • To: mathgroup at smc.vnet.net
  • Subject: [mg16596] Re: [mg16540] An open letter
  • From: Daniel Lichtblau <danl>
  • Date: Wed, 17 Mar 1999 23:55:04 -0500
  • References: <199903160900.EAA09473@smc.vnet.net.>
  • Sender: owner-wri-mathgroup at wolfram.com

Jack Goldberg wrote:
> 
> Hi Group,
> 
> I am a Mathematica enthusiast who has dabbled in programming
> Mathematica for enough years that I feel free to complain.  Here's
> my gripe:
> 
> My main purpose in using Mathematica is help students learn mathematics.
> So for my purposes the fact that Mathematica evaluates everything in sight
> is a major drawback.  Let me be explicit.  I want to illustrate
> "Integration by Parts".  So I try to define
> 
> ByParts[Integrate[f_*g_,x_],g_] := ????
> 
> What I would like as an output of  ByParts is this
> 
> Integrate[f*g,x] == f*Integrate[g,x] -
>         Integrate[D[f,x]*Integrate[g,x],x]
> 
> where the integration on the left IS NOT performed, the integration of
> g  in the two integrals on the right is performed but the last integral
> on the right is unevaluated.  Put in other words, I would like Mathematica to
> display the kind of formula the student would get using integration by
> parts.  I have found this surprisingly difficult to do.  I have used
> various combinations of Evaluate, Hold, HoldFirst and HoldForm with
> only partial success.  I have gotten to the point where I don't even
> understand why my last effort failed!  Perhaps someone could explain why
> the following does not work.
> 
> ByParts[ f_*g_,x_,g_] := Module[ {int, dif, li1},
>         int = Integrate[g,x];
>         dif = D[f,x];
>         li1 = int*dif;
>         HoldForm[Integrate[f*g,x]] == f*int-
>                 HoldForm[Integrate[li1,x]]
>         ]
> 
> (I hope I have the right number of left and right brackets!)
> The problem is that the very last HoldForm seems to prevent
> li1 from providing int*dif as the integrand. What's going on?
> 

This might be something useful for your purposes. I use a "dummy" head
and format it appropriately.

ByParts[ f_*g_,x_,g_] := Module[{int, dif, li1},
	int = Integrate[g,x];
	dif = D[f,x];
	li1 = int*dif;
	HoldForm[Integrate[f*g,x]] ==
	  f*int - integrate[li1,x]
	]
Format[integrate[a___]] := "Integrate"[a]

In[3]:= ByParts[x*Log[x],x,x]

                                                      2
                                             x       x  Log[x]
Out[3]= Integrate[Log[x] x, x] == -Integrate[-, x] + ---------
                                             2           2


> Now back to my open letter.  This example is only one of three or
> four that I have fell prey to. All of them are based on Mathematica's propensity
> to evaluate.  I offer only one more example and I will be brief
> in my description.
> 
> I want to explain why  e^x*e^x = e^(2x) by using
> the power series expansion of  e^x.  I
> define the Cauchy product of series for the students and would like
> Mathematica to exhibit the nth coefficient of the product as a finite sum.
> 
> Sum[ x^n/n!, {n,0,Infinity} ]*Sum[ x^n/n!, {n,0,Infinity} ] ==
>         Sum[ Sum[ 1/(k!(n-k)!, {k,0,n}] x^n, {n,0,Infinity} ]
> 
> There is not a single term in this expression that Mathematica will leave
> unevaluated!  I could trick Mathematica by inserting spurious factors that
> would stop the evaluation process, but I don't want to have to figure
> out some clever way to do this or to introduce holds etc.

Here is a possibility. Use RSolve`SeriesTerm to see the nth term of the
product, and a single sum to get at individual coefficients from the
rhs.

<<DiscreteMath`RSolve`

In[8]:= SeriesTerm[Sum[x^n/n!,{n,0,Infinity}] * Sum[
x^n/n!,{n,0,Infinity}], {x,0,n}]

         n
        2
Out[8]= --
        n!

In[9]:= Sum[ 1/(k!(n-k)!), {k,0,n}]

              n
             2
Out[9]= ------------
        Gamma[1 + n]


> ...


Daniel Lichtblau
Wolfram Research


  • References:
  • Prev by Date: More problems with symbolize.
  • Next by Date: Re: Eliminating a "Unit"
  • Previous by thread: An open letter
  • Next by thread: Re: An open letter