Mathematica 9 is now available
Services & Resources / Wolfram Forums / MathGroup Archive
-----

MathGroup Archive 2011

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

Search the Archive

Re: Replace in an elegant way

  • To: mathgroup at smc.vnet.net
  • Subject: [mg122894] Re: Replace in an elegant way
  • From: Peter Pein <petsie at dordos.net>
  • Date: Mon, 14 Nov 2011 07:09:17 -0500 (EST)
  • Delivered-to: l-mathgroup@mail-archive0.wolfram.com
  • References: <201111130943.EAA29993@smc.vnet.net> <j9oett$1lp$1@smc.vnet.net>

Am 13.11.2011 13:58, schrieb Bob Hanlon:
> You don't need to use multiple RepaceRepeated just ReplaceAll; and
> replacing dd with m does not require multiple special handling cases
>
> expr = ((1 + theta[m])^2)/(1 - m) - lambda*
>      ((theta[m] + ((lambda + m - lambda*m)*(1 + theta[m])*
>            (1 + theta[m] - lambda*theta[m]))/(1 - m) +
>         (m*Derivative[1][theta][m])/lambda));
>
> Your original
>
> expr2 = expr //.
>         Derivative[y_][theta][m] ->  Derivative[y][theta][dd] //.
>              theta[m] ->  theta[dd] /. m ->  qq //.
>      Derivative[y_][theta][dd] ->  Derivative[y][theta][m] //.
>     theta[dd] ->  theta[m];
>
> Streamlined
>
> expr3 = expr /.
>      {Derivative[y_][theta][m] ->  Derivative[y][theta][dd],
>       theta[m] ->  theta[dd], m ->  qq} /. dd ->  m;
>
> More compactly
>
> expr4 = expr /.
>      {theta'[m] ->  theta'[dd], theta[m] ->  theta[dd],
>       m ->  qq} /.dd ->  m;
>
> expr2 == expr3 == expr4
>
> True
>
>
> Bob Hanlon
>
>
> On Sun, Nov 13, 2011 at 4:43 AM, Mirko<dashiell at web.de>  wrote:
>> Hi all,
>> I have following equation:
>>
>> ((1 + theta[m])^2)/(1 - m) - lambda*((theta[m] + ((lambda + m - lambda*m)*(1 + theta[m])*(1 + theta[m] - lambda*theta[m]))/(1 - m) +
>>      (m*Derivative[1][theta][m])/lambda))
>>
>> I want to replace all m that are not an argument of theta[m] or the Derivative. However, if I use
>> /., it replaces all m. If I use Replace[expr,m->qq] it doesn't replace anything. (qq is the one I want to replace with). If I specify any level, it doesn't change anything, unless I use -1, but then I replace everything.
>>
>> Do you know how I solve this problem?
>> Right now I use:
>> //. Derivative[y_][theta][m] ->  Derivative[y][theta][dd] //.
>>     theta[m] ->  theta[dd] /. m ->  qq //.
>>   Derivative[y_][theta][dd] ->  Derivative[y][theta][m] //.
>>   theta[dd] ->  theta[m]
>>
>> but this is not elegant at all (and takes slightly longer).
>>
>

It's a matter of taste.

I like:
expr //. f_[a___, m, b___] /; FreeQ[f, theta] :> f[a, qq, b]

Peter



  • Prev by Date: Re: 2D Plot for a face of a 3D plot box?
  • Next by Date: Re: Problem:a texture on only one face of a Polyhedron
  • Previous by thread: Re: Replace in an elegant way
  • Next by thread: Re: Replace in an elegant way