Wolfram Mathematica - " For"循环和纯函数

时间:2014-10-21 07:48:42

标签: function loops for-loop wolfram-mathematica

我使用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

1 个答案:

答案 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。请参阅此处的详细信息部分:

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