gpt4 book ai didi

set - Maxima:对给定集合使用 makeset

转载 作者:行者123 更新时间:2023-12-04 06:07:31 25 4
gpt4 key购买 nike

使用计算机代数系统 Maxima 我尝试做一个非常简单的集合操作:给定一个集合的集合 A 和一个集合 a,我想构建 A 和 a 的所有元素的并集。
因此,例如让 A={{1,2}, {3,4}, {}} 和 a={0,97}。我正在搜索的集合是 {{0,97,1,2}, {0,97, 3,4}, {0,97}}。

好吧,我想最简单的方法是使用 makeset:

makeset(union(a,x), [x], A);

不幸的是,这会返回一个错误:
"$union": argument must be a set; found: x

好吧,据我所知,问题在于 makeset 的第三个参数必须是列表列表或列表集。从最大值文档:
(%i5) makeset (sin(x), [x], {[1], [2], [3]});
(%o5) {sin(1), sin(2), sin(3)}

因为我希望 x 是一个集合,所以在我的情况下,第三个参数必须是一组集合列表。但是 A 是给定的,我不知道如何以简单的方式转换它。可能我可以在一个循环中完成所有事情,但问题对我来说似乎很简单,我想知道是否真的没有更好的方法。

有任何想法吗?

更新:我只是有一个解决方法的想法,但不幸的是它并没有解决我的问题。我设法通过使用 cartesian_product 将 A 带入正确的形式:
makeset(union(a,x), [x], cartesian_product(A));

我仍然得到同样的错误:x 应该是一个集合。嗯,它是一个集合,因为 A 是一个集合。如果我写 {x} 而不是 x,一切都按预期工作,但我想将 x 与非 {x} 与 a 连接起来......我认为这实际上可能是 Maxima 中的一个错误。

更新 2:列表同样的问题:
makeset(append(x, [a]), [x], full_listify(cartesian_product(A)));

返回错误:
append: argument must be a non-atomic expression; found x

更新 3:另请参阅 Maxima's bug tracker 处的对话.

解决方案:
为了让这个问题的读者更容易理解,这里的解决方案(来自 Stavros 的回答和我的第一次更新)是一个结合了两种解决方法的示例:
(%i1) A : {{a,b},{c},{d}};
(%o1) {{a,b},{c},{d}}

(%i2) makeset('(union(x, {new1, new2})), [x], cartesian_product(A));
(%o2) {{a,b,new1,new2},{c,new1,new2},{d,new1,new2}}

最佳答案

makeset 与 makelist 不同,它评估其参数,这是一个糟糕的设计。对于那个很抱歉。有一个解决方法:

makeset('(union(x)), '[x], {[{1}]});

但我们会在 future 的版本中修复这个问题。

谢谢让我们注意到这个。
    -s

PS 我认为你会从 Maxima 邮件列表中得到比 StackOverflow 更好的对 Maxima 问题的回应。

关于set - Maxima:对给定集合使用 makeset,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8182094/

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