多个嵌套for循环

时间:2013-06-26 20:01:33

标签: wolfram-mathematica

我在Mathematica中编程,我正在尝试避免多个for循环。

令n为给定整数,f为取n元组的函数。给定绑定k,我正在寻找一种有效的方法来遍历所有n元组,其中每个条目的范围从-k到k。 (我会将n元组插入f。)

我尝试了Mathematica的函数Tuples [Range [-k,k],n],除了我经常希望n大约是8,10或甚至15,甚至k小到2,(我想要k)要至少4或5)内存将耗尽试图保持(2k + 1)^ n元组。

我最初使用n for循环,它确实有效。现在我想改变n,我不能手动进入并为每个n插入代码。

感谢您提供任何帮助和建议!

2 个答案:

答案 0 :(得分:0)

这是一种以编程方式构建嵌套循环的方法:

ftup[tup_] := Print[tup]
n = 2
k = 1
Do @@ Join[{Unevaluated[ftup[Array[ a, n]]]}, 
      Table[ { a[i], -k, k } , {i, n }]]

这表明我们正在复制内置元组:

ftup[tup_] := Sow[tup];
n = 6;
k = 3;
Last@Last@Reap[ Do @@ 
 Join[{Unevaluated[ftup[Array[ a, n]]]},Table[ { a[i], -k, k } , {i, n }]]  ]
    ==  Tuples[ Range[-k, k] , {n}]

答案 1 :(得分:0)

我认为你只需要一个循环。这是为你打印所有必要元组的那个:

With[{k = 2, n = 3}, Do[Print[IntegerDigits[i, 2 k + 1, n] - k], {i, 0, (2 k + 1)^n - 1}]];