Re: Array reference help please
- To: mathgroup at smc.vnet.net
- Subject: [mg73316] Re: Array reference help please
- From: Jean-Marc Gulliet <jeanmarc.gulliet at gmail.com>
- Date: Sun, 11 Feb 2007 01:18:15 -0500 (EST)
- Organization: The Open University, Milton Keynes, UK
- References: <eqjiid$7te$1@smc.vnet.net>
rob wrote:
> I've managed to get this code working but I'm stumped on a
> good way to refer to the entries in the data when plotting.
> The only thing I can get to work is to refer to the first of
> each pair as Part[data[[i]],1] and the second as
> Part[data[[i]],2].
>
> And more humiliating, the second one I have to spell out
> twice. I tried all kinds of substitutions but failed. I know
> you gurus here know how to make this code look better and
> run more quickly. Thanks for your time.
>
>
>
> α=100;(* decay parameter*)
>
> (* first parameter is pulse amplitude, second is time of
> occurrence - later to follow Poisson *)
>
> data=Table[Random[],{40},{2}];
>
> li=Length[data];
>
> Plot[Sum[
> Part[data[[i]],1] UnitStep[t-Part[data[[i]],2]]
> Exp[-α (t-Part[data[[i]],2])], {i,li}
> ]
> ,{t,0,1}]
>
Hi Rob,
Here is one possible answer:
In[1]:=
α = 100;
data = Table[Random[], {1000}, {2}];
li = Length[data];
sum1 =
Sum[data[[i]][[1]]*UnitStep[t - data[[i]][[2]]]*
Exp[(-α)*(t - data[[i]][[2]])], {i, li}];
sum2 = Plus @@ (First[#1]*UnitStep[t - Last[#1]]*
Exp[(-α)*(t - Last[#1])] & ) /@ data;
sum2 == sum1
Timing[Plot[Sum[data[[i]][[1]]*UnitStep[
t - data[[i]][[2]]]*
Exp[(-α)*(t - data[[i]][[2]])], {i, li}],
{t, 0, 1}]; ]
Timing[f = Plus @@ (First[#1]*UnitStep[t - Last[#1]]*
Exp[(-α)*(t - Last[#1])] & ) /@ data;
Plot[f /. t -> t, {t, 0, 1}]; ]
Out[6]=
True
Out[7]=
{16.094 Second,Null}
Out[8]=
{6.062 Second,Null}
Regards,
Jean-Marc