gpt4 book ai didi

loops - 在 Mathematica : multiple outputs 中循环

转载 作者:行者123 更新时间:2023-12-02 06:07:18 29 4
gpt4 key购买 nike

我曾在 Mathematica 中研究过一个随机数生成器,但受到许多条件的抑制。现在我的代码如下所示:

list = RandomSample[Range[36], 7];
f := If[1 <= Count[Select[list, # <= 12 &], _Integer] <= 2,
If[Count[Select[list, # > 31 &], _Integer] >= 1,
If[Count[Select[list, Divisible[#, {2, 7}] &], _Integer] <= 3,
Sort[list], False], False], False]
While[f == False,
list = RandomSample[Range[36], 7];
If[list == f, f]];
f

它是这样构建的:

  1. 制作一个随机列表,其中包含 7 个整数,区间为 1-36
  2. f 定义了一些必须满足的条件:1-12 范围内至少有一个,最多有两个元素。至少有一个元素大于31。最多3个元素可以被2-7范围内的整数整除。
  3. 如果满足条件,则 f 等于列表,否则为 False。
  4. 接下来是“While”循环。如果 f 为 False,则生成一个新列表 i,并继续循环直到 f i 不再为 False。
  5. 调用存储在f中的结果。

现在的问题是:这只会产生一行输出。我有兴趣获得多个输出,例如5-10。我试图以某种方式使用 Table 命令来完成它,但问题是没有任何东西同时定义函数 f 和 while 循环。因此,通过在 f 上运行表,我多次只得到相同的结果。

关于如何在此处进行的任何输入?

最佳答案

我认为 f 定义中的第三行并没有按照您的想法行事。考虑例如

Divisible[20, {2, 7}]

它返回 {True, False},而不是 TrueFalse。这意味着Select[list, Divisible[#, {2, 7}] &] 将始终返回一个空列表并且Count[Select[list, Divisible[#, {2, 7}] &], _Integer]将始终返回 0

如果我正确解释了列表的条件,您可以改为使用类似的东西

Count[Select[list, Or @@ Divisible[#, Range[2, 7]] &], _Integer] <= 3

根据这个和 Alexy 关于使用 SowReap 的建议,您可以做类似的事情

f[list_] := And[
1 <= Count[Select[list, # <= 12 &], _Integer] <= 2,
Count[Select[list, # > 31 &], _Integer] >= 1,
Count[Select[list, Or @@ Divisible[#, Range[2, 7]] &], _Integer] <= 3]

Block[{n = 0, list},
Reap[While[n < 5, list = Sort@RandomSample[Range[36], 7];
If[f[list], n++; Sow[list]]]]][[2, 1]]

关于loops - 在 Mathematica : multiple outputs 中循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7777397/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com