Ask Your Question
1

Missing solutions when using solve

asked 2025-12-17 14:45:34 +0100

nvcleemp gravatar image

I have a set of equations which I tried to solve. The function solve gives me 4 solutions all of which have s5=0. However, when manually solving them, I had already found some solutions by setting s1 and s3 to 0. If I explicitly substitute a value for s5, and then use solve again, I now suddenly get two different solutions.

What I'm mainly after is an answer to the following:

  • What causes this behaviour?
  • Is there a way to know whether solve has found all solutions?
  • Is there a way for solve to find these six solutions in one go? (e.g. by tweaking the parameters or equations?)

Code:

var("s3 s5 s1 s6")
eqs = [
    8*s3^2 - 16*s3*s5 + 18*s5^2 - 1 == 0,
    48*s1^2 - 36*s1*s5 + 18*s5^2 - 1 == 0,
    1/25*sqrt(5)*(40*sqrt(5)*s3^2 + 5*sqrt(5)*s6^2 + 10*sqrt(3)*sqrt(2)*s3 - 10*(sqrt(5)*sqrt(3)*s3 + sqrt(2))*s6 - 3*sqrt(5)) == 0,
    9600*s1^2*s3^2*s5^2 + 600*(9*s1^2 + 6*s1*s3 + s3^2)*s5^4 - 4800*(3*s1^2*s3 + s1*s3^2)*s5^3 == 0,
    80/9*s3^4 + 40/9*(4*sqrt(5)*sqrt(3)*sqrt(2)*s3^3 + 15*s3^4 + 8*s3^2)*s5^2 + 200/9*(s3^4 - 4*s3^3*s5 + 4*s3^2*s5^2)*s6^2 - 80/9*(sqrt(5)*sqrt(3)*sqrt(2)*s3^4 + 4*s3^3)*s5 - 80/9*(sqrt(5)*sqrt(2)*s3^4 + 2*(5*sqrt(3)*s3^3 + 2*sqrt(5)*sqrt(2)*s3^2)*s5^2 - (5*sqrt(3)*s3^4 + 4*sqrt(5)*sqrt(2)*s3^3)*s5)*s6 == 0]
print("Solve for 4 vars")
print(solve(eqs, [s3, s5, s1, s6]))
print("Set one var and solve for other")
print(solve([eq.subs(s5=sqrt(2)/6) for eq in eqs], [s3, s1, s6]))

Output:

Solve for 4 vars
[
[s3 == -1/4*sqrt(2), s5 == 0, s1 == -1/12*sqrt(3), s6 == 1/5*sqrt(10)],
[s3 == -1/4*sqrt(2), s5 == 0, s1 == 1/12*sqrt(3), s6 == 1/5*sqrt(10)],
[s3 == 1/4*sqrt(2), s5 == 0, s1 == -1/12*sqrt(3), s6 == 1/5*sqrt(10)],
[s3 == 1/4*sqrt(2), s5 == 0, s1 == 1/12*sqrt(3), s6 == 1/5*sqrt(10)]
]
Set one var and solve for other
[
[s1 == 0, s3 == 0, s6 == 1/5*sqrt(5)*sqrt(2) - 1],
[s1 == 0, s3 == 0, s6 == 1/5*sqrt(5)*sqrt(2) + 1]
]
edit retag flag offensive close merge delete

1 Answer

Sort by ยป oldest newest most voted
1

answered 2025-12-18 18:31:28 +0100

Max Alekseyev gravatar image

solve function generally works as a black box with no guaranteed result. Hence, it's not surprising that it may miss some solutions.

For polynomial equations like in your example, it is advisable to use polynomial ideal framework, where the method.variety() is guaranteed to compute all solutions for a given ideal of dimension zero. Here is a rewrite of your example in that framework:

R.<s3, s5, s1, s6> = AA[]
eqs = [
    8*s3^2 - 16*s3*s5 + 18*s5^2 - 1,
    48*s1^2 - 36*s1*s5 + 18*s5^2 - 1,
    1/25*sqrt(5)*(40*sqrt(5)*s3^2 + 5*sqrt(5)*s6^2 + 10*sqrt(3)*sqrt(2)*s3 - 10*(sqrt(5)*sqrt(3)*s3 + sqrt(2))*s6 - 3*sqrt(5)),
    9600*s1^2*s3^2*s5^2 + 600*(9*s1^2 + 6*s1*s3 + s3^2)*s5^4 - 4800*(3*s1^2*s3 + s1*s3^2)*s5^3,
    80/9*s3^4 + 40/9*(4*sqrt(5)*sqrt(3)*sqrt(2)*s3^3 + 15*s3^4 + 8*s3^2)*s5^2 + 200/9*(s3^4 - 4*s3^3*s5 + 4*s3^2*s5^2)*s6^2 - 80/9*(sqrt(5)*sqrt(3)*sqrt(2)*s3^4 + 4*s3^3)*s5 - 80/9*(sqrt(5)*sqrt(2)*s3^4 + 2*(5*sqrt(3)*s3^3 + 2*sqrt(5)*sqrt(2)*s3^2)*s5^2 - (5*sqrt(3)*s3^4 + 4*sqrt(5)*sqrt(2)*s3^3)*s5)*s6]

J = R.ideal(eqs)

for sol in J.variety():
    print({x:v.radical_expression() for x,v in sol.items()})

which prints:

{s6: sqrt(2/5) - 1, s1: 0, s5: -1/6*sqrt(2), s3: 0}
{s6: sqrt(2/5) - 1, s1: 0, s5: 1/6*sqrt(2), s3: 0}
{s6: sqrt(2/5) + 1, s1: 0, s5: -1/6*sqrt(2), s3: 0}
{s6: sqrt(2/5) + 1, s1: 0, s5: 1/6*sqrt(2), s3: 0}
{s6: sqrt(2/5), s1: -1/4*sqrt(1/3), s5: 0, s3: -1/2*sqrt(1/2)}
{s6: sqrt(2/5), s1: -1/4*sqrt(1/3), s5: 0, s3: 1/2*sqrt(1/2)}
{s6: sqrt(2/5), s1: 1/4*sqrt(1/3), s5: 0, s3: -1/2*sqrt(1/2)}
{s6: sqrt(2/5), s1: 1/4*sqrt(1/3), s5: 0, s3: 1/2*sqrt(1/2)}
edit flag offensive delete link more

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

Stats

Asked: 2025-12-17 14:38:16 +0100

Seen: 19 times

Last updated: yesterday