【问题标题】:Wolfram Mathematica -- "For" Loop and Pure FunctionWolfram Mathematica -- "For" 循环和纯函数
【发布时间】:2014-10-21 07:48:42
【问题描述】:

我使用 Wolfram Mathematica。让我们设置一个自然数 n >= 3。我想定义 W[i]——纯函数。我会这样做:

For[i = 3, i <= n, i++, W[[i]] = (1 - #^2)^2 JacobiP[i - 3, 2, 2, #] &; Print[W[[i]]]]

我得到类似的东西:

(1-#1^2)^2 JacobiP[i-3,2,2,#1]&
(1-#1^2)^2 JacobiP[i-3,2,2,#1]&
(1-#1^2)^2 JacobiP[i-3,2,2,#1]&
...

如何强制 Wolfram 从循环的定义中理解我想要这个具体的 i?所以我的意思是我想要像

(1-#1^2)^2 JacobiP[3-3,2,2,#1]&
(1-#1^2)^2 JacobiP[4-3,2,2,#1]&
...

谢谢! 安德鲁·比齐卡泽

【问题讨论】:

    标签: function loops for-loop wolfram-mathematica


    【解决方案1】:

    这是一个有趣的问题。它以纯函数的形式抵抗替换,但可以在不使用 Hold 更改 For 循环结构的情况下完成。

    n = 5;
    For[i = 3, i <= n, i++,
     expr = (1 - #^2)^2 JacobiP[i - 3, 2, 2, #] &;
     frozen = Map[Hold, expr, 3];
     frozen[[1, 1, 2, 1, 1]] = i - 3;
     w[i] = frozen //. Hold[x_] :> x;
     Print[w[i]]]
    

    或者,没有零件规格:

    n = 5;
    For[i = 3, i <= n, i++,
     expr = (1 - #^2)^2 JacobiP[i - 3, 2, 2, #] &;
     frozen = Map[Hold, expr, 3];
     pos = Position[frozen, Hold[i - 3]];
     frozen[[Sequence @@ Append[First[pos], 1]]] = i - 3;
     w[i] = frozen //. Hold[x_] :> x;
     Print[w[i]]]
    
    w[4][3]
    

    576

    另一种形式更简单,但不能解决您的问题。

    f[i_] := (1 - #^2)^2 JacobiP[i - 3, 2, 2, #] &;
    
    f[4][3]
    

    576

    请注意,即使在这种形式下,参数也不会被评估,但替换效果很好,可以使用。

    f[4]
    

    (1 - #1^2)^2 JacobiP[4 - 3, 2, 2, #1] &

    同样在这种情况下:-

    g[i_] := i + 1 &
    g[2]
    

    2 + 1 &

    这是因为Function 具有属性HoldAll。请参阅此处的详细信息部分:

    http://reference.wolfram.com/language/ref/Function.html

    【讨论】:

    • 非常感谢!像魅力一样工作。我不知道这个选项。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多