# Get results of solve

Given

var("a b")
solve([a+b==5,a-b==1],[a, b])
[[a == 3, b == 2]]


is there a neat way to actually get a and b assigned to 3 and 2?

Obviously this is a simplified equation.

Also sometimes one gets a == 3 and other times a = 3 why is that?

It would be good if the 'neat way' would work for both cases.

Thanks, Rob.

edit retag close merge delete

Sort by » oldest newest most voted

You can use the solution_dict=True option:

sage: solve([a+b==5,a-b==1],[a, b], solution_dict=True)
[{b: 2, a: 3}]


Here, you get a list of solutions, each solution is a dictionary. You get the first solution (here the only one) with:

sage: solve([a+b==5,a-b==1],[a, b], solution_dict=True)[0]
{b: 2, a: 3}


And it values as:

sage: solve([a+b==5,a-b==1],[a, b], solution_dict=True)[0][a]
3
sage: solve([a+b==5,a-b==1],[a, b], solution_dict=True)[0][b]
2


So, you just have to do:

sage: a = solve([a+b==5,a-b==1],[a, b], solution_dict=True)[0][a]


Also sometimes one gets a == 3 and other times a = 3 why is that?

Are you sure about that ? Could you please provide a way to reproduce, since this is not expected ?

more

Sorry I am unfamiliar with this forum I posted as an answer by mistake.

( 2019-10-02 20:30:48 +0200 )edit

The number of equals is just an artefact of print/show

var("a b")

show(solve([a+b-5,a-b-1],[a, b])) print(solve([a+b-5,a-b-1],[a, b]))

[[a=3,b=2] [ [a == 3, b == 2] ]

( 2019-10-03 00:35:03 +0200 )edit

Thanks, I have now worked out how to do this and I will try the ictionary tip soon.

( 2019-10-03 13:56:33 +0200 )edit

My session does not paste very well but at the bottom is the solution I want to parse into A, B etc. I hope you will see what I am trying to do, and you will also see the single '='.

# ratfr2ser rational fraction to power series á la Euler Archive June 2005
def ratfr2ser(ratfr, num_terms):
var("A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z")
lets = [A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z]
rnt = range(num_terms)
ser = [lets[i] * x^i for i in rnt]
ser = sum(ser)  # converts from list to symbolic
show(ser)
ratfr_num = ratfr.numerator()
ratfr_den = ratfr.denominator()
eqn = (ser*ratfr_den - ratfr_num).expand().collect(x)
show(eqn)
cfs = [eqn.coefficient(x, n=p) for p in rnt]
show(cfs)
sol = [solve(ec, ec.variables()) for ec in cfs]
show(sol)
for i in rnt:
sol = solve(cfs[i], cfs[i].variables())
# sage_eval(str(sol[0]))
# show(A)
ratfr = (1-x)/(1-x-2*x^2)
ratfr.show()
ratfr2ser(ratfr, 4)

more