Date: Mar 23, 2014 4:59 AM
Author: Bob Hanlon
Subject: Re: Problems with Solve

sol = z /. Solve[z + 5 (z^2 - 1) + 1 z^3 == 1, z];

sol // FullSimplify // N

{0.925423, -4.47735, -1.44807}

sol // RootApproximant // N

{0.925423, -4.47735, -1.44807}

sol // N // Chop

{0.925423, -4.47735, -1.44807}

z /. {Reduce[z + 5 (z^2 - 1) + 1 z^3 == 1, z] //

ToRules} // N

{-4.47735, -1.44807, 0.925423}

Use Piecewise rather than If

b[s_] = Piecewise[{{Erfc[-x], s < 0.5}},

Erfc[-x] + Erfc[y] - Erfc[z]];

b[.7]

Erfc[-x] + Erfc[y] - Erfc[z]

b[s] /. s -> .7

Erfc[-x] + Erfc[y] - Erfc[z]

Bob Hanlon

On Sat, Mar 22, 2014 at 12:06 AM, Samuel Mark Young <sy81@sussex.ac.uk>wrote:

>

> Hello everyone,

> I'm trying to use the solutions of Solve from solving a cubic equation -

> however, it keeps returning complex answers when there are real solutions.

> For example:

>

> Solve[z + 5 (z^2 - 1) + 1 z^3 == 1, z]

>

> This equation has 3 real solutions. However, the answers returned when I

> ask mathematica for a decimal answer are complex (which I need to do later

> on when an integration needs solving numerically):

> {{z -> 0.925423 + 0. I}, {z -> -4.47735 +

> 2.22045*10^-16 I}, {z -> -1.44807 - 4.44089*10^-16 I}}

>

> I'm guessing this is to do with the finite precision that is used in the

> calculations as the imaginary components are very small, but am unsure how

> to deal with them and they shouldn't be there. Any suggestions?

>

>

> The second problem I am having is that I need to solve for s in a function

> B[s] == 10^-5, where B is some (complicated) function of s.

>

> The form of the function depends on s - and this is handled by If[]

> commands in the function B. For example, the s dependance might be:

>

> B[s]:=If[s<0.5,Erfc[-x],Erfc[-x]+Erfc[y]-Erfc[z]]

>

> B[s] is a smooth function of s.

>

> The problem seems to arise because, before it has found a solution for s,

> it can't decide which form of the function to use - and so just returns an

> error message (I've tried using Solve, NSolve, and FindRoot with different

> methods). However, since I'm only looking for a numerical solution it is

> easily possible to solve this manually using trial and improvement - which

> seems to be something that Mathematica should be able to do? But I can't

> figure out how.

>

> Please feel free to contact me directly at sy81@sussex.ac.uk with advice.

> Thank you in advance for any help!

>

> Regards,

> Sam

>

>