Reputation: 5029
I would like to have linear algebra operations to be evaluated with symbols instead of numerically. For example, having the following matrix:
A = matrix(QQ,[
[ 2, 1, 2, -6],
[-1, 2, 1, 7],
[ 3, -1, -3, -1],
[ 1, 5, 6, 0],
[ 2, 2, 1, 1]
])
I would like to multiply for a vector with symbolic variables as follows:
t = 'real'
var('x1')
assume(x1, t)
var('x2')
assume(x2, t)
var('x3')
assume(x3, t)
var('x4')
assume(x4, t)
xx = vector(QQ, [x1, x2, x3, x4])
A * xx.transpose()
Unfortunately building the xx
vector is unsuccessful, producing this error message:
TypeError: Cannot evaluate symbolic expression to a numeric value.
This does not work, so how can I use symbols in Sage's linear algebra framework?
Upvotes: 1
Views: 1293
Reputation: 3453
One solution would be to work with entries in a polynomial ring.
sage: R.<x1,x2,x3,x4> = PolynomialRing(QQ)
sage: R
Multivariate Polynomial Ring in x1, x2, x3, x4 over Rational Field
Then define your vector with coordinates in R
.
sage: xx = vector(R,[x1,x2,x3,x4])
sage: A * xx
The result is another vector with entries in R
.
Another solution is to work in the symbolic ring SR
, as pointed out by @kcrisman on ask-sage.
Upvotes: 2