[Date Index]
[Thread Index]
[Author Index]
Re: Matrices as operators
*To*: mathgroup at smc.vnet.net
*Subject*: [mg123201] Re: Matrices as operators
*From*: Ray Koopman <koopman at sfu.ca>
*Date*: Sat, 26 Nov 2011 05:08:04 -0500 (EST)
*Delivered-to*: l-mathgroup@mail-archive0.wolfram.com
*References*: <jaal4e$12d$1@smc.vnet.net> <jafu4b$ro7$1@smc.vnet.net> <janol1$aqb$1@smc.vnet.net>
This is simpler. Does it do what you want?
Note that 'mat' can be a ragged array.
Mapping at {-1} preserves its shape, whatever it may be.
In[1]:= op[mat_,t_] := Map[#@t&, mat, {-1}]
In[2]:= op[ { {Sin, Cos}, Tan, whatever }, t ]
Out[2]= { {Sin[t], Cos[t]}, Tan[t], whatever[t] }
On Nov 25, 1:54 am, Chris Young <cy56 at comcast.net> wrote:
> 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 =CE=B8 :
>
> op[mat_, =CE=B8_] := unflatten[
> Through[Flatten[mat][=CE=B8]], Dimensions[mat]
> ]
>
> In[536]:=
>
> op[( {
> {Cos, -Sin},
> {Sin, Cos}
> } ), =CE=B8]
>
> Out[536]=
>
> {{Cos[=CE=B8], (-Sin)[=CE=B8]}, {Sin[=CE=B8], Cos[=CE=B8]}}
Prev by Date:
**Re: Using Equal with Real Numbers**
Next by Date:
**Re: Forcing Certain Algebraic Forms With FullSimplify**
Previous by thread:
**Re: Matrices as operators**
Next by thread:
**Re: Matrices as operators**
| |