【问题标题】:Recursive definition of a vector向量的递归定义
【发布时间】:2013-05-06 13:28:56
【问题描述】:

我想使用 for 循环定义一个列表,我需要使用 n-iterate 的函数来完成它。 我有:

初始化

In[176]:  Subscript[y, 0] = {1, 2, 3}

Out[180]:  {1,2,3}

功能:

In[181]:  F[n_] := For[l = 1, l++, l <= 3, Subscript[y, n + 1][[l]] :=Subscript[y, n][[l]]+ n]

我调用函数

F[0]

我得到:

In[183]:   Subscript[y, 1]

Out[183]:  Subscript[0, 1]

我应该有{1,2,3}

有人知道为什么它不能正常工作吗?

【问题讨论】:

    标签: function recursion for-loop wolfram-mathematica iteration


    【解决方案1】:

    我无法重新创建您的错误,问题。

    我了解到您想将n 添加到您的向量中,其中n 是下标的编号。

    这是解决您的问题的另一种方法,避免循环和下标:

    Clear@y;
    y[0] = {1, 2, 3};
    y[n_Integer] : =y[n - 1] + n
    

    (因为PlusListable,您只需将n 添加到向量中,避免For

    然后调用它,例如

    y[0]
    {1,2,3}
    

    y[5]
    {16,17,18}
    

    或者,使用记忆,你可以定义y如下:

    y[n_Integer] := y[n] = y[n - 1] + n
    

    这将存储已经计算的值(在执行例如 y[5] 后检查 ?y)。如果y 发生变化,请不要忘记Clear y

    显然,对于这样的功能,您可能需要考虑:

    y[n_Integer] := y[0] + Total[Range[n]]
    

    【讨论】:

    • 是的,谢谢,你是对的。在这种情况下,它以您编写的其他方式运行良好,但这是我真正问题的简化案例,只是为了尝试理解我的错误。我的问题是创建数据集的连续分区,因此我需要计算每个子集的信息增益。这就是为什么我需要使用 for 循环将函数应用于列表的每个子集的原因。 stackoverflow.com/questions/16500401/…如果你愿意帮忙,那就太好了!
    • 你真的要使用Subscript吗?
    猜你喜欢
    • 1970-01-01
    • 2021-07-11
    • 2014-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多