目录

前言

都说数学是基础学科,集合论则是基础中的基础,今天我们之所以能这么简便的使用集合的概念,还得感谢一个人——康托尔。康托尔(G·Cantor)作为集合论的创立者,也是数学史上最具有争议的人物之一,然而数学的发展证明了康托尔是正确的,他为数学的发展扫清了障碍,今天我们就来介绍一点集合的知识。

集合与集合的运算

至今很难有人把集合的概念精准完备的定义出来,现代数学把由一些能够确定的东西放在一起并称之为集合,常用大写字母S(set)表示,其中里面确定的东西叫做集合的元素,常用小写字母a表示,于是S与a之间就形成了某种关系,当a在S中,就说a属于S,记作a∈S, 反过来记a∉S,读作a不属于S,任意给定一个元素和一个集合,元素要么属于集合,要么不属于集合,必居其一。 元素属不属于集合是确定的,然而集合里面的元素的多寡又如何衡量呢?这就要用到集合的势。

集合的势是用来度量集合里面元素的多少的,如果集合里面元素是有限的话,那么集合的势就集合里面的元素的个数;如果集合里面元素是无限的话,那么就要用势这个概念来比较大小了。集合除了确定性之外,还有互异性和无序性两条重要性质。

互异性是说集合里面的元素互不相同的,从而每个元素只能出现一次。而无序性顾名思义说的就是集合里面的元素没有先来后到之分,谁在前谁在后都无所谓。

说完了集合的性质就该重点说说集合的运算了。具体有求交集,求并集,求差集,求对称集等运算,还有对应的可视化——Venn图(韦恩图)。

  • 交集

交集是指同时属于两个集合的那些元素组成的集合。设A,B是两个集合,那么A,B的交集可用下面符号关系确定。

manim|集合的运算_并集

manim|集合的运算_并集_02

  • 并集

并集是指只要属于其中一个集合的元素组成的集合,这么说可能有点绕,但是用数学符号表示就清晰明了,设A,B是两个集合,那么A,B的并集可用下面符号关系确定。

manim|集合的运算_参考文献_03

manim|集合的运算_集合_04

  • 对称差集

对称差集是指只要属于其中一个集合,但不属于他们交集的那部分的元素组成的集合,这个运算稍微有点复杂,但是用数学符号表示就清晰明了,设A,B是两个集合,那么A,B的对称差集可用下面符号关系确定
manim|集合的运算_集合_05

用下面图来表示更直白。

manim|集合的运算_集合_06

  • 差集

差集顾名思义就是两个集合做差运算,设A,B是两个集合,那么A,B的差集可用下面符号关系确定

manim|集合的运算_参考文献_07

manim|集合的运算_并集_08

预览效果

BooleanOperations

代码

接下来,我们用代码将集合的运算渲染出来,大致思路是先画出两个有交集的集合,然后把他们的交集,并集,差集和对称集分别凸显出来并移动分离出来加以标注,并用不同颜色来表示。

from manim import *

class BooleanOperations(Scene):
def construct(self):
ellipse1 = Ellipse(width=4, height = 5, fill_opacity = 0.5, color =BLUE, stroke_width = 10).move_to(3*LEFT) #椭圆并左移3个单位
ellipse2 = Ellipse(width=4, height = 5, fill_opacity = 0.3, color =RED, stroke_width = 10).move_to(1*LEFT) #椭圆并左移1个单位
title_text = Text('Boolean Operation').next_to(ellipse1, 3*UP) #标题,靠近椭圆1, 上面3个单位
ellipse_group = Group(ellipse1, ellipse2, title_text) #组成一个团队
self.add(ellipse_group)

i = Intersection(ellipse1, ellipse2, color = GREEN, fill_opacity = 0.5) #交集
self.play(i.animate.scale(0.25).move_to(5*RIGHT+3*UP)) #缩小并移动
intersection_text = Text('Intersection', font_size=25).next_to(i, LEFT) #交集标题打交集左边1个单位
self.play(FadeIn(intersection_text))

u = Union(ellipse1, ellipse2, color = ORANGE, fill_opacity = 0.5) #并集
self.play(u.animate.scale(0.25).move_to(5*RIGHT+1*UP)) #并集缩小并移动
text3 = Text('Union', font_size=25).next_to(u, LEFT) #并集标题
self.play(FadeIn(text3))

e = Exclusion(ellipse1, ellipse2, color = YELLOW, fill_opacity = 0.5) #非交集
self.play(e.animate.scale(0.25).move_to(5*RIGHT+1*DOWN))
union_text = Text('Exclusion', font_size=25).next_to(e, LEFT)
self.play(FadeIn(union_text))


d = Difference(ellipse1, ellipse2, color = PINK, fill_opacity = 0.5) #差集
self.play(d.animate.scale(0.25).move_to(5*RIGHT+3*DOWN))
text5 = Text('Difference', font_size = 25).next_to(d, LEFT)
self.play(FadeIn(text5))

with tempconfig({'quality': 'medium_quality', 'preview': True}):
scene = BooleanOperations()
scene.render()

参考文献

1,​​集合​​​ 2,​​集合的运算​