The following is an edit of this post, for which a working solution was provided by John McGee. I have a different function and am not sure how to adapt the solution for it:

I want to construct a function that accepts multiple arguments, but where the number of arguments can change according to the length of a list that I insert as the set of arguments. For example, I have a table which has as elements the following lists:

{{1,2,3,4},{1,2,3,4,5,6},{1,2,3,4,5,6,7,8}, ...}

Note that the first list within the table has a length of 4, with progressive lists having an extra length of 2 compared to its previous. I have created the following function which works for the first list in the table:

f[{a,b,c,d}]:= (y[2] - c)*(y[2] - d)*Exp[2y[1](a - b) + (a^2 - b^2)+ 2y[2](c - d) + (c^2 - d^2)]

Similarly the function for the second list in the table should be:

f[{a,b,c,d,e,f}]:= (y[3] - e)*(y[3] - f)*Exp[2y[1](a - b) + (a^2 - b^2)+ 2y[2](c - d) + (c^2 - d^2) + 2y[3](e - f) + (e^2 - f^2)]

There is a pattern which obeys the following:

  1. The coefficient in front of the exponential is always (y[n]- (element 1 of nth pair))*(y[n]- (element 2 of nth pair)) - where n is the number of the nth pair of elements in the list - i.e. for 3 pairs n would be 3 etc.
  2. In the exponent, the argument of y is the number of the pair being considered and the terms within the parenthesis is similarly the first element of each pair minus the second element of each pair.

I want to create a table that has as elements the result of the function. So the first element of such a table will be the evaluation to the above. The second element of the table should be the evaluation of the function also written explicitly above and so on.

How can I create the general function that accepts a varying number of arguments? I will need to loop over this function to assess it for the different lists in the table above.

Thanks for your help.

  • $\begingroup$ I think that if you want to form an arbitrary function of different variables, you'll have to write each explicitly. If however you have sum general form (such as Total, then you can use functions that apply to arbitrary lists. $\endgroup$ Feb 20 '15 at 17:36
  • $\begingroup$ This has been answered in the following post. $\endgroup$
    – Jas
    Feb 23 '15 at 14:30

You could try

efunc[t_] := Exp@Total@((#[[2]]^2 - #1[[1]]^2) & /@ Partition[t, 2]);

Where t is a list with an even number of elements.

  • $\begingroup$ Thanks John, this works for my case of even number of elements. What would I have to do if there were odd number of elements? $\endgroup$
    – Jas
    Feb 20 '15 at 17:49

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.