# How many solutions do you get from simultaneous polynomial equations?

I have the following four simultaneous polynomial equations

eqns = {4 a^2 k^2 (b^2 M1 M2 + I1 (M1 + M2) + I2 (M1 + M2)) ==
I1 I2 M1 M2 ω1^2 ω2^2,
4 c (a^2 + e^2) k (b^2 M1 M2 + I1 (M1 + M2) + I2 (M1 + M2)) ==
2 I1 I2 M1 M2 ζ2 ω1^2 ω2 +
2 I1 I2 M1 M2 ζ1 ω1 ω2^2,
2 (2 c^2 e^2 (b^2 M1 M2 + I1 (M1 + M2) + I2 (M1 + M2)) +
k (a^2 I2 M1 M2 + I1 ((a^2 + b^2) M1 M2 + I2 (M1 + M2)))) ==
I1 I2 M1 M2 ω1^2 +
4 I1 I2 M1 M2 ζ1 ζ2 ω1 ω2 +
I1 I2 M1 M2 ω2^2,
2 c (e^2 I2 M1 M2 + I1 ((b^2 + e^2) M1 M2 + I2 (M1 + M2))) ==
2 I1 I2 M1 M2 ζ1 ω1 +
2 I1 I2 M1 M2 ζ2 ω2};


The values of a, e, k and c are unknowns and I have values for the other parameters as follows

values = {M1 -> 4.8, M2 -> 2.1420000000000003, I1 -> 0.0090397,
I2 -> 0.0115032,
b -> 0.0275, ω1 -> 1212.851537626128, ω2 ->
1640.0348023828728, ζ1 -> 0.1848599246177704, ζ2 ->
0.11006812856373586};


I can use NSolve and table the results

solutions = NSolve[eqns /. values];
Style[TableForm[{a, e, k, c} /. solutions,
TableHeadings -> {Automatic, {"a", "e", "k", "c"}}], FontSize -> 8] I have 24 solutions most of them complex. How can I determine the number of solutions to expect? Can finding the number of solutions be generalised for other similar polynomial equations I will be solving? Is there a function to do this?

Thanks

• Have you seen this? – J. M. will be back soon Mar 14 '16 at 18:47
• For this particular example, two of your equations are linear in one unknown, so you can Eliminate[eqns , {c,k}]. The result is a twelfth order polynomial in only e ( 12 solutions ), and an equation quadratic in a , so 2x12->24 . (I ran eliminate on a numerical example to get that.. ) – george2079 Mar 14 '16 at 19:21
• @J.M. can you give the formula from that paper here? – george2079 Mar 14 '16 at 19:22
• @J.M. That looks like the Bezout bound. For many common families of examples it is too high. – Daniel Lichtblau Mar 14 '16 at 22:39
• An important question is "expect from what"? You have the number of solutions (assuming NSolve is correct). Are there parameters that you intend to vary? If so, what are the specifics? – Daniel Lichtblau Mar 14 '16 at 22:41

For generic values of the parameters, the (complex and real) solution count will indeed be 24. One can see this simply by using a random substitution. This is a general method, albeit probabilistic.

eqns = {4 a^2 k^2 (b^2 M1 M2 + I1 (M1 + M2) + I2 (M1 + M2)) ==
I1 I2 M1 M2 ω1^2 ω2^2,
4 c (a^2 + e^2) k (b^2 M1 M2 + I1 (M1 + M2) + I2 (M1 + M2)) ==
2 I1 I2 M1 M2 ζ2 ω1^2 ω2 +
2 I1 I2 M1 M2 ζ1 ω1 ω2^2,
2 (2 c^2 e^2 (b^2 M1 M2 + I1 (M1 + M2) + I2 (M1 + M2)) +
k (a^2 I2 M1 M2 + I1 ((a^2 + b^2) M1 M2 + I2 (M1 + M2)))) ==
I1 I2 M1 M2 ω1^2 +
4 I1 I2 M1 M2 ζ1 ζ2 ω1 ω2 +
I1 I2 M1 M2 ω2^2,
2 c (e^2 I2 M1 M2 + I1 ((b^2 + e^2) M1 M2 + I2 (M1 + M2))) ==
2 I1 I2 M1 M2 ζ1 ω1 +
2 I1 I2 M1 M2 ζ2 ω2};

values = {M1 -> 4.8, M2 -> 2.1420000000000003, I1 -> 0.0090397,
I2 -> 0.0115032,
b -> 0.0275, ω1 -> 1212.851537626128, ω2 ->
1640.0348023828728, ζ1 -> 0.1848599246177704, ζ2 ->
0.11006812856373586};


From this we isolate the parameters and replace the values with random ones (in case the specific given values put us on a piece of the complex discriminant variety).

params = values[[All, 1]];
SeedRandom;
randsubsts =

Timing[Length[NSolve[polys /. randsubsts]]]