Re: Replace in an elegant way
- To: mathgroup at smc.vnet.net
- Subject: [mg122921] Re: Replace in an elegant way
- From: "Dr. Wolfgang Hintze" <weh at snafu.de>
- Date: Wed, 16 Nov 2011 04:45:52 -0500 (EST)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
- References: <201111130943.EAA29993@smc.vnet.net> <j9oett$1lp$1@smc.vnet.net> <j9r0pt$bjr$1@smc.vnet.net>
Peter, I like this one most. I wanted to do something with FreeQ but I didn't find the construct. Regards, Wolfgang "Peter Pein" <petsie at dordos.net> schrieb im Newsbeitrag news:j9r0pt$bjr$1 at 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 >
- References:
- Replace in an elegant way
- From: Mirko <dashiell@web.de>
- Replace in an elegant way