将不同的函数(从列表中取出)应用到For循环中

时间:2012-06-28 13:18:56

标签: list wolfram-mathematica

我有一个功能列表: DisUFuncList = Table[x^2, {n, 1, M}];

以及参数列表y。我的目标是获得总和 DisUFuncList[[i]] [ y[[i]] ]

以下是代码:

    DisUFuncList = Table[x^2, {n, 1, M}];
Sum2=0;For[i = 1, i <= Length[y], i++, 
Sum2 = Sum2 + Function[x, DisUFuncList[[i]] ] [ y[[i]] ]    ]; 

这也行不通:

Apply[Function[DisUFuncList[[2]]], {2} ]

有什么想法吗?谢谢!

2 个答案:

答案 0 :(得分:3)

例如

DisUFuncList[x_] := Table[x^n, {n, 2, 6}]
y = Range[2, 6];
Sum[DisUFuncList[y[[i]]][[i]], {i, Length[y]}] == Sum[i^i, {i, 2, 6}]
(*
-> True
*)

请记住:Looping in Mathematica is generally considered a bad practice.

修改

关于您的评论,有很多方法可以做到这一点。 这是一个:

M = 5;
DisUFuncList = Table[x^n, {n, 1, M}]
y = Range[M]
Sum[DisUFuncList[[i]] /. x -> y[[i]], {i, Length@y}]
(*
 -> 3413  (==Sum[i^i, {i, 5}])
*)

答案 1 :(得分:1)

这里存在很多问题,其中一些问题妨碍了(无论如何)理解你所追求的目标。

首先,x ^ 2不是Mathematica中的函数。功能应该看起来像#^ 2&amp;或者你已经定义了它们。在一个可能陷入奥术和类似特技的Mathematica形式的讨论中,我将通过将我的函数列表定义为:

来尝试保持透明度。
    funcList = {Sin, Cos,Tan}

其次,您似乎想要在参数列表中对该函数列表进行线程化,

    argList = {a1, a2, a3} say

逐个部分,最后,如果我正确理解了这个问题,你需要一个能够生成结果的表达式

    Sin[a1] + Cos[a2] + Tan[a3]

您可以使用表格

获取MapThread以迈出第一步
    MapThread[#1@#2&, {funcList, argList}]

然后总和是

    Plus@@%

Niftier,但可能更不透明:

    Inner[#1@#2&,funcList,argList]

QED我对这个问题的解释。

我希望这有助于回答你实际问的问题。

弗雷德克林格纳