【问题标题】:Mathematica HELP with While and Module commandMathematica HELP with While 和 Module 命令
【发布时间】:2011-04-05 01:36:18
【问题描述】:

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

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

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

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

谢谢。

【问题讨论】:

  • 是的,确实如此。我的意思是不,绝对不是。也就是说,你问的是什么?我无法用我知道的任何编程语言(至少在美好的一天包括 Mathematica)中理解上述内容。至少:什么是“方程”,n 是否保证为非负值?
  • 当然可以。从语法上讲,这实际上并没有错。我向你保证,它不会做你想做的事。
  • @Daniel 我的意思是“公式”,是的,n > 0
  • @Mike 我正在尝试使用上面显示的方法实现这个序列.....'6*n*f[n]=f[n-1]+n!'对于 f[0] = 7 和 n>0 .....
  • @Sunday,有了这些附加信息,我已经编辑了你的问题。此外,如果您写完整的句子并且不缩短单词,例如thnx,但宫缩很好。这样做会偏离公认的英语语法,这可能会使非母语人士难以阅读。

标签: loops wolfram-mathematica


【解决方案1】:

实现循环序列的最简洁和最常见的方法是使用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}

【讨论】:

    【解决方案2】:

    所以你要计算序列:

    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 的区别,但它们非常相似。

    【讨论】:

    • 但是我正在尝试使用模块,而命令会导致它们花费更少的时间来计算
    • @Sunday:Do 循环通常比 While 和 For 循环快。检查我对等效 While 循环的回答。
    • Shudnt 输出是这个,而 urs 给出两个公式给出其他的东西 {4/3, 5/18, 113/324, 7889/7776, 941009/233280, 168902609/8398080, \ 42495225809/352719360 , 14264139821009/16930529280, \ 6158014604947409/914248581120, 3323783265773203409/54854914867200}
    • 这样可以吗------> fib[n_] := Module[{x = 7, y = 0, i = 0}, While[i++
    • @Sunday,请问您有什么信息可以证明ModuleWhile 最快,因为Michael Pilat's 解决方案会非常快?
    猜你喜欢
    • 2011-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-24
    相关资源
    最近更新 更多