Ask Your Question

Multivariate symbolics

asked 2017-04-14 08:59:58 +0200

mforets gravatar image

updated 2017-04-14 09:31:54 +0200

Consider this piece of code:

sage: n=4    # dimension of state-space
sage: x = polygens(QQ, ['x'+str(i) for i in [1..n]]); x    # vector of state variables
(x1, x2, x3, x4)

There is a handy keyword with formal power series, the number of generators (num_gens), and it works like:

sage: PowerSeriesRing(QQ, 'x', num_gens=5)
Multivariate Power Series Ring in x0, x1, x2, x3, x4 over Rational Field

There is a kind of analogue with polynomials, but not keyworded:

sage: PolynomialRing(QQ, 'x', 5)
Multivariate Polynomial Ring in x0, x1, x2, x3, x4 over Rational Field

Is it possible to use any of these to define a vector of polynomial variables in the object x as the beginning (but without list comprehension)?

As a side note, i think the var constructor also lacks a vector form?

sage: var(['x'+str(i) for i in [1..n]])
(x1, x2, x3, x4)

This could be useful to simplify constructions as:

sage: A = matrix(SR, [['a'+str(i)+str(j) for j in [1..n]] for i in [1..n]]); A

[a11 a12 a13 a14]
[a21 a22 a23 a24]
[a31 a32 a33 a34]
[a41 a42 a43 a44]

In Matlab this is A = sym('a', n), but i didn't find a similar shortcut in Sage.

edit retag flag offensive close merge delete

1 Answer

Sort by ยป oldest newest most voted

answered 2017-04-14 10:11:49 +0200

nbruin gravatar image
sage: PolynomialRing(QQ, 'x', 5).gens()
(x0, x1, x2, x3, x4)

For your symbolic matrix, perhaps this is more to your liking?

sage: matrix(SR,4,4, lambda i,j: SR.symbol("a%s%s"%(i,j)))
[a00 a01 a02 a03]
[a10 a11 a12 a13]
[a20 a21 a22 a23]
[a30 a31 a32 a33]
edit flag offensive delete link more


yes, indeed gens answers my question! i had a closer look at polygens code, and seemingly a trivial change allows to do polygens(QQ, 'x', 4). this is #22809

mforets gravatar imagemforets ( 2017-04-14 11:38:56 +0200 )edit

for the symbolic vector/matrix, i would take your solution and embed it into calculus.var so that var('x', 4) and var('x', 4, 4) work and produce a vector/matrix respectively .. what do you think?

mforets gravatar imagemforets ( 2017-04-14 11:59:29 +0200 )edit

var(*args) already means the same thing as for a in args: var(a), so the signature is not available for different interpretation.

nbruin gravatar imagenbruin ( 2017-04-14 21:17:27 +0200 )edit

follow up in #22813 !

mforets gravatar imagemforets ( 2017-04-15 00:16:30 +0200 )edit

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: 2017-04-14 08:59:58 +0200

Seen: 419 times

Last updated: Apr 14 '17