1
$\begingroup$

I have a very similar function to that which a solution was provided by kguler, but am unsure as to how to adapt the solution that was given there. That post can be seen here. The adaptation is only slight but I will explain it fully below.

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)*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)*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)]

The main difference to the similar previous post is the factor in front of the exponential. 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)) - 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.

The solution of this should only be a variation of the solution that was provided by kguler here, but I can't get it to work at the moment. Thanks for your help.

$\endgroup$
1
$\begingroup$

You need a minor modification of the answer in the linked Q/A:

ClearAll[eF2]
eF2[z_: y] := Module[{j = 1, p = Partition[#, 2]}, 
   First[(z[Length@p] - p[[-1, 1]]) Exp[Total[(Subtract[##] 2 z[j++] + {# - #2}^2) & @@@ p]]]] &

Examples:

ClearAll[a, b, c, d, e, f]
eF2[][{a, b, c, d}]
(* E^((a-b)^2+(c-d)^2+2 (a-b) y[1]+2 (c-d) y[2]) (-c+y[2]) *)
eF2[][{a, b, c, d, e, f}]
(* E^((a-b)^2+(c-d)^2+(e-f)^2+2 (a-b) y[1]+2 (c-d) y[2]+2 (e-f) y[3]) (-e+y[3]) *)
$\endgroup$
  • $\begingroup$ Thanks kguler, this works just fine - I also understand how the functions works now! For future reference, if I have a similar but slightly different question, is there any way I can ask it other than to start a new post? Namely, could I have asked this question on the linked Q/A and brought it to your attention? $\endgroup$ – Jas Mar 2 '15 at 13:42
  • $\begingroup$ @Jas, you can use comments to an answer to ask closely related questions. The answerer is notified about comments on his/her post. $\endgroup$ – kglr Mar 2 '15 at 13:56

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.