метод действительно хорош.
я есть проблема линейного повторения, когда следующий элемент опирается не только на предыдущее значение, например последовательность Фибоначчи. Один метод расчета nго Элемент должен определить его с помощью вызова функции, например,
Fibonacci[0] = 0; Fibonacci[1] = 1;
Fibonacci[n_Integer?Positive] := Fibonacci[n] + Fibonacci[n - 1]
и для последовательности, с которой я работаю, это именно то, что я делаю. (Определение находится внутриModule
так что я не загрязняюGlobal`
.) Тем не менее, я собираюсь использовать это с 210 - 213 баллы, так что я обеспокоен дополнительными накладными расходами, когда мне просто нужен последний срок и ни один из предыдущих элементов. Я хотел бы использоватьFold
сделать это, ноFold
только передает непосредственно предшествующий результат, что означает, что он не является непосредственно полезным для общей задачи линейного повторения.
Я хотел бы заменить пару функцийFold
а такжеFoldList
которые передают определенное количество элементов предыдущей последовательности в функцию, т.е.
In[1] := MultiFoldList[f, {1,2}, {3,4,5}] (* for lack of a better name *)
Out[1]:= {1, 2, f[3,2,1], f[4,f[3,2,1],2], f[5,f[4,f[3,2,1],2],f[3,2,1]]}
У меня было кое-что, что сделало это, но я закрыл тетрадь перед сохранением. Так что, если я переписываю это самостоятельно, я выложу это.
редактировать: почему я не пользуюсьRSolve
или жеMatrixPower
чтобы решить это. Моя конкретная проблема - я выполняюN-точка Паде приближенная аналитически продолжить функцию, которую я знаю только в заданном количестве точек на мнимой оси, {zi}. Частью создания аппроксиманта является генерация набора коэффициентов,i, который является другим рекуррентным отношением, которое затем подается в окончательное отношение
A[n+1]== A[n] + (z - z[[n]]) a[[n+1]] A[n-1]
который не поддается ниRSolve
ниMatrixPower
По крайней мере, это я вижу.