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