Services & Resources / Wolfram Forums
-----
 /
MathGroup Archive
1999
*January
*February
*March
*April
*May
*June
*July
*August
*September
*October
*November
*December
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

MathGroup Archive 1999

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

Search the Archive

Re: [Q] Implementing identities as rules

  • To: mathgroup at smc.vnet.net
  • Subject: [mg18666] Re: [mg18608] [Q] Implementing identities as rules
  • From: "David Park" <djmp at earthlink.net>
  • Date: Thu, 15 Jul 1999 01:45:52 -0400
  • Sender: owner-wri-mathgroup at wolfram.com

Kevin Jaffe wrote:
>
>During symbolic manipulations it often important to be able to use
>both sides of an identity or definition.  For example, let f be a
>function defined by
>
>In[1]:= f = Function[{x, y}, Exp[x^2 + y^2]];
>
>Its partial derivative with respect to x is:
>
>In[2]:= D[f[x, y], x]
>
>            2    2
>           x  + y
>Out[2]= 2 E        x
>
>Now, I want to recast this result in the form 2 x f[x, y], i.e. I want
>to revert to the "left-hand side" of the original definition of f[x,
>y].  How does one do this in Mathematica?  I know that if I try the
>rule
>
>
>In[3]:= %2 /. Exp[a_^2 + b_^2] :> f[a, b]
>
>             2    2
>            x  + y
>Out[3]= 2 E        x
>
>
>I get the original expression, because when the pattern is replace,
>f[a, b] is immediately evaluated to reproduce the original expression.
>(I know that the replacement occurs because if instead I use a rule
>whose right hand side cannot be evaluated further
>
>In[4]:= %2 /. Exp[a_^2 + b_^2] :> g[a, b]
>
>Out[4]= 2 x g[x, y]
>
>I get the desired result.)
>
>Is there a way to instruct Mathematica not to evaluate the expression
>after the replacement has been made?
>
>Thanks,
>
>kj0 at mailcity.com
>


There are two approaches that I know.  Use HoldForm, or don't define f in a
definition but by a rule.

The first method:

f := Function[{x, y}, E^(x^2 + y^2)]
D[f[x, y], x]
% /. f[x, y] -> HoldForm[f[x, y]]   giving

2*E^(x^2 + y^2)*x
2 x f[x, y]

The second method:

Clear[f];
frule = f[x, y] -> E^(x^2 + y^2);

D[f[x, y] /. frule, x]
% /. Reverse[frule]     giving

2*E^(x^2 + y^2)*x
2 x f[x, y]

David Park
djmp at earthlink.net
http://home.earthlink.net/~djmp/





  • Prev by Date: Re(2): RE: ExpIntegralEi
  • Next by Date: Re: Rationalizing the denominator
  • Previous by thread: Re: [Q] Implementing identities as rules
  • Next by thread: Re: [Q] Implementing identities as rules