Mathematica帮助使用While和Module命令

时间:2011-04-05 01:36:18

标签: loops wolfram-mathematica

此等式是否适用于所有序列f[n]

f[n_] :=  Module[{x = intial value, y = 0, i = 0},

            While[i++ < n, {x, y} = {y, equation}]; y]

具体来说,我正在查看具有初始条件6*n*f[n]=f[n-1]+n!的等式f[0] = 7。但是,我想要一般的解决方案,以便我可以将它应用于其他方程式。而且,我想使用ModuleWhile

谢谢你。

2 个答案:

答案 0 :(得分:7)

实现重复序列的最简洁和最常见的方法是使用memoization定义f,“记住”因为效率而计算的术语:

f[0] = 7
f[n_Integer?Positive] := f[n] = (f[n - 1] + n!)/(6 n)

然后:

In[29]:= Table[f[n], {n, 0, 6}]

Out[29]= {7, 4/3, 5/18, 113/324, 7889/7776, 941009/233280, 168902609/8398080}

如果您不需要自行编制重复计划,也可以使用RecurrenceTable直接生成字词,而无需定义f

In[30]:= RecurrenceTable[{a[0] == 7, 6 n a[n] == a[n - 1] + n!}, a, {n, 6}]

Out[30]= {7, 4/3, 5/18, 113/324, 7889/7776, 941009/233280, 168902609/8398080}

答案 1 :(得分:1)

所以你想要计算序列:

f(n) = (f(n-1) + n!) / (6 * n)

实现它的一种方法是:

f[n_] := Module[{values},
       values = Table[0, {n}];
       values[[1]] = 7;
       Do[values[[i]] = (values[[i-1]] + (i-1)!) / (6 * (i-1)), {i, 2, n}]
       values];

或等效地:

f[n_] := Module[{values, i = 2},
       values = Table[0, {n}];
       values[[1]] = 7;
       While[i <= n, values[[i]] = (values[[i-1]] + (i-1)!) / (6 * (i-1)); i++];
       values];

虽然有更有效的方法。

我忘记了Bock和Module的差异,但它们非常相似。