2

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

让 n 是给定的整数和 fa 函数,它采用 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 插入代码。

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

4

2 回答 2

0

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

With[{k = 2, n = 3}, Do[Print[IntegerDigits[i, 2 k + 1, n] - k], {i, 0, (2 k + 1)^n - 1}]];
于 2013-06-30T15:41:07.483 回答
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}]
于 2013-06-26T21:08:02.370 回答