Re: simple iteration question

*To*: mathgroup at smc.vnet.net*Subject*: [mg89824] Re: simple iteration question*From*: Jean-Marc Gulliet <jeanmarc.gulliet at gmail.com>*Date*: Sat, 21 Jun 2008 05:32:59 -0400 (EDT)*Organization*: The Open University, Milton Keynes, UK*References*: <g3g017$l06$1@smc.vnet.net>

Francisco Gutierrez wrote: > I have a list of the form list={{3,2,1},{5,6,1},{10,5,1}}, of any length > I have a vector, say vector={1,2,3} > I want to make the following iteration. Take the first component of the = > list, make the dot product of it and the vector, and substract a number (sa= > y 50). If the result is bigger or equal than zero, stop and return the vect= > or. If it is less than zero, then change the vector in the followig way: ve= > ctor+list[[2]], and repeat the test. > Iterate until the result is equal or bigger than zero, or until the list en= > ds. > I haven't found a neat way of doing this. Any help is welcome Assuming I have correctly understood what you are looking for and since you did not show what you have already tried, I have chosen an approach that blends procedural and functional programming paradigms. Definitely not the best peace of code I ever written, but it has the merit to exemplify the versatility of Mathematica. (Note that the code below has not been extensively tested and that your specifications are sometimes ambiguous.) In[1]:= f[vec_, lst_, n_] := Module[{v = vec, test}, test[v1_, v2_] = v1.v2 - n >= 0; If[Select[lst, test[v, #] &, 1] =!= {}, Return[v]]; For[i = 2, i <= Length[list], i++, v += lst[[i]]; If[Select[lst, test[v, #] &, 1] =!= {}, Return[v]]; ]; "No vectors were found." ] list = {{3, 2, 1}, {5, 6, 1}, {10, 5, 1}}; vector = {1, 2, 3}; f[vector, list, 50] f[vector, list, 1000] Out[4]= {6, 8, 4} Out[5]= "No vectors were found." Regards, -- Jean-Marc