Re: Question regarding replacement
- To: mathgroup at smc.vnet.net
- Subject: [mg63876] Re: [mg63860] Question regarding replacement
- From: Andrzej Kozlowski <akoz at mimuw.edu.pl>
- Date: Fri, 20 Jan 2006 04:32:30 -0500 (EST)
- References: <200601190503.AAA21333@smc.vnet.net> <A2FA3133-4CB6-4A11-B939-3F948151C025@mimuw.edu.pl>
- Sender: owner-wri-mathgroup at wolfram.com
On 19 Jan 2006, at 11:22, Andrzej Kozlowski wrote: > > On 19 Jan 2006, at 06:03, michael_chang86 at hotmail.com wrote: > >> 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 >> > > > There is actually in Mathematica an obsolete and no longer > documented function that makes this sort of thing very easy: > > > b*(c/d) /. AlgebraicRules[{d/(b*c) == theta}, {d, b, c}] > > > 1/theta > > > AlgebraicRules has been deprecated because the other functionality > for manipulating algebraic expressions is more powerful and > reliable, but unfortunately it is also harder to use. I can see two > ways to do this, both not entirely obvious. One is using > GroebnerBasis: > > > GroebnerBasis[{a - b*(c/d), d/(b*c) - theta}, {theta}, > {b, c, d}] > > {a*theta - 1} > > effectively this is saying a*theta == 1 so a == 1/theta. The other > way is by using PolynomialReduce: > > > Last[PolynomialReduce[b*(c/d), {d - theta*b*c}, > {b, c, d}]] > > > 1/theta > > To sue these methods effectively unfortunately requires some > understanding of what GroebnerBasis and PolynomialReduce do, which > actually is non trivial. I still think that it would be a good idea > to bring back to life ALgebraicRUles (deprecated in version 3, I > think), whose syntax is at least much more understandable by users > without much knowledge of modern computational polynomial algebra. > > Andrzej Kozlowski Of course in this particular case there is at least one other way that is almost as simple to use as AlgebraicRules: a /. First[Solve[{a == b*(c/d), d/(b*c) == theta}, {a}, {b, c, d}]] Out[33]= 1/theta Andrzej
- References:
- Question regarding replacement
- From: "michael_chang86@hotmail.com" <michael_chang86@hotmail.com>
- Question regarding replacement