Question: How to solve some polynomial equation over the domain of STRICTLY positive real numbers numerically?

In certain tasks, I need to find all accurate positive (not just nonnegative) roots that exist of some multivariate polynomials like: 

nsd := 16*a*b*c*(9 + a^2 + b^2 + c^2)*(b*c + a*(b + c) + 3*(a + b + c)) - (3 + a + b + c)^2*(a*b + 3*c)*(3*b + a*c)*(3*a + b*c): # assume((a, b, c) >~ 0);

According to fsolve/details, for one general equation, the fsolve command only computes "a single real root", so it is inadequate to tackle this question. But if I use the solve command with floating-point values, the computation cannot finish in ten minutes instead! (Maybe a longer time will suffice, yet this is rather unacceptable.) 

restart;

"Digits+=Digits:"

#assume((a, b, c) >~ 0);
nsd := 16*a*b*c*(a^2 + b^2 + c^2 + 9)*(a*(b + c) + 3*(a + b + c) + b*c) - (a + b + c + 3)^2*(a*b + 3*c)*(a*c + 3*b)*(b*c + 3*a):

fsolve({`~`[`>`](a, b, c, ` $`, 0), nsd = 0}, fulldigits)

Error, (in fsolve) expecting an equation or set or list of equations, but received inequalities {16*a*b*c*(a^2+b^2+c^2+9)*(a*(b+c)+3*a+3*b+3*c+b*c)-(a+b+c+3)^2*(a*b+3*c)*(a*c+3*b)*(b*c+3*a) = 0, 0 < a, 0 < b, 0 < c}

 

fsolve([`$`(nsd = 0, 3)], fulldigits, {`~`[`=`](a, b, c, ` $`, 0 .. infinity)}, avoid = {{a = 0}, {b = 0}, {c = 0}})eval(nsd, %)

{a = 3.0000000005817604971, b = 3.0000000004676996798, c = 3.0000000004610312655}

(1)

timelimit(0.6e3, RealDomain[solve]([`~`[`>`](a, b, c, ` $`, 0), nsd = 0.], allsolutions))

Error, (in gcd/gcdchrem1) time expired

 

timelimit(0.6e3, `assuming`([solve(nsd = 0., useassumptions, allsolutions)], [`~`[`>`](a, b, c, ` $`, 0)]))

Error, (in modp1/DistDeg) time expired

 

""(* However, there are (at least) five positive solutions to 'nsd = 0'. *)" map2(eval,nsd,[{a=1,b=1,c=1},{a=3,b=3,c=3},{a=3,b=3,c=9},{a=3,b=9,c=3},{a=9,b=3,c=3}])"

[0, 0, 0, 0, 0]

(2)

time()

11127.031

(3)

NULL


Download solve_numerically.mws

Is there any workaround to obtain those (finitely many) positive solutions completely?

Please Wait...