Mathematica中的递归函数

时间:2011-10-22 21:47:36

标签: function recursion wolfram-mathematica

考虑一下:

dist = Parallelize[
   Table[RandomVariate[NormalDistribution[]], {100000}]];

我怎样才能创建一个递归函数:

Subscript[d, 1] = dist[[1]]

Subscript[d, 2] = .95 Subscript[d, 1] + dist[[2]]

Subscript[d, 3] = .95 Subscript[d, 2] + dist[[3]]

这样做直到Subscript[d, 100000]

谢谢。

令人惊讶的是,我第一次碰到这个。

2 个答案:

答案 0 :(得分:6)

考虑一下:

dist = RandomVariate[NormalDistribution[], {100000}];

dist2 = Rest@FoldList[0.95 # + #2 &, 0, dist];

Subscript[d, x_] := dist2[[x]]

我通常不会这样使用下标;我不知道这可能会破坏什么。如果您描述了更多问题,我可能会有其他建议。

答案 1 :(得分:2)

如何使用

之类的东西
In[1]:= dist = ParallelTable[RandomVariate[NormalDistribution[]], {100000}];//Timing

Out[1]= {0.15601, Null}

In[2]:= folded = FoldList[.95 #1 + #2 &, First@dist, Rest@dist]; // Timing

Out[2]= {0.056003, Null}

您可以与

进行比较
In[3]:= Subscript[d, 1] = dist[[1]];
        Do[Subscript[d, n] = 0.95 Subscript[d, n - 1] + dist[[n]], 
           {n, 2, Length@dist}] // Timing

Out[3]= {1.09607, Null}

In[4]:= Table[Subscript[d, n], {n, 1, Length@dist}] === folded

Out[4]= True
相关问题