Re: Alternative to defining 'operator' function?
- To: mathgroup at smc.vnet.net
- Subject: [mg47551] Re: Alternative to defining 'operator' function?
- From: Paul Abbott <paul at physics.uwa.edu.au>
- Date: Thu, 15 Apr 2004 05:02:17 -0400 (EDT)
- Organization: The University of Western Australia
- References: <c5leel$bit$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
In article <c5leel$bit$1 at smc.vnet.net>, "Owen, HL (Hywel)" <H.L.Owen at dl.ac.uk> wrote: > I often have programming problem where I'd like to calculate a set of dot > products, e.g. applying a list of square matrices {R1,R2,R3...} to a vector > v to obtain: > > {R1.v,R2.R1.v,R3.R2.R1.v,...} > > or other functions like that. Distribute works here: Distribute[{Subscript[R,1], Subscript[R,2], Subscript[R,3]} . v, List] > The method I've been using is to define an 'operator' function, e.g. > > DotOperator[M_] := Dot[M, #] & > > Then we have: > > In: DotOperator[R][v] > Out: R.v > > as wanted, so that we can define a ComposeList as > > In: Rest[ComposeList[DotOperator[#] & /@ {R1, R2, R3}, v]] > Out: {R1.v, R2.R1.v, R3.R2.R1.v} > > to obtain the result we want. > > Is there a simpler way than this that doesn't involve defining functions > like DotOperator? Here is one way. Define the action of Rn on v: Subscript[R, n_][v_] := Subscript[R, n] . v then use ComposeList: Rest[ComposeList[Subscript[R,1], Subscript[R,2], Subscript[R,3]}, v]] Cheers, Paul -- Paul Abbott Phone: +61 8 9380 2734 School of Physics, M013 Fax: +61 8 9380 1014 The University of Western Australia (CRICOS Provider No 00126G) 35 Stirling Highway Crawley WA 6009 mailto:paul at physics.uwa.edu.au AUSTRALIA http://physics.uwa.edu.au/~paul