# Converting strings into expressions

Hey everyone, This is probably pretty straightforward, but I couldn't find any straightforward answers with google searching. I'm looking for a function that works in the same way as python's str() and float() functions, but turns variables (especially strings) into sage's different classes of variables, like expressions. For example, if I have string variable: expression = "x1^2*x2*x3*4" and x1, x2, and x3 are already declared as variables, how can I turn that variable into a sage expression so it will work with things like the coefficient() function? Thanks!

edit retag close merge delete

Sort by » oldest newest most voted

To convert a string expression to any parent X in Sage, you could do X(expression).

Thus, to convert the expression to Sage's symbolic ring, use SR(expression).

Here is how it would work with your example.

sage: x1, x2, x3 = SR.var('x1 x2 x3')
sage: expression = "x1^2*x2*x3*4"
sage: ex = SR(expression)
sage: ex
4*x1^2*x2*x3


If you prefer to work with a polynomial ring:

sage: P.<x1, x2, x3> = QQ[]
sage: f = P(expression)
sage: f
4*x1^2*x2*x3

more

is it possible to convert a string of inequality to a sage expression?

Well, but this does no work for the following case. I want to define an equation from a string, by changing the value of gammaWStr='9.81' by a string that is a number.

gammaW - gammaWStr == 0


If I follow the suggested construction like

exprString = 'gammaW - ' + gammaWStr + ' == 0'
eq0 = SR(exprString)


I get the Error Message

TypeError: Malformed expression: gammaW - 9.81 == !!!  0


In other words, and referring to the first question, How about an expression like expression = "x1^2*x2*x3*4==0"?