MathGroup Archive 2011

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Matrices as operators

  • To: mathgroup at smc.vnet.net
  • Subject: [mg123225] Re: Matrices as operators
  • From: Ray Koopman <koopman at sfu.ca>
  • Date: Sun, 27 Nov 2011 04:14:07 -0500 (EST)
  • Delivered-to: l-mathgroup@mail-archive0.wolfram.com

----- Christopher Young <cy56 at comcast.net> wrote:
> 
> On Nov 25, 2011, at 6:17 PM, Ray Koopman wrote:
> 
>> 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] }
> 
> 
> Checking out the Help for Map, I found that you could put tests
> in with an If[ ] that was sort of acting as a pure function.
> I think the following will always do what I want.
> Should be much faster than using While loops, too.
> 
> op2[arr_, t_] :=
>  Map[
>   If[! (NumericQ[#] || StringQ[#]),
>     #[t],
>     #
>     ] &,
>   arr,
>   {-1}
>   ]
> 
> In[38]:= op2[{{Sin, 3 E, Cos}, Tan, {Cos, Cos[Cos], 1}, "string"}, t]
> 
> Out[38]= {{Sin[t], 3 E, Cos[t]}, Tan[t], {Cos[t], Cos[Cos[t]], 1}, "string"}

The If will be faster if you swap its last two arguments
and don't complement the Or:

op[arr_, t_] := Map[If[NumericQ@# || StringQ@#, #, #@t]&, arr, {-1}]



  • Prev by Date: Re: How to solve or approximate a first order differential equation ?
  • Next by Date: Re: Multiple operations in a "Do" expression
  • Previous by thread: Re: Matrices as operators
  • Next by thread: Re: Matrices as operators