rco*_*yer 3 wolfram-mathematica
我有一个线性递归问题,其中下一个元素不仅仅依赖于先前的值,例如Fibonacci序列.计算第n 个元素的一种方法是通过函数调用来定义它,例如
Fibonacci[0] = 0; Fibonacci[1] = 1;
Fibonacci[n_Integer?Positive] := Fibonacci[n] + Fibonacci[n - 1]
Run Code Online (Sandbox Code Playgroud)
而对于我正在使用的序列,这正是我所做的.(定义是在一个内部,Module所以我不污染Global`.)但是,我将使用2 10 - 2 13点,所以我担心额外的开销,当我只需要最后一个术语,没有现有要素 我想用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]]}
Run Code Online (Sandbox Code Playgroud)
我有一些东西可以做到这一点,但我在保存之前关闭了笔记本.所以,如果我自己重写它,我会发布它.
编辑:至于我为什么不使用RSolve或MatrixPower解决这个问题.我的具体问题是我正在执行n点Pade近似,以分析方式继续我只知道虚轴上的一定数量的点{z i } 的函数.创建近似值的一部分是生成一组系数,a i,这是另一个递归关系,然后被输入到最终关系中
A[n+1]== A[n] + (z - z[[n]]) a[[n+1]] A[n-1]
Run Code Online (Sandbox Code Playgroud)
这是不服从任何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}
Run Code Online (Sandbox Code Playgroud)
编辑:如果您的重复定义是由f[m, n]不喜欢评估非数字m和n 的函数定义的,那么您可以使用条件:
In[2]:= f[m_, n_] /; IntegerQ[m] && IntegerQ[n] := m + n
Run Code Online (Sandbox Code Playgroud)
重复表的用法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}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
657 次 |
| 最近记录: |