Рекурсивная функция в Mathematica - PullRequest
2 голосов
/ 23 октября 2011

Рассмотрим:

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 ]

6 голосов
/ 23 октября 2011

Учтите это:

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

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

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

Я обычно не использую Subscript таким образом;Я не знаю, что может нарушить это.Если вы опишите больше вашей проблемы, у меня может быть альтернативное предложение.

2 голосов
/ 23 октября 2011

Как насчет использования чего-то вроде

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...