MathGroup Archive 2012

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

Search the Archive

Re: Separating square roots

  • To: mathgroup at smc.vnet.net
  • Subject: [mg127251] Re: Separating square roots
  • From: Peter Pein <petsie at dordos.net>
  • Date: Wed, 11 Jul 2012 02:20:43 -0400 (EDT)
  • Delivered-to: l-mathgroup@mail-archive0.wolfram.com
  • Delivered-to: mathgroup-newout@smc.vnet.net
  • Delivered-to: mathgroup-newsend@smc.vnet.net
  • References: <jtgbrm$49j$1@smc.vnet.net>

Am 10.07.2012 06:42, schrieb rhartley.anu at gmail.com:
> I have an expression which is a sum of terms, some monomials
> and others involving square roots, such as
> A = 3  + 5 x^2 + 7 x + Sqrt[5+x] + 7 x Sqrt[5+x] (but much more complicated).
> I want to solve this, which involves separating terms with the square root
> from those that do not have a square root, then squaring each.
>
> I can not work out how to separate out those terms that have the square
> root.  I do not want to hard code, such as nosqrt = A[[1]] + A[[2]] , etc.
> Can anyone help?
>
> r
>
>

This will work if all square roots are of the form Sqrt[a +/- b] (I 
think). And you'll get additional solutions which do not solve A==0.

Try:

A = 3 + 5*x^2 + 7*x + Sqrt[5 + x] + 7*x*Sqrt[5 + x];
sep = Apply[Plus,
   With[{sel = FreeQ[#1, _^(1/2)] & },
     Split[SortBy[List @@ #1, sel], sel[#1] == sel[#2] & ]
   ],
{1}] & ;
tmp = Function[x, Evaluate[Expand[Subtract @@ (sep[A]^2)]]]
soln = Select[
   ({x -> #1} & ) /@ Table[Root[tmp, k], {k, Exponent[tmp[x], x]}],
   10^(-8) > Abs[N[A /. #1]] &
]
soln === Solve[A == 0, x, Quartics -> False]
nx0 = Chop[N[x /. soln]]

==>
Function[x,-4+29 x+180 x^2-21 x^3-25 x^4]
{{x->Root[4-29 #1-180 #1^2+21 #1^3+25 #1^4&,1]},
  {x->Root[4-29 #1-180 #1^2+21 #1^3+25 #1^4&,2]}}
True
{-3.06206,-0.246324}

Peter

P.S.: to visualize additional roots, enter with the results from above:

Plot[Evaluate[(Sign[#1]*Log[1 + Abs[#1]] & )[{A, tmp[x]}]], 
Evaluate[Prepend[(x /. NSolve[tmp[x] == 0, x, Reals])[[{1, -1}]] + 
{-0.1, 0.1},
     x]], Frame -> True, Axes -> {True, False}, AxesStyle -> Lighter[Gray],
   Epilog -> {Red, PointSize[1/100], Point[Thread[{Cases[nx0, _Real], 
0}]]}, PlotRange -> All]




  • Prev by Date: Re: Sending an interrupt to the frontend?
  • Next by Date: Re: Separating square roots
  • Previous by thread: Re: Separating square roots
  • Next by thread: How to write code for Plotting Polar Coordinates in r and theta ?