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