# Finding a root that makes this huge polynomial negative

I have the following polynomial.

P[y_] = Abs[(1 - (0. + 0.07746031519319982 I) y) (1 - (0. +
0.09713096490596462 I) y) (1 - (0. +
0.11290521136530342 I) y) (1 - (0. +
0.1543104523227209 I) y) (1 - (0. +
0.1643663550989435 I) y) (1 - (0. +
0.16548737406015293 I) y) (1 - (0. +
0.1881552825358055 I) y) (1 - (0. +
0.19197400546206703 I) y) (1 - (0. +
0.22342052082962607 I) y) (1 - (0. +
0.26298357988150745 I) y) (1 - (0. +
0.4139062323983639 I) y) (1 - (0. +
0.45635519944296904 I) y) (1 - (0. +
1.1299490429781665 I) y)]^2 -
3.937120617288008*^-14 Abs[(0. -
3.599575709269318*^10 y^750 + (0. +
4.1369578222829004*^11 I) y^751 +
2.0598989195696348*^12 y^752 - (0. +
5.812817063223797*^12 I) y^753 -
1.020659679238148*^13 y^754 + (0. +
1.151615734564845*^13 I) y^755 +
8.302837789701031*^12 y^756 - (0. +
3.6376383713469365*^12 I) y^757 -
8.169501684177294*^11 y^758 + (0. +
1.4155844385164032*^10 I) y^759 -
3.157306920812451*^10 y^760 + (0. +
3.236108245829668*^9 I) y^761 -
8.054207066661339*^8 y^762 + (0. +
7.948663505649126*^7 I) y^763 -
2.7306473070848003*^7 y^764 + (0. +
3.770534300184887*^6 I) y^765 -
17878.37393655826 y^766 + (0. +
8799.475929888991 I) y^767 -
519.5109976114682 y^768)/(y^435 ((0. +
5.898860617750132 I) y^63 +
10.44629168600992 y^64)^5)]^2


I want to know if it always evaluates to postive value for any possible root $$y$$ (Real). So I tried Solve[]

Solve[Abs[P[y]] < 0, y]


But it executes forever. Is there any way to confirm that this polynomial is always postive?

• I'm probably being pedantic, but you do mean "...for any possible input $y$ (Real)." right? A "root" would be a specific input value where the polynomial evaluates out to exactly zero by definition - and so your function wouldn't "evaluate to positive value" since it evaluates to precisely zero. Oct 20, 2022 at 19:41
• Yes sorry I have no idea why I said root Oct 21, 2022 at 7:58

Clear[p, y]

p[y_] :=
Abs[(1 - (0. + 0.07746031519319982 I) y) (1 - (0. +
0.09713096490596462 I) y) (1 - (0. +
0.11290521136530342 I) y) (1 - (0. +
0.1543104523227209 I) y) (1 - (0. +
0.1643663550989435 I) y) (1 - (0. +
0.16548737406015293 I) y) (1 - (0. +
0.1881552825358055 I) y) (1 - (0. +
0.19197400546206703 I) y) (1 - (0. +
0.22342052082962607 I) y) (1 - (0. +
0.26298357988150745 I) y) (1 - (0. +
0.4139062323983639 I) y) (1 - (0. +
0.45635519944296904 I) y) (1 - (0. +
1.1299490429781665 I) y)]^2 -
3.937120617288008*^-14 Abs[(0. -
3.599575709269318*^10 y^750 + (0. +
4.1369578222829004*^11 I) y^751 +
2.0598989195696348*^12 y^752 - (0. +
5.812817063223797*^12 I) y^753 -
1.020659679238148*^13 y^754 + (0. +
1.151615734564845*^13 I) y^755 +
8.302837789701031*^12 y^756 - (0. +
3.6376383713469365*^12 I) y^757 -
8.169501684177294*^11 y^758 + (0. +
1.4155844385164032*^10 I) y^759 -
3.157306920812451*^10 y^760 + (0. +
3.236108245829668*^9 I) y^761 -
8.054207066661339*^8 y^762 + (0. +
7.948663505649126*^7 I) y^763 -
2.7306473070848003*^7 y^764 + (0. +
3.770534300184887*^6 I) y^765 -
17878.37393655826 y^766 + (0. +
8799.475929888991 I) y^767 -
519.5109976114682 y^768)/(y^435 ((0. +
5.898860617750132 I) y^63 +
10.44629168600992 y^64)^5)]^2


Then check with Reduce

Reduce[ForAll[y, Element[y, Reals], p[y] > 0]]  (* False *)


Let's inspect what is going on

p[0.1] (* Indeterminate *)
Plot[p[y], {y, -1, 1}]


• What is the minimum number that is considered 0 and above which we get positive? Oct 20, 2022 at 16:06
• I don’t quite understand. Do you mind rephrasing ? Oct 20, 2022 at 22:48
• Yeah sure sorry I will try. The second answer to this post showed a number p(y) = -5.92568*10^-14 at y = 10^-2. If it happend that it was -5.92568*10^-19, would Reduce[ForAll[y, Element[y, Reals], p[y] >= 0]] give true or false? Oct 21, 2022 at 7:55
• Are you looking for something like FindRoot[p[y], {y, 0.4}]; (*{y -> 0.399272}*) p[y] /. %; (*4.94803*10^-10*) ? Oct 21, 2022 at 10:11

Obviously you can not calculate differences with such high exponents using machine precision. Therefore you must rationalize your coefficients . However, your coefficients have only a limited precision and the following could be wrong due to this. Anyway, having no other information I assume that your coefficients are exact.

P[y_] = Rationalize[
Abs[(1 - (0. + 0.07746031519319982 I) y) (1 - (0. +
0.09713096490596462 I) y) (1 - (0. +
0.11290521136530342 I) y) (1 - (0. +
0.1543104523227209 I) y) (1 - (0. +
0.1643663550989435 I) y) (1 - (0. +
0.16548737406015293 I) y) (1 - (0. +
0.1881552825358055 I) y) (1 - (0. +
0.19197400546206703 I) y) (1 - (0. +
0.22342052082962607 I) y) (1 - (0. +
0.26298357988150745 I) y) (1 - (0. +
0.4139062323983639 I) y) (1 - (0. +
0.45635519944296904 I) y) (1 - (0. +
1.1299490429781665 I) y)]^2 -
3.937120617288008*^-14 Abs[(0. -
3.599575709269318*^10 y^750 + (0. +
4.1369578222829004*^11 I) y^751 +
2.0598989195696348*^12 y^752 - (0. +
5.812817063223797*^12 I) y^753 -
1.020659679238148*^13 y^754 + (0. +
1.151615734564845*^13 I) y^755 +
8.302837789701031*^12 y^756 - (0. +
3.6376383713469365*^12 I) y^757 -
8.169501684177294*^11 y^758 + (0. +
1.4155844385164032*^10 I) y^759 -
3.157306920812451*^10 y^760 + (0. +
3.236108245829668*^9 I) y^761 -
8.054207066661339*^8 y^762 + (0. +
7.948663505649126*^7 I) y^763 -
2.7306473070848003*^7 y^764 + (0. +
3.770534300184887*^6 I) y^765 -
17878.37393655826 y^766 + (0. +
8799.475929888991 I) y^767 -
519.5109976114682 y^768)/(y^435 ((0. +
5.898860617750132 I) y^63 +
10.44629168600992 y^64)^5)]^2, 10^-20]


For y==0 this results in a divide by zero. However for y near zero this gives negative values. E.g.

P[10^-2] // N
(* -5.92568*10^-14 *)
`