gpt4 book ai didi

wolfram-mathematica - 使用Fold计算依赖多个先前值的线性递推结果

转载 作者:行者123 更新时间:2023-12-01 07:21:46 25 4
gpt4 key购买 nike

我有一个线性递归问题,其中下一个元素不仅仅依赖于先验值,例如斐波那契数列。计算第 n 个元素的一种方法是通过函数调用来定义它,例如

Fibonacci[0] = 0; Fibonacci[1] = 1;
Fibonacci[n_Integer?Positive] := Fibonacci[n] + Fibonacci[n - 1]

对于我正在处理的序列,这正是我所做的。 (定义在 Module 内,所以我不会污染 Global` 。)但是,我将使用它 210 - 213 点,所以当我只需要最后一项,没有任何先前的元素。我想用 Fold这样做,但是 Fold仅通过直接在先的结果,这意味着它对一般线性递归问题没有直接用处。

我想要一对函数来代替 FoldFoldList将指定数量的先验序列元素传递给函数,即
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]]}

我有这样做的东西,但我在保存之前关闭了笔记本。所以,如果我自己重写它,我会发布它。

编辑 :至于为什么我不使用 RSolveMatrixPower来解决这个问题。我的具体问题是我正在执行 n-point Pade approximant分析继续一个函数,我只知道在虚轴 {zi} 上的一组点。创建近似值的一部分是生成一组系数 ai,这是另一个递推关系,然后将其输入到最终关系中
A[n+1]== A[n] + (z - z[[n]]) a[[n+1]] A[n-1]

这不适合 RSolve也不是 MatrixPower ,至少我能看到。

最佳答案

RecurrenceTable 可以为您执行此任务吗?

根据之前的两个值查找重复中的第 1000 项:

In[1]:= RecurrenceTable[{a[n] == a[n - 1] + a[n - 2], 
a[1] == a[2] == 1}, a,
{n, {1000}}]

Out[1]= {4346655768693745643568852767504062580256466051737178040248172\
9089536555417949051890403879840079255169295922593080322634775209689623\
2398733224711616429964409065331879382989696499285160037044761377951668\
49228875}

编辑: 如果您的循环是由不喜欢对非数字 m 和 n 进行评估的函数 f[m, n] 定义的,那么您可以使用 Condition :
In[2]:= f[m_, n_] /; IntegerQ[m] && IntegerQ[n] := m + n
f 的循环表:
In[3]:= RecurrenceTable[{a[n] == f[a[n - 1], a[n - 2]], 
a[1] == a[2] == 1}, a, {n, {1000}}]

Out[3]= {4346655768693745643568852767504062580256466051737178040248172\
9089536555417949051890403879840079255169295922593080322634775209689623\
2398733224711616429964409065331879382989696499285160037044761377951668\
49228875}

关于wolfram-mathematica - 使用Fold计算依赖多个先前值的线性递推结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5294376/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com