# Sage solver : approximate solution

I have the simple following equation :

res = solve([1.00000000000000*x8 == 0.923879532511287,0.414213562373096*x8 == 0.382683432365089],x8,solution_dict=True)


However, the solver will return an empty solution because the value do not quite exactly match (there is a 1e-15 difference that is due to numerical errors of the 53 bits mantissa precision). Is there a way to ask the solver to get an approximate solution instead?

edit retag close merge delete

Sort by ยป oldest newest most voted

Your first equation is an approximate solution (the coefficient of x8 is indistinguishable from 1) .

It turns out that your two equations are not equivalent :

sage: var("x8")
x8
sage: Sys=[1.00000000000000*x8 == 0.923879532511287,0.414213562373096*x8 == 0.382683432365089]
sage: Sys[1].solve(x8)[0].rhs()-Sys[0].solve(x8)[0].rhs()
-9631419/1809844328933473637045
sage: (Sys[1].solve(x8)[0].rhs()-Sys[0].solve(x8)[0].rhs()).n()
-5.32168366418327e-15


And Sage is right in telling you that your system has no solution.

Workarounds :

• Obtain exact values for your systems' coefficients ;

• solve for one equation, use the second to estimate the error, and decide if you want to accept this as an approximation. ;

• treat your system as a system of redundant equations and search for the least-squares solution (left as an exercise for the reader...).

Note, by default, Sage (9.3.beta2) converts your equations' coefficients to rational approximations :

sage: Sys[0].solve(x8)[0].rhs()
15965419/17280845
sage: Sys[1].solve(x8)[0].rhs()
96759049255592/104731240221961


You can obtain floating-point solutions :

sage: (Sys[0].lhs()-Sys[0].rhs()).roots(ring=RR, multiplicities=False)
[0.923879532511287]
sage: (Sys[1].lhs()-Sys[1].rhs()).roots(ring=RR, multiplicities=False)
[0.923879532511283]


And it turns out that, even in the inexact ring RR, your equations are not equivalent.

more