Ask Your Question
1

arithmetic with matrices of formal functions

asked 2013-08-19 08:31:38 -0500

Mark gravatar image

If I have two plain formal functions, like

sage: var('q k')
sage: function('u')
sage: function('v')

it seems I can always get more 'involved' formal functions, like the following h(k,q), by symbolic operations

sage: h(k,q)=u(k)*v(q)
sage: h(17,sin(k))
u(17)*v(sin(k))       # OK.

My naive hope was, that this would straightforwardly apply also to matrix construction from formal functions, like so

sage: B(k,q) = matrix([[u(k),v(q)],[v(q),u(k)]])
# but
sage: B(17,sin(q))
[u(k) v(q)]
[v(q) u(k)]       # :(

So, B(k,q) does not substitute the variables. After some attempts, it seems that this is a valid way to construct a callable symbolic matrix from formal functions

sage: B=matrix(CallableSymbolicExpressionRing((k,q)),[[u(k),v(q)],[v(q),u(k)]])
# at least
sage: B(x^2,cos(q))
[   u(x^2) v(cos(q))]
[v(cos(q))    u(x^2)]        # OK.

My 1st question is, if there is not a 'less cryptic' way to construct B from u and v?

My 2nd question concerns doing matrix arithmetic with B. If I try to do something similar to that for the plain formal function arithmetic for h(k,q) with my formal matrix function B it 'does not work'. Eg.:

sage: H(k,q)=B(k,q)*B(q,q)
sage: H(sin(17),pi)
[   u(k)*u(q) + v(q)^2 u(k)*v(q) + u(q)*v(q)]
[u(k)*v(q) + u(q)*v(q)    u(k)*u(q) + v(q)^2]  # :(

I.e., again, upon matrix multiplication, the object B(k,q)*B(q,q) seems to not substitute the arguments into the formal functions anymore. However, if I do

sage: H=matrix(CallableSymbolicExpressionRing((k,q)),B(k,q)*B(q,q))

Then

sage: H(sin(17),pi)
[    u(pi)*u(sin(17)) + v(pi)^2 u(pi)*v(pi) + u(sin(17))*v(pi)]
[u(pi)*v(pi) + u(sin(17))*v(pi)     u(pi)*u(sin(17)) + v(pi)^2]    # OK.

But it seems awkward if one would have to do matrix arithmetic like that. So, how does one do proper matrix operations with matrices made from formal functions?

edit retag flag offensive close merge delete

1 answer

Sort by » oldest newest most voted
1

answered 2013-08-23 20:58:41 -0500

nbruin gravatar image

The problem arises from the fact that matrices with symbolic expressions are not "symbolic expressions" themselves:

 sage: B = matrix([[u(k),v(q)],[v(q),u(k)]])
 sage: type(B)
 sage.matrix.matrix_symbolic_dense.Matrix_symbolic_dense
 sage: type(u)
 sage.symbolic.function_factory.NewSymbolicFunction
 sage: type(u(q))
 sage.symbolic.expression.Expression

and hence, trying to turn it into a CallableSymbolicExpression by itself fails. Possibly the easiest thing is to just live with B. You can still substitute values, as long as you're explicit about the substitutions:

sage: B(k=17,q=sin(q))
[    u(17) v(sin(q))]
[v(sin(q))     u(17)]

The nice thing is that you can do matrix algebra with these:

sage: H=B(k=k,q=q)*B(k=q,q=q)
sage: H
[   u(k)*u(q) + v(q)^2 u(k)*v(q) + u(q)*v(q)]
[u(k)*v(q) + u(q)*v(q)    u(k)*u(q) + v(q)^2]
sage: H(k=sin(17),q=pi)
[    u(pi)*u(sin(17)) + v(pi)^2 u(pi)*v(pi) + u(sin(17))*v(pi)]
[u(pi)*v(pi) + u(sin(17))*v(pi)     u(pi)*u(sin(17)) + v(pi)^2]

Presently, "callable" symbolic expressions and "symbolic" matrices are two extensions built on top of symbolic expressions and they don't mix very well.

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

Stats

Asked: 2013-08-19 08:31:38 -0500

Seen: 102 times

Last updated: Aug 23 '13