当前位置: 首页 > 工具软件 > Maxima > 使用案例 >

Maxima在集合论中的应用

冯德佑
2023-12-01

集合定义

maxima 似乎只支持有限集。建立集合的方式是列举。

set(a_1, ..., a_n)
    n 个元素的集合
{a_1, ..., a_n}
    同上
setify(foo)
    list->set
    把列表 foo 转换为集合
fullsetify(foo)
    把列表 foo 转换为集合, 对列表的列表元素递归调用 fullsetify。列表的列表元素指的是:列表的一个元素,本身又是一个列表。

例子:

(%i2) A : set(1, 2, 3)
(%o2) {1, 2, 3}
(%i3) B : {a, b, c}
(%o3) {a, b, c}
(%i4) C : {}
(%o4) {}

(%i2) setify([a, b, c])
(%o2) {a, b, c}
(%i3) setify([a, b, [1, 2], [a, b, c]])
(%o3) {[1, 2], a, [a, b, c], b}

(%i2) fullsetify([a, b, [1, 2], [a, b, c]])
(%o2) {{1, 2}, a, {a, b, c}, b}


元素与集合


elementp(x,y)
    判断 x 是否集合 S 的元素
adjoin(x, S)
    返回集合 {t | (t in S) or t = x} 即返回把 x 添加到 S 中得到的集合,但 S 本身并不改变。
disjoin(x, S)
    返回把 x 从集合 S 中去除后的集合,S 本身并不改变。

例子:

(%i2) A : {a, b, c}
(%o2) {a, b, c}
(%i3) elementp(a, A)
(%o3) true
(%i4) elementp(d, A)
(%o4) false

# 把 d 添加到 A 中
(%i5) adjoin(d, A)
(%o5) {a, b, c, d}

# A 并未改变,d 不是 A 的元素
(%i6) elementp(d, A)
(%o6) false

# 把 d 添加到 A 中,并把得到的集合赋值给 A
(%i7) A : adjoin(d, A)
(%o7) {a, b, c, d}

(%i8) elementp(d, A)
(%o8) true
(%i9) A : disjoin(a, A)
(%o9) {b, c, d}
(%i10) elementp(a, A)
(%o10) false

集合运算


emptyp(S)
    判断 S 是否空集
intersection(A, B)
    交
intersect(A, B)
    同上,似乎无任何区别
union (A, B)
    并
setdifference(A, B)
    差,馀。 A/B
symmdifference(A,B)
    对称差
subsetp(A,B)
    判断 A 是否 B 的子集
subset(A, f)
    返回集合 {x | (x in A) and (f(x)=true)} f 必须是谓词函数,也即其值域为 {true, false}。
subset (A, f)
    返回一个 A 的一个子集合,由 A 中满足 f 的元素全体组成。
powerset(A)
    返回 A 的全部子集合构成的集合。
powerset(A,n)
    返回 A 的大小为 n 的子集构成的集合。
cartesian_product(A,B)
    返回 A, B 的笛卡尔积(直积)。
cardinality
    返回集合 A 的大小|A|。
disjointp(A,B)
    若集合 A, B 相交,则返回 false,否则返回 true。

例子:

(%i2) A : {a, b, c}
(%o2) {a, b, c}
(%i3) B : {b, c, d}
(%o3) {b, c, d}
(%i4) intersection(A, B)
(%o4) {b, c}
(%i5) intersect(A, B)
(%o5) {b, c}
(%i6) setdifference(A, B)
(%o6) {a}
(%i7) symmdifference(A, B)
(%o7) {a, d}
(%i8) subsetp(A, B)
(%o8) false
(%i9) subsetp(setdifference(B, A), B)
(%o9) true
(%i10) powerset(A)
(%o10) {{}, {a}, {a, b}, {a, b, c}, {a, c}, {b}, {b, c}, {c}}
(%i11) powerset(A, 2)
(%o11) {{a, b}, {a, c}, {b, c}}
(%i12) cartesian_product(A, B)
(%o12) {[a, b], [a, c], [a, d], [b, b], [b, c], [b, d], [c, b], [c, c], [c, d]}
# 在 Maxima 中,用 % 表示上一条命令的输出,在这里,就是 A 与 B 的直积。
(%i13) cardinality(%)
(%o13) 9

转自:http://wiki.ubuntu.com.cn/index.php?title=Maxima&variant=zh-cn

 类似资料: