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