MathGroup Archive 2006

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

Search the Archive

Re: Question regarding replacement

  • To: mathgroup at smc.vnet.net
  • Subject: [mg63874] Re: Question regarding replacement
  • From: Peter Pein <petsie at dordos.net>
  • Date: Fri, 20 Jan 2006 04:32:27 -0500 (EST)
  • References: <dqn812$la9$1@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

michael_chang86 at hotmail.com schrieb:
> Hi,
> 
> Often, when manipulating symbolic results, one might want to replace
> some symbols with "simpler" expressions, and typically, I've managed
> this with "/.".  However, suppose that
> 
> In[1]:  a = b c/d
> 
> and I know that d/(b c) = theta.  Unfortunately,
> 
> In[2]:  params={d/(b c)->theta}; a/.params
> does *not* yield 1/theta.  How can I achieve this simply *without*
> redefining params?
> 
> (This (too) simple example is meant to demonstrate some difficulties
> that I typically encounter when trying to replace symbols in *much*
> more complicated expressions, where, sometimes, the symbols that I am
> trying to replace are inverted ... :(  )
> 
> My apologies in advance, since this seems embarassingly simple, but any
> help or suggestions would be greatly appreciated!
> 
> Regards,
> 
> Michael
> 
Hi Michael,

a starting point might be:

In[1]:=
Clear[simp];
simp[x_ == fx_, y_ == fy_] :=
   Module[{sol = Solve[{x == fx, y == fy}, x, Intersection @@
        Variables /@ {fx, y - fy}]},
     If[sol == {}, x == fx, x == (x /. First[sol])]]

In[3]:=
simp[a == (b*c)/d, d/(b*c) == theta]
Out[3]=
a == 1/theta

In[4]:=
simp[l1_List, l2_List] := Fold[simp[#1, #2]& , #1, l2]& /@ l1

In[5]:=
simp[{a == (b*c)/d, b == e + d*a}, {d/(b*c) == theta, e - b == g}]
Out[5]=
{a == 1/theta, b == -(g/(a*c*theta))}

In[6]:=
Solve[%, {a, b}]
Out[6]=
{{b -> -(g/c), a -> 1/theta}}


  • Prev by Date: Re: Question regarding replacement
  • Next by Date: Re: Re: Visualization site updates
  • Previous by thread: Re: Question regarding replacement
  • Next by thread: Format menu problem