• To: mathgroup at smc.vnet.net
• Subject: [mg130645] Re: Wrong Answer
• From: Andrzej Kozlowski <akozlowski at gmail.com>
• Date: Sun, 28 Apr 2013 01:02:00 -0400 (EDT)
• Delivered-to: l-mathgroup@mail-archive0.wolfram.com
• Delivered-to: l-mathgroup@wolfram.com
• Delivered-to: mathgroup-outx@smc.vnet.net
• Delivered-to: mathgroup-newsendx@smc.vnet.net
• References: <20130427030938.151746A1A@smc.vnet.net>

```Something else is happening. You are using machine precision (approximate) input and Solve is not intended for dealing with this (NSolve is). There are two possible approaches, if you want to use Solve rather than NSolve. One is to use exact input

p1 := (px + t vx)^4 + (py + t vy)^4 == 1
r1 := {px -> 1/2, py -> 1/2, vx -> 1/2, vy -> 1/2}

p1 := (px + t vx)^4 + (py + t vy)^4 == 1
r1 := {px -> 1/2, py -> 1/2, vx -> 1/2, vy -> 1/2}

Solve[p1 /. r1, t] // N

{{t -> -2.68179}, {t -> -1. - 1.68179 I}, {t -> -1. +
1.68179 I}, {t -> 0.681793}}

The other method to simplify the equation either by hand or using Simplify in a way that eliminates the source of numerical instability:

p := (px + t vx)^4 + (py + t vy)^4 == 1
r := {px -> 0.5, py -> 0.5, vx -> 0.5, vy -> 0.5}

Solve[Simplify[p] /. r]

{{t -> -2.68179}, {t -> -1. - 1.68179 I}, {t -> -1. +
1.68179 I}, {t -> 0.681793}}

Finally, although NSolve is better than Solve in dealing with numerical instability, I wonder why I thought it gives the correct answer in this case:

NSolve[p,t]/.r
{{t->-1.-1.05367*10^-8 I},{t->-1.+1.05367*10^-8 I},{t->-1.-1.05367*10^-8 I},{t->-1.+1.05367*10^-8 I}}

\$Version

"9.0 for Mac OS X x86 (64-bit) (January 24, 2013)"

Are you using a different version of Mathematica?

Andrzej Kozlowski

On 27 Apr 2013, at 05:09, christopher arthur <chris.arthur1 at gmail.com> wrote:

> Hello,
>
> I've discovered that Solve[] gives me the wrong answer for some
> polynomial equations.  For example, consider the following equation,
> which should have exactly one positive, real answer for t.
>
> p:=(px + t vx)^4 + (py + t vy)^4==1
> r:={px->0.5,py->0.5,vx->0.5,vy->0.5}
> NSolve[p/.r,t]
>
> NSolve gives the right answers if I substitute for px,py,vx and vy
> before solving.  On the other hand, if I use Solve[] this way:
>
> Solve[p,t]/.r
>
> I get a different answer, and it's not correct.
> Does Solve[] just malfunction with quartic polynomials or is there
> something else happening?
>
> Chris
>
> mathematica 5.2
>
> Solve[p]
>

```

• References: