Ask Your Question

Get results of solve

asked 2019-10-02 17:45:09 +0200

rb57cat gravatar image

updated 2020-08-07 13:01:17 +0200

slelievre gravatar image


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 flag offensive close merge delete

2 Answers

Sort by » oldest newest most voted

answered 2019-10-02 19:34:25 +0200

tmonteil gravatar image

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]
sage: solve([a+b==5,a-b==1],[a, b], solution_dict=True)[0][b]

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 ?

edit flag offensive delete link more


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

rb57cat gravatar imagerb57cat ( 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] ]

rb57cat gravatar imagerb57cat ( 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.

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

answered 2019-10-02 20:29:13 +0200

rb57cat gravatar image

updated 2020-08-07 13:00:35 +0200

slelievre gravatar image

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
    ratfr_num = ratfr.numerator()
    ratfr_den = ratfr.denominator()
    eqn = (ser*ratfr_den - ratfr_num).expand().collect(x)
    cfs = [eqn.coefficient(x, n=p) for p in rnt]
    sol = [solve(ec, ec.variables()) for ec in cfs]
    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)
ratfr2ser(ratfr, 4)
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

1 follower


Asked: 2019-10-02 17:45:09 +0200

Seen: 811 times

Last updated: Aug 07 '20