MathGroup Archive 2004

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

Search the Archive

Re: Solve Feature?

  • To: mathgroup at smc.vnet.net
  • Subject: [mg52803] Re: Solve Feature?
  • From: DrBob <drbob at bigfoot.com>
  • Date: Mon, 13 Dec 2004 04:23:29 -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>
  • Reply-to: drbob at bigfoot.com
  • Sender: owner-wri-mathgroup at wolfram.com

>> 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:

> 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: Partition of multi dimension list
  • Previous by thread: Re: Solve Feature?
  • Next by thread: Re: Solve Feature?