Ask Your Question

solve with "excess" equations

asked 2013-04-15 02:54:19 -0500

andre gravatar image

why does the following work


but this


gives an empty solution?

Can "solve" be convinced to ignore unneccassary equations?

edit retag flag offensive close merge delete

1 answer

Sort by ยป oldest newest most voted

answered 2013-04-15 03:51:48 -0500

slelievre gravatar image

You could solve for a, b, c, d and then ignore c and d.

sage: a, b, c, d = var('a b c d')
sage: solns = solve([a+b-1,a-b,c+d],[a,b,c,d]); solns
[[a == (1/2), b == (1/2), c == -r1, d == r1]]
sage: [s[:2] for s in solns]
[[a == (1/2), b == (1/2)]]

Or you can tweak solve to only use the equations which involve the variables that you want to solve for.

sage: def smart_solve(eqns, vars):
....:     return solve([eqn for eqn in eqns if
....:                   any(v in eqn.variables() for v in vars)], vars)
sage: smart_solve([a+b-1,a-b,c+d],[a,b])
[[a == (1/2), b == (1/2)]]

I don't know what would be the pros and cons of having Sage's solve behave in this way (either by default or as an option).

edit flag offensive delete link more


Thank you, I kind of went the "smart_solve" way, it just meant yet another iteration of ifs and fors in my application which I'd have liked to avoid. I had expected "solve" to be a bit smarter by itself but perhaps there would be too many implications if you'd expect a full test for solvability. Perhaps an error would be better instead of an empty solution though.

andre gravatar imageandre ( 2013-04-15 05:02:48 -0500 )edit

Your Answer

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

Add Answer

Question Tools

1 follower


Asked: 2013-04-15 02:54:19 -0500

Seen: 117 times

Last updated: Apr 15 '13