Re: Re: Simplifying Conjugate[] with 5.2 Mac
- To: mathgroup at smc.vnet.net
- Subject: [mg59863] Re: [mg59832] Re: Simplifying Conjugate[] with 5.2 Mac
- From: Andrzej Kozlowski <akoz at mimuw.edu.pl>
- Date: Wed, 24 Aug 2005 06:30:49 -0400 (EDT)
- References: <de45i8$qtf$1@smc.vnet.net> <de6maf$cj5$1@smc.vnet.net> <de9cqi$q5a$1@smc.vnet.net> <debt13$9bu$1@smc.vnet.net> <200508230851.EAA03009@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
On 23 Aug 2005, at 10:51, James Gilmore wrote: > Hi, > > > Thank you so much! This is a great definition, ConjugateSimple > [z_] := z /. > Complex[a_,b_]->Complex[a,-b]. Significantly better than my wrong hack > attempt. > > > Does anybody know of any cases where this definition fails to > conjugate a > term, when all variables apart from the I's in the expression, are > known to > be real? > > James Gilmore It won't work even in numerical cases where complex numbers are expressed without explicit I such as Root objects or: w = Last[x /. Solve[x^5 == 1, x]] (-1)^(4/5) In this case ComplexExpand[Conjugate[(-1)^(4/5)]] -(-1)^(1/5) or FullSimplify[Conjugate[(-1)^(4/5)], ComplexityFunction -> (LeafCount[#1] + 100*Count[#1, Conjugate, Infinity, Heads -> True] & )] -(-1)^(1/5) but Complex[a_,b_]->Complex[a,-b] will obviously have no effect. Andrzej Kozlowski > > ------------------------------------------------------ > >> >> This definition is too simple: >> >> > > >> In[6]:= >> ConjugateSimple[1+2I]//OutputForm >> Out[6]//OutputForm= >> 1 + 2 I >> >> > > >> A better definition would use Complex, as in Complex[a_,b_]- >> >Complex[a,-b]. >> >> > > >> [snip] >> >> > > >> Carl Woll >> Wolfram Research >> >> > -------------------------------------------------------- > > "James Gilmore" <james.gilmore at yale.edu> wrote in message > news:debt13$9bu$1 at smc.vnet.net... > >> "Steuard Jensen" <sbjensen at midway.uchicago.edu> wrote in message >> news:de9cqi$q5a$1 at smc.vnet.net... >> >>> Quoth "James Gilmore" <james.gilmore at yale.edu> in article >>> <de6maf$cj5$1 at smc.vnet.net>: >>> [I wrote:] >>> >>>>> In[5]:= Simplify[Conjugate[x+I y]] >>>>> >>>>> Out[5]= Conjugate[x + I y] >>>>> >>> >>> >>>> With regard to this behaviour, it may be useful to use PlusMap >>>> (or Map >>>> if >>>> there are always at least two terms when expanded), see >>>> FurtherExamples, >>>> in >>>> the Map documentation. >>>> $Assumptions = {{a, b} \[Element] Reals}; >>>> PlusMap[f_, expr_ /; Head[expr] =!= Plus, ___] := f[expr]; >>>> PlusMap[f_, expr_Plus, r___] := Map[f, expr, r]; >>>> Trace[Simplify[PlusMap[Conjugate, Expand[a + I*b]]]] >>>> Trace[Simplify[PlusMap[Conjugate, Expand[a + b]]]] >>>> >>> >>> This approach would presumably work in principle (since we've seen >>> that Simplify can deal with one term at a time). But in >>> practice, my >>> expressions often involve products and sums of many terms at many >>> levels. So I would either need to devise a way to Map Conjugate >>> properly onto each term by hand (at which point I might as well just >>> change all the I's to -I's myself!), or come up with an automated >>> way >>> of doing it >>> >> >> Are you just interested in changing I's to -I's? If so, I would >> suggest >> that >> you forget about Conjugate altogether and use pattern matching >> instead. >> This >> will give you an efficient method that will not depend on the >> internals of >> Conjugate. You will also not have to deal with changes in future >> versions >> of >> Mathematica. >> >> The other suggestions in this thread are compared to the pattern >> matching >> method below. It is clear pattern matching is the most efficient >> for the >> simple form tested: >> $ProductInformation >> {"ProductIDName" -> "Mathematica", "ProductKernelName" -> >> "Mathematica 5 Kernel", "ProductVersion" -> >> "5.0 for Microsoft Windows (June 11, 2003)", >> "ProductVersionNumber" -> 5.} >> ConjugateSimple[z_] := z /. {I -> -I, -I -> I} >> > > >
- References:
- Re: Simplifying Conjugate[] with 5.2 Mac
- From: "James Gilmore" <james.gilmore@yale.edu>
- Re: Simplifying Conjugate[] with 5.2 Mac