我有一个功能列表:
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} ]
有什么想法吗?谢谢!
答案 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我对这个问题的解释。
我希望这有助于回答你实际问的问题。
弗雷德克林格纳