       Re: Matrices as operators

• To: mathgroup at smc.vnet.net
• Subject: [mg123158] Re: Matrices as operators
• From: Chris Young <cy56 at comcast.net>
• Date: Fri, 25 Nov 2011 04:53:47 -0500 (EST)
• Delivered-to: l-mathgroup@mail-archive0.wolfram.com
• References: <jaal4e\$12d\$1@smc.vnet.net> <jafu4b\$ro7\$1@smc.vnet.net>

```On 2011-11-22 10:39:07 +0000, Ray Koopman said:

> If you're worried about redundant calculations when the matrices
> are bigger than 2 x 2 and the functions are more complicated than
> Sin and Cos, try something like
>
> R[t_] := {{#1,-#2},{#2,#1}}&[Cos@t,Sin@t]

> You could have the expression optimizer even further optimize that
>
> Experimental`OptimizeExpression[{{#1, -#2}, {#2, #1}} &[Cos@t, Sin@t]]
>
> (That is what happens in Compile)
>
> Oliver

These look useful for speeding up calculations, and also clarifying the
structure of matrices.

For what I was looking for though (applying a matrix of different
function names, such as "Sin" and "Cos", to the same parameter, such as
the angle theta) I think the following will work.

I got unflatten[ ] from the Help for Partition (in the Applications section).
I was hoping that Partition alone would work, but reconstructing the
original array is more complicated than I thought. Not sure exactly
what Fold[ ] is doing here. Would like to try running this through the
debugger.

At any rate, I think the op[ ] routine I made will apply any array
("tensors", not just rectangular matrices) to a parameter as an
operator.

Partition a flat list of elements into a multidimensional array with
specified dimensions.
(Take[{2, 3, 4, 5}, {-1, 2, -1} means take the elements from the last
through the second.)

unflatten[
list_,
{dims__?((IntegerQ[#] && Positive[#]) &)}] \
:=
Fold[
Partition, list, Take[{dims}, {-1, 2, -1}]
]  \
/;
(Length[list] === Times[dims])

This will apply matrix mat as an operator to the parameter Î¸ :

op[mat_, Î¸_] := unflatten[
Through[Flatten[mat][Î¸]], Dimensions[mat]
]

In:=

op[( {
{Cos, -Sin},
{Sin, Cos}
} ), Î¸]

Out=

{{Cos[Î¸], (-Sin)[Î¸]},  {Sin[Î¸], Cos[Î¸]}}

```

• Prev by Date: Re: Non trivial substitution in a very long output
• Next by Date: Re: Using Equal with Real Numbers
• Previous by thread: Re: Matrices as operators
• Next by thread: Re: Matrices as operators