Thanks to everyone for such nice illustrations. It will guide me for sure.
On 2 July 2013 02:56, David Winsemius <dwinsemius@comcast.net> wrote:
>
> With permission I offer this exchange. Rolf and I have different notions
> of what u %*% v should mean, but the arbiter is obviously the original
> poster:
>
> Begin forwarded message:
>
> > From: David Winsemius <dwinsemius@comcast.net>
> > Subject: Re: [R] functions and matrices
> > Date: July 1, 2013 6:21:09 PM PDT
> > To: Rolf Turner <rolf.turner@xtra.co.nz>
> >
> >
> > On Jul 1, 2013, at 5:09 PM, Rolf Turner wrote:
> >
> >> On 02/07/13 11:37, David Winsemius wrote:
> >>> On Jul 1, 2013, at 3:32 PM, Rolf Turner wrote:
> >>>
> >>>> Basically R does things *numerically* and what you want to
do really
> >>>> amounts to symbolic manipulation. Of course R could be
cajoled into
> >>>> doing it --- see fortune("Yoda") --- but
probably only with a great
> deal of
> >>>> effort and code-writing.
> >>>>
> >>>> OTOH you could quite easily write a function that would
calculate
> >>>> det(u%*%v)(x) for any given numerical value of x:
> >>>>
> >>>> foo <- function(a,b,x){
> >>>> a1 <- apply(a,c(1,2),function(m,x){m[[1]](x)},x=x)
> >>>> b1 <- apply(b,c(1,2),function(m,x){m[[1]](x)},x=x)
> >>>> det(a1%*%b1)
> >>>> }
> >>>>
> >>>> Then doing
> >>>>
> >>>> foo(u,v,2)
> >>> I would have thought that (u %*% v) would be:
> >>>
> >>> u[1,1]( v[1,1](x) ) + u[1,2]( v[2,1](x) ) u[1,1](
v[1,2](x) ) +
> u[1,2]( v[2,2](x) )
> >>> u[2,1]( v[1,1](x) ) + u[2,2]( v[2,1](x) ) u[2,1](
v[2,1](x) ) +
> u[2,2]( v[2,2](x) )
> >>>
> >>> (Crossing my fingers that I got the row and column conventions
correct
> for matrix multiplication.)
> >>>
> >> <SNIP>
> >>
> >> Not quite sure what you're getting at here. It looks to me
that you are
> >> calculating the *composition* of the functions rather than their
> *product*.
> >
> > Exactly. That is how I understood successive application of functions
> embedded in matrices . The symbol used in my differential topology course
> lo those 40 years ago was an open circle, but I assumed the OP wanted
> something along those lines to perform a composite mapping:
> >
> > compose <- function(u, v, x) matrix( c(
> > u[1,1][[1]]( v[1,1][[1]](x) ) + u[1,2][[1]]( v[2,1][[1]](x) ) ,
> > u[1,1][[1]]( v[1,2][[1]](x) ) + u[1,2][[1]]( v[2,2][[1]](x) ),
> > u[2,1][[1]]( v[1,1][[1]](x) ) + u[2,2][[1]]( v[2,1][[1]](x) ),
> > u[2,1][[1]]( v[2,1][[1]](x) ) + u[2,2][[1]]( v[2,2][[1]](x) ) ),
> 2,2,byrow=TRUE)
> >
> > compose(u,v,2)
> > [,1] [,2]
> > [1,] 75 1332
> > [2,] 5427 1680128
> >
> > (Noting that I may have reversed the roles of u and v.)
> >
> >>
> >> I.e. you are taking the (i,j)th entry of "u%*%v"
(evaluated at x) to be
> the
> >> sum over k of
> >>
> >> u[i,k](v[k,j](x))
> >>
> >> This is not what I understood the OP to want. I assumed he wanted
the
> >> product of the function values rather than the composition of the
> functions,
> >> i.e. that he wanted the (i,j)th entry to be the sum over k of
> >>
> >> u[i,k](x) * v[k,j](x)
> >>
> >> which is what my function provides. This seems to me to be the
most
> >> "reasonable" interpretation, but I could be wrong.
> >>
> >> BTW --- you cannot actually do u[i,k](x). E.g.
> >>
> >> u[1,2](2)
> >>
> >> gives "Error: attempt to apply non-function". One needs
to do
> u[1,2][[1]](2)
> >> (which gives 4, as it should).
> >
> > Yes. I was playing fast and loose with notation. I didn't think
the code
> would really run as offered.I was a bit surprise that this worked, but I
> suppose you bear credit (and blame?) for pushing my program closer to
> completion.
> >
> >> v[1,1][[1]]( u[1,1][[1]]( 2 ))
> > [1] 11
> >
> > Any problem with me copying this to the list?
> >
> >
> >>
> >> cheers,
> >>
> >> Rolf
> >
> > Best;
> >
> >
> > David Winsemius
> > Alameda, CA, USA
> >
>
> David Winsemius
> Alameda, CA, USA
>
>
[[alternative HTML version deleted]]