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:
- Solve bug?
- From: paul@selfreferral.com
- Solve bug?