Services & Resources / Wolfram Forums / MathGroup Archive
-----

MathGroup Archive 2012

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

Search the Archive

Re: Rule replacement doesn't work after NDSolve?

  • To: mathgroup at smc.vnet.net
  • Subject: [mg124019] Re: Rule replacement doesn't work after NDSolve?
  • From: Szabolcs Horvát <szhorvat at gmail.com>
  • Date: Fri, 6 Jan 2012 04:13:35 -0500 (EST)
  • Delivered-to: l-mathgroup@mail-archive0.wolfram.com
  • References: <je3vls$eao$1@smc.vnet.net>

On 2012.01.05. 11:57, Bill Rowe wrote:
> On 1/4/12 at 5:03 AM, g.crlsn at gmail.com (gac) wrote:
>
>> Thanks very much for the reply.  Your suggestion works as you say,
>> but I'm still confused.  I thought that the replacement is for the
>> function, not the arguments.
>
> Replacement rules are not limited to either functions or
> arguments. For example, I can do:
>
> In[3]:= Cos[y] /. Cos ->  Sin
>
> Out[3]= Sin[y]
>
> replacing the Cos function with Sin or
>
> In[4]:= Cos[y] /. y ->  2 x
>
> Out[4]= Cos[2*x]
>
> replacing the argument y with 2 x
>
> The thing to keep in mind with replacement rules is a litteral
> match is made between the FullForm of the expression you want to
> operate on and the left hand side of the replacement rule. For
> example, this does nothing:
>
> In[5]:= -2 I /. I ->  -I
>
> Out[5]= -2*I
>
> since
>
> In[6]:= FullForm[-2 I]
>
> Out[6]//FullForm= Complex[0,-2]
>
> and there is nothing to match the left hand side of the
> replacement rule
>

It is an interesting example your bring up here.

Although FullForm[I+1] shows Complex[1,1], we can also check that 
AtomQ[I+1] === True, i.e. Complex[1,1] doesn't have a structure as an 
expression.  In this sense it is quite different from the expressions 
Complex[a,b] or Complex[_,_] (a pattern), which *do* have a structure 
that can be broken down: check that AtomQ[Complex[_,_]] === False.

Despite this MatchQ[ 1+I, Complex[_,_] ] *does* match.  This was 
surprising for me.

SparseArray is atomic too, and it matches too in similar situations.

Graph (also atomic) doesn't, however:

MatchQ[Graph[{1 -> 2}], Graph[_, __]]

even though FullForm gives  Graph[List[1,2],List[DirectedEdge[1,2]]]

My point is that one should be careful when looking at the *apparent* 
FullForm of atomic objects and matching against them.

Or perhaps the different behaviour of Graph is an oversight or bug?

-- 
Szabolcs Horvát
Mma QA site proposal: http://area51.stackexchange.com/proposals/37304



  • Prev by Date: Sorting point-arrays by rows and columns, cont.
  • Next by Date: Re: How to plot divergence of gradient as contour plot
  • Previous by thread: Re: Rule replacement doesn't work after NDSolve?
  • Next by thread: Re: Rule replacement doesn't work after NDSolve?