Constructor for symbolic expressions#
- sage.calculus.expr.symbolic_expression(x)[source]#
Create a symbolic expression or vector of symbolic expressions from x.
INPUT:
x
- an object
OUTPUT:
a symbolic expression.
EXAMPLES:
sage: a = symbolic_expression(3/2); a 3/2 sage: type(a) <class 'sage.symbolic.expression.Expression'> sage: R.<x> = QQ[]; type(x) <class 'sage.rings.polynomial.polynomial_rational_flint.Polynomial_rational_flint'> sage: a = symbolic_expression(2*x^2 + 3); a 2*x^2 + 3 sage: type(a) <class 'sage.symbolic.expression.Expression'> sage: from sage.structure.element import Expression sage: isinstance(a, Expression) True sage: a in SR True sage: a.parent() Symbolic Ring
>>> from sage.all import * >>> a = symbolic_expression(Integer(3)/Integer(2)); a 3/2 >>> type(a) <class 'sage.symbolic.expression.Expression'> >>> R = QQ['x']; (x,) = R._first_ngens(1); type(x) <class 'sage.rings.polynomial.polynomial_rational_flint.Polynomial_rational_flint'> >>> a = symbolic_expression(Integer(2)*x**Integer(2) + Integer(3)); a 2*x^2 + 3 >>> type(a) <class 'sage.symbolic.expression.Expression'> >>> from sage.structure.element import Expression >>> isinstance(a, Expression) True >>> a in SR True >>> a.parent() Symbolic Ring
Note that equations exist in the symbolic ring:
sage: # needs sage.schemes sage: E = EllipticCurve('15a'); E Elliptic Curve defined by y^2 + x*y + y = x^3 + x^2 - 10*x - 10 over Rational Field sage: symbolic_expression(E) x*y + y^2 + y == x^3 + x^2 - 10*x - 10 sage: symbolic_expression(E) in SR True
>>> from sage.all import * >>> # needs sage.schemes >>> E = EllipticCurve('15a'); E Elliptic Curve defined by y^2 + x*y + y = x^3 + x^2 - 10*x - 10 over Rational Field >>> symbolic_expression(E) x*y + y^2 + y == x^3 + x^2 - 10*x - 10 >>> symbolic_expression(E) in SR True
If
x
is a list or tuple, create a vector of symbolic expressions:sage: v = symbolic_expression([x,1]); v (x, 1) sage: v.base_ring() Symbolic Ring sage: v = symbolic_expression((x,1)); v (x, 1) sage: v.base_ring() Symbolic Ring sage: v = symbolic_expression((3,1)); v (3, 1) sage: v.base_ring() Symbolic Ring sage: E = EllipticCurve('15a'); E Elliptic Curve defined by y^2 + x*y + y = x^3 + x^2 - 10*x - 10 over Rational Field sage: v = symbolic_expression([E,E]); v (x*y + y^2 + y == x^3 + x^2 - 10*x - 10, x*y + y^2 + y == x^3 + x^2 - 10*x - 10) sage: v.base_ring() Symbolic Ring
>>> from sage.all import * >>> v = symbolic_expression([x,Integer(1)]); v (x, 1) >>> v.base_ring() Symbolic Ring >>> v = symbolic_expression((x,Integer(1))); v (x, 1) >>> v.base_ring() Symbolic Ring >>> v = symbolic_expression((Integer(3),Integer(1))); v (3, 1) >>> v.base_ring() Symbolic Ring >>> E = EllipticCurve('15a'); E Elliptic Curve defined by y^2 + x*y + y = x^3 + x^2 - 10*x - 10 over Rational Field >>> v = symbolic_expression([E,E]); v (x*y + y^2 + y == x^3 + x^2 - 10*x - 10, x*y + y^2 + y == x^3 + x^2 - 10*x - 10) >>> v.base_ring() Symbolic Ring
Likewise, if
x
is a vector, create a vector of symbolic expressions:sage: u = vector([1, 2, 3]) sage: v = symbolic_expression(u); v (1, 2, 3) sage: v.parent() Vector space of dimension 3 over Symbolic Ring
>>> from sage.all import * >>> u = vector([Integer(1), Integer(2), Integer(3)]) >>> v = symbolic_expression(u); v (1, 2, 3) >>> v.parent() Vector space of dimension 3 over Symbolic Ring
If
x
is a list or tuple of lists/tuples/vectors, create a matrix of symbolic expressions:sage: M = symbolic_expression([[1, x, x^2], (x, x^2, x^3), vector([x^2, x^3, x^4])]); M [ 1 x x^2] [ x x^2 x^3] [x^2 x^3 x^4] sage: M.parent() Full MatrixSpace of 3 by 3 dense matrices over Symbolic Ring
>>> from sage.all import * >>> M = symbolic_expression([[Integer(1), x, x**Integer(2)], (x, x**Integer(2), x**Integer(3)), vector([x**Integer(2), x**Integer(3), x**Integer(4)])]); M [ 1 x x^2] [ x x^2 x^3] [x^2 x^3 x^4] >>> M.parent() Full MatrixSpace of 3 by 3 dense matrices over Symbolic Ring
If
x
is a matrix, create a matrix of symbolic expressions:sage: A = matrix([[1, 2, 3], [4, 5, 6]]) sage: B = symbolic_expression(A); B [1 2 3] [4 5 6] sage: B.parent() Full MatrixSpace of 2 by 3 dense matrices over Symbolic Ring
>>> from sage.all import * >>> A = matrix([[Integer(1), Integer(2), Integer(3)], [Integer(4), Integer(5), Integer(6)]]) >>> B = symbolic_expression(A); B [1 2 3] [4 5 6] >>> B.parent() Full MatrixSpace of 2 by 3 dense matrices over Symbolic Ring
If
x
is a function, for example defined by alambda
expression, create a symbolic function:sage: f = symbolic_expression(lambda z: z^2 + 1); f z |--> z^2 + 1 sage: f.parent() Callable function ring with argument z sage: f(7) 50
>>> from sage.all import * >>> f = symbolic_expression(lambda z: z**Integer(2) + Integer(1)); f z |--> z^2 + 1 >>> f.parent() Callable function ring with argument z >>> f(Integer(7)) 50
If
x
is a list or tuple of functions, or ifx
is a function that returns a list or tuple, create a callable symbolic vector:sage: symbolic_expression([lambda mu, nu: mu^2 + nu^2, lambda mu, nu: mu^2 - nu^2]) (mu, nu) |--> (mu^2 + nu^2, mu^2 - nu^2) sage: f = symbolic_expression(lambda uwu: [1, uwu, uwu^2]); f uwu |--> (1, uwu, uwu^2) sage: f.parent() Vector space of dimension 3 over Callable function ring with argument uwu sage: f(5) (1, 5, 25) sage: f(5).parent() Vector space of dimension 3 over Symbolic Ring
>>> from sage.all import * >>> symbolic_expression([lambda mu, nu: mu**Integer(2) + nu**Integer(2), lambda mu, nu: mu**Integer(2) - nu**Integer(2)]) (mu, nu) |--> (mu^2 + nu^2, mu^2 - nu^2) >>> f = symbolic_expression(lambda uwu: [Integer(1), uwu, uwu**Integer(2)]); f uwu |--> (1, uwu, uwu^2) >>> f.parent() Vector space of dimension 3 over Callable function ring with argument uwu >>> f(Integer(5)) (1, 5, 25) >>> f(Integer(5)).parent() Vector space of dimension 3 over Symbolic Ring