我使用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?所以我的意思是我希望smth像
(1-#1^2)^2 JacobiP[3-3,2,2,#1]&
(1-#1^2)^2 JacobiP[4-3,2,2,#1]&
...
谢谢! 安德鲁Bzikadze
答案 0 :(得分:0)
这是一个有趣的问题。以纯函数的形式,它抵制替换,但可以在不使用For
更改Hold
循环结构的情况下完成。
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]&amp;
同样在这种情况下: -
g[i_] := i + 1 &
g[2]
2 + 1&amp;
这是因为Function
具有属性HoldAll
。请参阅此处的详细信息部分: