MathGroup Archive 1999

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

Search the Archive

Re: Simplify Log[ab] - Log[b] to Log[a] ?

  • To: mathgroup at smc.vnet.net
  • Subject: [mg16050] Re: Simplify Log[ab] - Log[b] to Log[a] ?
  • From: dreissBLOOP at bloop.earthlink.net (David Reiss)
  • Date: Mon, 22 Feb 1999 01:44:31 -0500
  • Organization: EarthLink Network, Inc.
  • References: <7ao3po$rv0@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

In article <7ao3po$rv0 at smc.vnet.net>, "Simon Allfrey"
<simon at allfrey13.freeserve.co.uk> wrote:

> How do I persuade Mathematica to simplify
> 
> Log[a b] - Log[b] to Log[a]?
> 
> when processing algebraic expressions?



In your simple example you could do the following 
with pattern matching in a repalcement rule:


In[1]:=
rules = {Log[x_ y_] :> Log[x] + Log[y]}

Out[1]=
{Log[(x_) (y_)] :> Log[x] + Log[y]}

In[2]:=
Log[a*b] - Log[b] /. rules

Out[2]=
Log[a]


In the following case you need to use ReplaceRepeated (//.) 
so that the rule is applied until the expression no longer 
changes:


In[3]:=
Log[a*b*c] - Log[b] - Log[c] /. rules

Out[3]=
Log[a] - Log[b] - Log[c] + Log[b c]

In[4]:=
Log[a*b*c] - Log[b] - Log[c] //. rules

Out[4]=
Log[a]


However, since a and b can be rather complicated, 
and because in such a case the product, a b, might 
be represented in its FullForm by something other 
than Times[a, b], you need to write transformation 
rules that cover all cases of interest.


In[5]:=
FullForm[a*b]

Out[5]//FullForm=
Times[a, b]


Note that the following doesn't simplify to the 
degree that you want:


In[6]:=
Log[a*b/c] - Log[b] /. rules

Out[6]=
                      b
Log[a] - Log[b] + Log[-]
                      c


This is because the FullForm of (a b/c) does not correspond 
to the rule:


In[7]:=
FullForm[a*b/c]

Out[7]//FullForm=
Times[a, b, Power[c, -1]]

In[8]:=
FullForm[b/c]

Out[8]//FullForm=
Times[b, Power[c, -1]]


But, if we include another rule to cover this case, 
it does work:


In[9]:=
rules = {Log[(x_)*(y_)] :> Log[x] + Log[y], 
   Log[(x_)/(y_)] :> Log[x] - Log[y]}

Out[9]=
{Log[(x_) (y_)] :> Log[x] + Log[y], 

 
      
  Log[x_/y_] :> Log[x] - Log[y]}


In[10]:=
Log[a*b/c] - Log[b] //. rules

Out[10]=
             1
Log[a] + Log[-]
             c

-- 


   
----------------------------------------
 
Scientific Arts:
Creative Services and Consultation 
for the Applied and Pure Sciences 

David Reiss 
Email: dreiss at !SPAMscientificarts.com 

----------------------------------------
 


Remove the !SPAM to send email


  • Prev by Date: Re: Simplify Log[ab] - Log[b] to Log[a] ?
  • Next by Date: Reset In[ ] & Out[ ]
  • Previous by thread: Re: Simplify Log[ab] - Log[b] to Log[a] ?
  • Next by thread: Re: Simplify Log[ab] - Log[b] to Log[a] ?