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
- References:
- Replace in an elegant way
- From: Mirko <dashiell@web.de>
- Replace in an elegant way