Solve for all values of a variable
Output: ([a == (c*x - b + d)/x], )
I need: [a==c, b==d] for all x.
If you want to match coefficients of like terms, you could do something like
from collections import defaultdict def solve_matched_polynomials(eq, coeff_vars): # get the non-coefficient variables vv = sorted(set(eq.variables()).difference(coeff_vars)) # make sure they're polynomials assert all(eq.lhs().is_polynomial(v) and eq.rhs().is_polynomial(v) for v in vv) d = defaultdict(Integer) # loop over each term in the equation for term in (eq.lhs().operands())+(-(eq.rhs())).operands(): # get the degrees of the variables vsig = tuple(term.degree(v) for v in vv) # find the non-variable part d[vsig] += term/(prod(v**vs for v,vs in zip(vv, vsig))) # get solutions with free variables return solns = solve(d.values(), coeff_vars)
which will return the standard free variables form
sage: solve_matched_polynomials(5*a*x^2*y+b*x+y == 4*c*x**2*y-d*y, [a,b,c,d]) [[a == 4/5*r66, b == 0, c == r66, d == -1]]
and then if you really wanted to eliminate the free variables, you could.
Asked: 2011-01-22 19:10:25 -0500
Seen: 249 times
Last updated: Jan 23 '11