MathGroup Archive 2004

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

Search the Archive

Re: Solve Feature?

  • To: mathgroup at smc.vnet.net
  • Subject: [mg52804] Re: Solve Feature?
  • From: Andrzej Kozlowski <akoz at mimuw.edu.pl>
  • Date: Mon, 13 Dec 2004 04:23:31 -0500 (EST)
  • References: <200412100123.UAA18967@smc.vnet.net> <opsir6lsn2iz9bcq@monster.ma.dl.cox.net> <002401c4dfb5$809b6a00$1802a8c0@Pentium4> <opsiu9j4nmiz9bcq@monster.ma.dl.cox.net> <opsiu90xstiz9bcq@monster.ma.dl.cox.net> <BFCE36FD-4BDB-11D9-8E08-000A95B4967A@mimuw.edu.pl> <opsivp4lhniz9bcq@monster.ma.dl.cox.net>
  • Sender: owner-wri-mathgroup at wolfram.com

O.K., I should have written I have no idea how NSolve works so I am 
"not very surprised" ;-)

Andrzej


On 12 Dec 2004, at 14:13, DrBob wrote:

>>> As for the NSolve example, I am not very surprised. This,
>>> as far as I know,  uses numerical Groebner basis which
>>> I think is vulnerable to numerical errors.
>
> Inputs identical to 14-15 decimals, and outputs off by 17 orders of 
> magnitude? For the intersection of two quadratics? Yikes!!
>
> Bobby
>
> On Sun, 12 Dec 2004 10:18:37 +0900, Andrzej Kozlowski 
> <akoz at mimuw.edu.pl> wrote:
>
>> *This message was transferred with a trial version of CommuniGate(tm) 
>> Pro*
>> The Solve case is indeed very puzzling. The reason why it is puzzling
>> is this.
>>
>> ls = {(-50 + x)^2 + (-50 + y)^2 == 156.25,
>>   (-50.00000000000002 + x)^2 +
>>     (-37.49999999999999 + y)^2 == 156.25}
>>
>> gr = GroebnerBasis[ls /. Equal -> Subtract, {x, y}];
>>
>>
>> sols1 = Solve[gr == 0, {x, y}]
>>
>>
>> {{y -> 43.7499999999999, x -> 39.17468245269449},
>>    {y -> 43.7499999999999, x -> 60.82531754730555}}
>>
>> This is what I have always believed Solve actually does (Daniel ???).
>> But of course it isn't true here:
>>
>> sols = Solve[ls, {x, y}]
>>
>> {{x -> 16., y -> 43.74999999999993},
>>    {x -> 84., y -> 43.75000000000004}}
>>
>> Looks like a bug to me.
>>
>> The answer we get using GroebnerBasis is indeed very close to that
>> given by using Rationalize, but curiously is not quite identical to 
>> it.
>>
>>
>> sols = N[Solve[Rationalize[ls], {x, y}]]
>>
>>
>> {{x -> 39.17468245269452, y -> 43.75},
>>    {x -> 60.82531754730548, y -> 43.75}}
>>
>> sols1 and sols are close enough for Mathematica to consider them 
>> equal:
>>
>> ({x, y} /. sols1) == ({x, y} /. sols)
>>
>> True
>>
>> However:
>>
>>
>> ls /. sols1
>>
>> Out[6]=
>> {{True, True}, {False, True}}
>>
>> while
>>
>> ls /. sols
>>
>> Out[7]=
>> {{True, True}, {True, True}}
>>
>> This is somewhat unpleasant.
>>
>> All this seems odd. I have beleived the follwoing to be true. Solve
>> uses GroebnerBasis to solve systems of polynomial equations. To use
>> Groebner basis the polynomials have to be rationalized. That suggests
>> that there should be no difference between the above results. What is
>> going on?
>>
>> As for the NSolve example, I am not very surprised. This, as far as I
>> know,  uses numerical Groebner basis which I think is vulnerable to
>> numerical errors.
>>
>> Andrzej
>>
>>
>>
>> On 12 Dec 2004, at 08:25, DrBob wrote:
>>
>>> *This message was transferred with a trial version of CommuniGate(tm)
>>> Pro*
>>> By the way, it gets even worse if I use NSolve:
>>>
>>> solution = NSolve[{c1, c5}]
>>> {c1, c5} /. solution
>>> Apply[Subtract, {c1, c5}, {1}] /. solution
>>>
>>> {{x -> -4.27759132*^8,
>>>    y -> 43.74999927054117},
>>>   {x -> 4.2775924*^8,
>>>    y -> 43.75000072945884}}
>>> {{False, False}, {False, False}}
>>> {{1.82977917785309*^17,
>>>    1.82977917785309*^17},
>>>   {1.8297792462945597*^17,
>>>    1.8297792462945597*^17}}
>>>
>>> These are simple polynomial equations, so this is really puzzling.
>>>
>>> Bobby
>>>
>>> On Sat, 11 Dec 2004 17:15:30 -0600, DrBob <drbob at bigfoot.com> wrote:
>>>
>>>> HELP!! Here are two very simple quadratic equations (circles):
>>>>
>>>> {c1, c5} = {(-50 + x)^2 + (-50 + y)^2 == 156.25,
>>>>   (-50.00000000000002 + x)^2 +
>>>>     (-37.49999999999999 + y)^2 == 156.25};
>>>>
>>>> If we rationalize before solving, we get accurate solutions:
>>>>
>>>> solution = Solve@Rationalize@{c1, c5}
>>>> solution // N
>>>> {c1, c5} /. solution
>>>> Subtract @@@ {c1, c5} /. solution
>>>>
>>>> {{x -> (25/4)*(8 - Sqrt[3]), y -> 175/4},
>>>>      {x -> (25/4)*(8 + Sqrt[3]), y -> 175/4}}
>>>> {{x -> 39.17468245269452, y -> 43.75},
>>>>    {x -> 60.82531754730548,  y -> 43.75}}
>>>> {{True, True}, {True, True}}
>>>> {{-4.263256414560601*^-14, 4.973799150320701*^-13},
>>>>    {-4.263256414560601*^-14, -4.263256414560601*^-13}}
>>>>
>>>> You can check this visually with ImplicitPlot:
>>>>
>>>> ImplicitPlot[{c1, c5}, {x, -40, 70}]
>>>>
>>>> But if we solve without Rationalize, we get wildly inaccurate 
>>>> results:
>>>>
>>>> solution = Solve@{c1, c5}
>>>> {c1, c5} /. solution
>>>> Subtract @@@ {c1, c5} /. solution
>>>>
>>>> {{x -> 16., y -> 43.74999999999993},
>>>>    {x -> 84., y -> 43.75000000000004}}
>>>> {{False, False}, {False, False}}
>>>> {{1038.812500000001, 1038.8125000000005},
>>>>   {1038.8124999999995, 1038.8124999999993}}
>>>>
>>>> I'm using version 5.1.
>>>>
>>>> Bobby
>>>
>>>
>>>
>>> --
>>> DrBob at bigfoot.com
>>> www.eclecticdreams.net
>>>
>>
>>
>>
>>
>
>
>
> -- 
> DrBob at bigfoot.com
> www.eclecticdreams.net
>


  • References:
  • Prev by Date: Re: Solve Feature?
  • Next by Date: Re: LogLog plot of NDSolve solution
  • Previous by thread: Re: Solve Feature?
  • Next by thread: Re: Solve Feature?