MathGroup Archive 2004

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

Search the Archive

New User - Programming

  • To: mathgroup at smc.vnet.net
  • Subject: [mg52507] New User - Programming
  • From: deanwilliams at mac.com (Dean Williams)
  • Date: Tue, 30 Nov 2004 05:24:13 -0500 (EST)
  • Sender: owner-wri-mathgroup at wolfram.com

I am a new user who is well and truly stuck. Any help would be greatly
appreciated.

I have two lists, a and b, that when compared, will produce a third
list of signals. This third list is then summed to get a cumulative
total of the signals.

The rules are fairly simple. If a = b, the signal is 0, if a > b, the
signal is 1 and finally, if a < b, then the signal is ?1.


a={5,6,3,2,8,2};
b={5,4,1,3,9,4};
c={a,b};

p=0;

Fun[t_,u_]/;t==u :=0;
Fun[t_,u_]/;t>u:=1;
Fun[t_,u_]/;t<u:=-1;

signal=Map[ (Fun[#[[1]],#[[2]]])&,Transpose[c]];

c4={signal};

cumTotal=Flatten[Map[p+={Last[#]} &,Transpose[c4]]];


TableForm[{a,b,signal,total},TableDirections->Row,
  TableHeadings->{{"a","b","Signal","Cumm.Total"},None},
    TableSpacing->{4,4,4,4,4}]


a	b	Signal		Cum.Total

5	5	0		0

6	4	1		1

3	1	1		2

2	3	-1		1

8	9	-1		0

2	4	-1		-1


  

I want to modify slightly how the signal is generated. The rules are
the same except that if the cumulative total is already 1 or -1, then
no new signal is generated unless the new signal would make the
cumulative total move back towards zero.

Ideally, I am looking to modify my code, so it produces, signal =
{0,1,0,-1,-1,0} and cumTotal = {0,1,1,0,-1,-1}.The maximum size of the
cumulative total need not be 1, but rather any value that is chosen as
a limit.

This has been causing me a great deal of grief and I would greatly
welcome any help and suggestions. Given my lack of experience, I am
sure that there is a more efficient way to tackle this type of
problem, especially as  I am dealing with many large lists.

Regards

Dean Williams


  • Prev by Date: Re: pair sums applied to trignometry sums
  • Previous by thread: pair functions applied to Zeta function in two ways