MathGroup Archive 2007

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

Search the Archive

Re: FindInstance puzzler

Andrzej Kozlowski wrote:
> On 28 Nov 2007, at 05:40, Adam Strzebonski wrote:
>> Andrzej Kozlowski wrote:
>>> *This message was transferred with a trial version of CommuniGate(tm) 
>>> Pro*
>>> On 27 Nov 2007, at 17:05, Andrzej Kozlowski wrote:
>>>> Reduce[2*y*I*Sqrt[x] + 2*(y - I*Sqrt[x]) == 0, {x, y}, Reals]
>>> This should have been:
>>> In[17]:= Reduce[2*y*I*Sqrt[x] + 2*(y - y*I*Sqrt[x]) == 0,
>>>  {x, y}, Reals]
>>> During evaluation of In[17]:= Reduce::nddc:The system 2 \[ImaginaryI] 
>>> Sqrt[x] y+2 (y-\[ImaginaryI] Sqrt[x] y)\[LongEqual]0 contains a 
>>> nonreal constant 2 \[ImaginaryI]. With the domain 
>>> \[DoubleStruckCapitalR] specified, all constants should be real. >>
>>> Out[17]= Reduce[2*I*Sqrt[x]*y + 2*(y - I*Sqrt[x]*y) == 0,
>>>  {x, y}, Reals]
>>> but it other than that it does not change anything. Note that:
>>> Reduce[Simplify[2*y*I*Sqrt[x] + 2*(y - y*I*Sqrt[x]) == 0], {x, y}, 
>>> Reals]
>>> y==0
>>> What I really mean tto say is: wouldn't it be a litte better to first 
>>> automatically apply Simplify in such situation to see if the I's 
>>> could be got rid of?
>>> Andrzej Kozlowski
>> It think this behaviour is correct. Reduce should disallow any non-real
>> subexpressions when the domain Reals is specified. The fact that it
>> cannot detect potentially non-real functions that cancel during input
>> processing is more problematic, but hard to avoid.
>> Adam Strzebonski
> Well yes, but... There are plenty of real valued functions for which it 
> is hard to give an explicit expression not involving complex numbers. 
> For example, the function
> g[x_] := Sec[(1/2)*Arg[I*Sin[x]]]*(Sqrt[I*Sin[x]] - 
> I*Sqrt[Abs[Sin[x]]]*Sin[(1/2)*Arg[I*Sin[x]]])
> is always real valued for real x. In fact, Mathematica is able to show 
> that this is so:
> ComplexExpand[Im[g[x]], TargetFunctions -> {Re, Im}]
> 0
> Moreover, Mathematica can even solve  (well, almost) the following:
> Reduce[g[x] == 1 && Element[x, Reals], x]
> Reduce::ztest:Unable to decide whether numeric quantities {1/8 (-8 
> tan-1(1-Power(<<2>>))-Ï?)} are equal to zero. Assuming they are. >>
> Element[C[1], Integers] && (x == (1/2)*(4*Pi*C[1] - Pi) || x == 
> (1/2)*(4*Pi*C[1] + 3*Pi) ||
>    x == (1/2)*(4*Pi*C[1] + Pi))
> But even so, it won't even touch:
>  Reduce[g[x] == 1, x,Reals]
> I guess the reason why I am not happy about it is that I am used to 
> telling students that an expression is not "complex" valued just because 
> it has complex numbers in it. This behaviour would seem to confirm them 
> in this, in my opinion, quite wrong anti-complex prejudice. Still, I 
> admit, being able to dismiss certian inputs out of hand,  clearly makes 
> the job of a CAS easier  ;-)
> Andrzej Kozlowski

With domain Reals specified, Reduce looks for solutions for
which all constants and function values are real. So in

Reduce[g[x]==1, x, Reals]

g[x] does not need to be real valued for all x, but for x0 to
be considered a solution, all subexpressions of g[x] need to
be real valued at x0. Hence

Sqrt[I*Sin[x0]], I*Sin[x0] and I

all need to be real valued. Since a non-real constant is not
real valued for any value of x, there are no solutions.
Technically, Reduce could return False here, but I think it is
better to give a warning message instead.

As you noted, if you are looking for solutions for which x is real
but subexpressions of g[x] are allowed to be non-real,

Reduce[g[x] == 1 && Element[x, Reals], x]

works just fine.

Best Regards,

Adam Strzebonski
Wolfram Research

  • Prev by Date: Beginner, plot with multiple rules depending on parameters
  • Next by Date: Re: PlotLabel - SubscriptBox - Vers. 6: FontColor not working?
  • Previous by thread: Re: FindInstance puzzler
  • Next by thread: Re: FindInstance puzzler