Re: Re: bug -- advice sought
- To: mathgroup at smc.vnet.net
- Subject: [mg84810] Re: Re: bug -- advice sought
- From: UHAP023 at alpha1.rhbnc.ac.uk
- Date: Tue, 15 Jan 2008 03:18:27 -0500 (EST)
- Organization: Low Temperature Physics, RHUL
- References: <fmf7cq$dct$1@smc.vnet.net>
Thanks again for the followup. Andrzej Kozlowski <akoz at mimuw.edu.pl> wrote: : On 13 Jan 2008, at 14:56, T.Crane wrote: : > : > : > : Reduce[Element[z, Reals] && : > : And @@ {Rx > 0, Rvt > 0, Dc > 0, w > 0}, : > : {Rx, Rvt, Dc, w, Rx, Rvt, Dc, w}] : > : > : Rx > 0 && Rvt > 0 && Dc > 0 && w > 0 : > : > : This may look strange but it actually says that z is indeed real : > under : > : the stated conditions. So now let's try to find an expression for z : > : not involving I: : > : > Yes this does look strange -- is the '&& And @@' definitely correct : > syntax? I tried this command under Mathematica 4.0 and 5.0 and both : > reject it. : > I presume you are using a later version? : Mathematica 6.0 and 5.2 give: : In[10]:= Element[z, Reals] && And @@ {Rx > 0, Rvt > 0, Dc > 0, w > 0} : Out[10]= Element[z, Reals] && Rx > 0 && Rvt > 0 && Dc > 0 && w > 0 : I don't have any earlier version installed on any computer I still use : but I would expect that the same thing would happen since And was last : modified in version 3. On the other hand, according to the : documentation, Reduce was seriously modified in version 5 so I am : suprised by your report that the command does not work in version 5.0. : As for the output : Rx > 0 =E2=87=93 Rvt > 0 =E2=87=93 Dc > 0 =E2=87=93 w > 0 Strange. On V5.0 I get; In[3]:= Element[z,Reals]&&And@@{Rx>0,Rvt>0,Dc>0,w>0} // InputForm Out[3]//InputForm= 2*Sqrt[2]*Rvt^5*(Rvt^2 + Rx^2)^(3/2)*w^2*(Sqrt[2*Dc - I*Rx^2*w]*(2*Dc - I*(Rvt^2 + Rx^2)*w)^3 + Sqrt[2*Dc + I*Rx^2*w]*(2*Dc + I*(Rvt^2 + Rx^2)*w)^3) \[Element] Reals && Rx > 0 && Rvt > 0 && Dc > 0 && w > 0 : it simply means that the original condition (with Element[z,Reals]) : reduces to this condition alone. This is, of course, the same as : saying that the condition Element[z,Reals] is implied by the inequality. and with Reduce[], In[4]:= Reduce[Element[z,Reals]&&And@@{Rx>0,Rvt>0,Dc>0,w>0},{Rx,Rvt,Dc,w}] //InputForm >From In[4]:= Reduce::"nsmet" :This system cannot be solved with the methods available to Reduce. Out[4]//InputForm= Reduce[2*Sqrt[2]*Rvt^5*(Rvt^2 + Rx^2)^(3/2)*w^2*(Sqrt[2*Dc - I*Rx^2*w]*(2*Dc - I*(Rvt^2 + Rx^2)*w)^3 + Sqrt[2*Dc + I*Rx^2*w]*(2*Dc + I*(Rvt^2 + Rx^2)*w)^3) \[Element] Reals && Rx > 0 && Rvt > 0 && Dc > 0 && w > 0, {Rx, Rvt, Dc, w}] : > : > : > Agreed. This is very useful but I would like to manipulate it a : > little further. BTW Mathematica 4.0 gives p in terms of : > Sin[(1/2)*ArcTan[x,y]] : > & Cos[(1/2)*ArcTan[x,y]] rather than your Sin[(1/2)*ArcCot[x/y]] & : > Cos[(1/2)*ArcCot[x/y]] which is a little less clean. : > : > Now Sin[(1/2)*ArcTan[x,y]] and Cos[(1/2)*ArcTan[x,y]] can be written : > as (x*Sqrt[1 - 1/Sqrt[1 + x^2]])/(Sqrt[2]*Sqrt[x^2]) and (Sqrt[1 + : > 1/Sqrt[1 + x^2]]/Sqrt[2]) respectively, taking into account the signs : > of the x & y arguments and the 'quadrant' they appear in. : Your expressions can't be right as they are independent of y. I guess : what you must have meant was : q=Sqrt[(1 - x/Sqrt[x^2 + y^2])/2] Oops. Yes! I had meant to write ((y/x)*Sqrt[1 - 1/Sqrt[1 + (y/x)^2]])/(Sqrt[2]*Sqrt[(y/x)^2]). which should be equivalent to your q. : etc. If you are willing to add assumptions on x and y you can make : Mathematica return expressions, close to this : p = Assuming[x > 0 && y >0, FullSimplify[ : Sin[(1/2)*ArcTan[x, y]], ComplexityFunction -> : (Count[#1, ArcTan | Log, Infinity, : Heads -> True] & )]] Thanks - this is what I was after. : 1/(Sqrt[2]*(x^2 + y^2)^(1/4)* : Sqrt[-(1/(x - Sqrt[x^2 + y^2]))]) : FullSimplify[Sqrt[(1 - x/Sqrt[x^2 + y^2])/2] == p, : {x > 0, y > 0}] : True : > For the : > above expression z this can easily be done with ReplaceAll but not for : > a more complicated expression like the result of my second question, : > which (for brevity here) is produced by; : > : > igrand=(Dc*Rx^2*Cos[theta]^2)/ : > ((4*Dc^2 + Rx^4*w^2*Cos[theta]^4)* : > (Rvt^2 + Rx^2*Sin[theta]^2)^3) : > : > igral = Integrate[igrand, {theta, 0, Pi/2}, Assumptions -> : > {Rx > 0, Rvt > 0, w > 0, Dc > 0, theta >= 0}] : > : > igral=Simplify[igral, {Rx > 0, Rvt > 0, w > 0, Dc > 0}] : > : > igralp = Simplify[ComplexExpand[Re[igral], : > TargetFunctions -> {Re, Im}], : > {Rx > 0, Rvt > 0, Dc > 0, w > 0}] : > : > So my question is; Is there any 'trick' along the lines of your p : > expression formula ComplexExpand[] to get Mathematica to replace : > expressions of the form SinorCos[aconstant*ArcTanorArcCot[stuff]] and : > similar with expressions like I've given above for the aconstant==1/2 : > case? : You could try to use the same approach as above. The problem seems to : be, however, that Simplify does not know enough transformations to get : rid of ArcTan stuff while FullSimplify takes too long. One possibility : is to use FullSimplify with a time constraint. Here is what I get: : In[1]:= igrand = (Dc*Rx^2*Cos[theta]^2)/ : ((4*Dc^2 + Rx^4*w^2*Cos[theta]^4)* : (Rvt^2 + Rx^2*Sin[theta]^2)^3); : In[2]:= igral = Integrate[igrand, {theta, 0, Pi/2}, : Assumptions -> {Rx > 0, Rvt > 0, w > 0, Dc > 0, : theta >= 0}]; : In[3]:= igralp = Simplify[ComplexExpand[Re[igral], : TargetFunctions -> {Re, Im}], : {Rx > 0, Rvt > 0, Dc > 0, w > 0}]; : In[4]:= Quiet[Assuming[Rx > 0 && Rvt > 0 && Dc > 0 && w > 0, : FullSimplify[igralp, ComplexityFunction -> : (LeafCount[#1] + 100*Count[#1, ArcTan | ArcCot | Log, : Infinity, : Heads -> True] & ), TimeConstraint -> 0.01]]] : Out[4]= (Pi*(4*Dc^4 + Rx^4*w^2*Dc^2)^(1/4)* : (24*w^4*(4*Dc^4 + Rx^4*w^2*Dc^2)^(1/4)*Rvt^12 + : 108*Rx^2*w^4*(4*Dc^4 + Rx^4*w^2*Dc^2)^(1/4)* : Rvt^10 - 32*Dc^(5/2)*w^2*(w^2*Rx^4 + 4*Dc^2)^ : (1/4)*Rvt^8 + 195*Rx^4*w^4* : (4*Dc^4 + Rx^4*w^2*Dc^2)^(1/4)*Rvt^8 + : 180*Rx^6*w^4*(4*Dc^4 + Rx^4*w^2*Dc^2)^(1/4)* : Rvt^6 + 4*(Rvt^2 + Rx^2)^(5/2)*w^3* : ((Rvt^2 + Rx^2)^2*w^2 - 12*Dc^2)* : Sqrt[1 - (2*Dc)/Sqrt[w^2*Rx^4 + 4*Dc^2]]*Rvt^5 - : 8*Dc*(Rvt^2 + Rx^2)^(3/2)*w^2* : (3*(Rvt^2 + Rx^2)^2*w^2 - 4*Dc^2)* : Sqrt[(2*Dc)/Sqrt[w^2*Rx^4 + 4*Dc^2] + 1]*Rvt^5 + : 120*Dc^(5/2)*Rx^4*w^2*(w^2*Rx^4 + 4*Dc^2)^(1/4)* : Rvt^4 + 90*Rx^8*w^4*(4*Dc^4 + Rx^4*w^2*Dc^2)^ : (1/4)*Rvt^4 + 112*Dc^(5/2)*Rx^6*w^2* : (w^2*Rx^4 + 4*Dc^2)^(1/4)*Rvt^2 + : 24*Rx^10*w^4*(4*Dc^4 + Rx^4*w^2*Dc^2)^(1/4)* : Rvt^2 + 64*Dc^4*Rx^2*(4*Dc^4 + Rx^4*w^2*Dc^2)^ : (1/4)*Rvt^2 + 24*Dc^(5/2)*Rx^8*w^2* : (w^2*Rx^4 + 4*Dc^2)^(1/4) + 48*Dc^4*Rx^4* : (4*Dc^4 + Rx^4*w^2*Dc^2)^(1/4) + : 3*Rx^12*w^4*(4*Dc^4 + Rx^4*w^2*Dc^2)^(1/4)))/ : (16*Rvt^5*(Rvt^2 + Rx^2)^(3/2)* : Sqrt[w^2*Rx^4 + 4*Dc^2]* : (4*Dc^2 + (Rvt^2 + Rx^2)^2*w^2)^3) : This is almost certianly not the simplest expression one could get but : it seems not to contain the functions you wanted to get rid of. Agreed. I tried running the above FullSimplify on a 1.1GHz Athlon machine for a couple of hours without result. I would be interested to know how long it took you and your machine's spec. I spent some timing experimenting with FullSimplify[TimeConstraint->value] on Mathematica 4.0 and came to the conclusion that its granularity was only 1 second and moreover that specifying values (>0 & <=1) were equivalent to specifying 1. The Mathematica 4.0 documentation is a bit opaque on this issue. What do you think? Best regards Tom Crane CCed & posted. : Andrzej Kozlowski -- Tom Crane, Dept. Physics, Royal Holloway, University of London, Egham Hill, Egham, Surrey, TW20 0EX, England. Email: T.Crane at rhul dot ac dot uk Fax: +44 (0) 1784 472794
- Follow-Ups:
- Re: Re: Re: bug -- advice sought
- From: Andrzej Kozlowski <akoz@mimuw.edu.pl>
- Re: Re: Re: bug -- advice sought