文章目录
- 等价关系
- 参考文献
等价关系
等价关系定义
是一种特殊的二元关系,应用于集合中的元素对,并且满足以下三个基本性质:
- 自反性 (Reflexivity):对于集合中的任意元素 a a a,必须满足 a ∼ a a \sim a a∼a。
- 对称性 (Symmetry):如果 a ∼ b a \sim b a∼b,那么 b ∼ a b \sim a b∼a。
- 传递性 (Transitivity):如果 a ∼ b a \sim b a∼b且 b ∼ c b \sim c b∼c,那么 a ∼ c a \sim c a∼c。
等价关系常见于数学中的许多领域,例如模运算、几何和线性代数等。在等价关系下,一个集合的所有元素可以被划分为互不相交的等价类,每个等价类包含所有等价的元素。
- 模运算等价类
kill(all)$
declare([a,b,c,n], integer)$
assume(n>0)$
equivalent(x,y,n):=equal(mod(x,n),mod(y,n));
is(equivalent(a,a,n)=equivalent(a,a,n));
is(equivalent(b,b,n)=equivalent(b,b,n));
assume(equivalent(a,b,n))$
is(equivalent(b,a,n));
assume(equivalent(b,c,n))$
is(equivalent(a,c,n));
facts();
Maxima 计算机代数系统中,declare
命令
用于声明变量的特定属性或类型。通过给变量声明属性,可以帮助 Maxima 在计算中使用这些信息以简化表达式、提高计算效率或适当地应用规则。
使用语法
基本语法如下:
declare(变量, 属性);
其中,变量
是需要声明的变量名称,属性
是要应用的属性,可以是以下几种常见的类型或其他特殊属性。
常用的属性类型
-
整型(integer):
- 声明一个变量为整数。
- 语法:
declare(x, integer);
- 作用:使 Maxima 了解变量在表达式中始终是整数,以便进行整数特定的简化。
-
偶数(even)和奇数(odd):
- 声明变量为偶数或奇数。
- 语法:
declare(x, even);
或declare(y, odd);
- 作用:告知 Maxima 变量是否为偶数或奇数,以便在模运算或相关运算中使用。
-
复数(complex)和实数(real):
- 声明变量为复数或实数。
- 语法:
declare(z, complex);
或declare(x, real);
- 作用:确定变量的范围,帮助在符号计算中对复数或实数进行适当的简化。
-
标量(scalar):
- 声明变量为标量。
- 语法:
declare(a, scalar);
- 作用:声明非矩阵或向量变量,用于向量和矩阵运算中。
-
恒等式(constant):
- 声明变量为常数。
- 语法:
declare(k, constant);
- 作用:在微分运算等过程中将该变量视为常数。
-
整除(divides):
- 声明整除属性。
- 语法:
declare(a, divides(b));
- 作用:声明变量 ( a ) 能整除 ( b ),有助于 Maxima 在数论或同余运算中进行简化。
示例
1. 声明整数属性
declare(n, integer);
expand((n + 1)^2);
在此例中,Maxima 将 n
视为整数,并会进行相应的展开。
2. 声明偶数属性
declare(m, even);
is(m^2 mod 2 = 0);
由于 m
是偶数,m^2
的结果为偶数,因此 Maxima 将返回 true
。
3. 声明复数属性
declare(z, complex);
conjugate(z^2);
因为 z
是复数,Maxima 会将其共轭计算为 (conjugate(z))^2
。
注意事项
- 多个属性可以通过逗号分隔一次性声明,例如
declare(x, integer, even);
。 declare
的声明通常是全局的,因此在计算结束后需要用remvalue(x);
来移除声明的属性。
总结
declare
在 Maxima 中为变量赋予特定属性,适用于在数学简化、符号运算、数论以及向量/矩阵运算等方面指定变量的属性。
在 Maxima 中,assume
命令
用于假设变量满足某些条件或属性,例如大于零、为正整数、属于特定范围等。assume
命令在符号计算中尤其有用,因为它帮助 Maxima 应用用户设定的条件,从而得到更符合预期的结果。
使用语法
基本语法如下:
assume(条件);
其中,条件
是一个逻辑表达式,例如 x > 0
或 a < b
,用于告诉 Maxima 变量或表达式的特定属性。
常见用途和示例
-
假设变量为正数:
- 语法:
assume(x > 0);
- 作用:告诉 Maxima
x
是正数,这样在符号运算中可以简化涉及x
的表达式。
示例:
assume(x > 0); sqrt(x^2);
Maxima 将输出
x
而不是abs(x)
,因为假设了x
为正数。 - 语法:
-
假设变量属于特定范围:
- 语法:
assume(a < b);
- 作用:指定变量的范围关系,这对于不等式的简化和求解非常有用。
示例:
assume(a < b); is(a + 1 < b + 1);
Maxima 会返回
true
,因为根据假设,a
小于b
。 - 语法:
-
假设多个条件:
- 语法:
assume(x > 0, y < 10);
- 作用:可以同时假设多个条件,以便更复杂的符号运算。
示例:
assume(x > 0, y < 10); is(x + y < 20);
Maxima 会根据假设来判断表达式的值。
- 语法:
-
假设变量为整数:
- 语法:
assume(integer(n));
- 作用:告诉 Maxima
n
是一个整数,使其在数论运算或整数运算中正确简化。
示例:
assume(integer(n)); is(n^2 mod 2 = 0);
Maxima 将会判断
n^2 mod 2
是否为 0。 - 语法:
-
假设变量为正整数:
- 语法:
assume(integer(n), n > 0);
- 作用:同时假设变量为整数且大于零,常用于整数优化、约束条件等。
示例:
assume(integer(n), n > 0); is(n mod 2 = 0);
如果没有更多信息,Maxima 无法确定
n
是奇数还是偶数,因此它可能返回unknown
。 - 语法:
管理假设
在使用假设时,需要了解如何查看和清除假设。
-
查看所有假设:
- 语法:
facts();
- 作用:列出所有当前的假设条件。
- 语法:
-
清除假设:
- 语法:
forget(条件);
或forget(all);
- 作用:清除特定假设或清除所有假设。
示例:
forget(x > 0); forget(all); /* 清除所有假设 */
- 语法:
assume
与 declare
的区别
assume
是在具体表达式或计算范围内临时假设条件,适用于不确定性较高的计算。declare
是为变量声明特定属性,多用于全局、类型明确的声明,如整数、偶数等。
总结
assume
在 Maxima 中可用于指定条件和属性,使符号运算更灵活精准。通过合理设置 assume
条件,可以帮助 Maxima 获得更符合实际情况的计算结果,同时也应及时管理假设条件以避免冲突。
在 Maxima 中,列表
是一个灵活的数据结构,允许增加和删除元素。以下是如何操作 Maxima 中的列表的详细说明:
1. 创建列表
在 Maxima 中,使用方括号 [
和 ]
创建列表。
示例:
list1 : [1, 2, 3, 4, 5];
2. 向列表中添加元素
(1) 使用 endcons
添加元素到列表末尾
endcons
函数将一个元素添加到列表的末尾。
语法:
new_list : endcons(新元素, 原列表);
示例:
将 6
添加到 list1
的末尾:
list1 : endcons(6, list1);
结果为 [1, 2, 3, 4, 5, 6]
。
(2) 使用 cons
添加元素到列表开头
cons
函数将一个元素添加到列表的开头。
语法:
new_list : cons(新元素, 原列表);
示例:
将 0
添加到 list1
的开头:
list1 : cons(0, list1);
结果为 [0, 1, 2, 3, 4, 5]
。
3. 删除列表中的元素
(1) 删除列表中的第一个元素
可以使用 rest
函数删除列表中的第一个元素。
语法:
new_list : rest(原列表);
示例:
删除 list1
中的第一个元素:
list1 : rest(list1);
结果为 [2, 3, 4, 5]
。
(2) 删除指定位置的元素
Maxima 没有直接删除指定位置元素的函数,但可以通过组合 remove
函数和条件语句来实现。
语法:
new_list : delete(要删除的元素, 原列表);
示例:
删除 list1
中的元素 3
:
list1 : delete(3, list1);
结果为 [1, 2, 4, 5]
。
4. 列表拼接
可以使用 append
函数将两个或多个列表拼接成一个列表。
语法:
new_list : append(列表1, 列表2, ...);
示例:
将 [6, 7, 8]
拼接到 list1
:
list1 : append(list1, [6, 7, 8]);
结果为 [1, 2, 3, 4, 5, 6, 7, 8]
。
5. 查找元素位置
使用 position
函数可以找到某个元素在列表中的位置(从 1 开始计数)。
示例:
查找元素 3
在 list1
中的位置:
position(3, list1);
结果为 3
,表示 3
是 list1
中的第 3 个元素。
6. 获取列表长度
可以使用 length
函数获取列表的长度。
示例:
获取 list1
的长度:
length(list1);
如果 list1
为 [1, 2, 3, 4, 5]
,结果为 5
。
总结
- 添加元素到末尾:
endcons
- 添加元素到开头:
cons
- 删除第一个元素:
rest
- 删除指定元素:
delete
- 拼接列表:
append
- 查找位置:
position
- 获取长度:
length
在 Maxima 中,for
循环
可以用于执行重复操作。Maxima 提供了多种 for
循环格式,包括简单的递增、递减以及条件控制。以下是 for
循环的详细用法。
1. 基本语法
语法:
for 变量 : 起始值 thru 结束值 do 表达式;
变量
是循环变量。起始值
是循环的起始值。结束值
是循环的结束值。表达式
是每次循环执行的内容。
示例:
打印 1 到 5 的数字:
for i : 1 thru 5 do print(i);
输出:
1
2
3
4
5
2. 递增步长的 for
循环
可以使用 step
关键字来设置步长,指定每次增加或减少的值。
语法:
for 变量 : 起始值 step 步长 thru 结束值 do 表达式;
示例:
打印从 1 到 10,每次增加 2 的数字:
for i : 1 step 2 thru 10 do print(i);
输出:
1
3
5
7
9
3. 递减步长的 for
循环
当 step
为负数时,可以创建一个递减的 for
循环。
示例:
打印从 10 到 1,每次减少 2 的数字:
for i : 10 step -2 thru 1 do print(i);
输出:
10
8
6
4
2
4. for in
循环
Maxima 支持 for in
循环,用于遍历列表中的每个元素。
语法:
for 变量 in 列表 do 表达式;
示例:
遍历列表 [1, 3, 5, 7, 9]
并打印每个元素:
for x in [1, 3, 5, 7, 9] do print(x);
输出:
1
3
5
7
9
5. 嵌套 for
循环
可以嵌套 for
循环来处理多维数据结构或执行多重循环操作。
示例:
打印一个简单的 3x3 矩阵索引:
for i : 1 thru 3 do (
for j : 1 thru 3 do print([i, j])
);
输出:
[1, 1]
[1, 2]
[1, 3]
[2, 1]
[2, 2]
[2, 3]
[3, 1]
[3, 2]
[3, 3]
6. 使用 for
循环计算结果
可以在 for
循环中定义变量并进行累计或乘积计算。
示例:
计算 1 到 5 的和:
sum : 0;
for i : 1 thru 5 do sum : sum + i;
sum;
结果为 15
。
7. 条件控制 for
循环
可以结合 if
语句在 for
循环中执行条件判断。
示例:
打印 1 到 10 中的偶数:
for i : 1 thru 10 do (
if evenp(i) then print(i)
);
输出:
2
4
6
8
10
总结
- 基本循环:
for i : 起始值 thru 结束值 do 表达式
- 递增/递减步长:
for i : 起始值 step 步长 thru 结束值 do 表达式
- 列表遍历:
for i in 列表 do 表达式
- 嵌套循环:可以嵌套多个
for
循环 - 条件控制:结合
if
语句
模 n n n 等价类
模 n n n 等价类(模运算的等价类)是指在整数集合中,根据模 n n n 运算对整数进行分类得到的集合。假设 n n n 是一个正整数,对于任意两个整数 a a a 和 b b b,如果 a a a 和 b b b 对 n n n 求余相等(即 a ≡ b ( m o d n ) a \equiv b \pmod{n} a≡b(modn)),那么 a a a 和 b b b 属于同一个模 n n n 的等价类。
定义
对一个整数 n n n 而言,模 n n n 的等价类的定义如下:
- 等价关系:如果两个整数 a a a 和 b b b 满足 a − b a - b a−b 是 n n n 的倍数,那么 a a a 与 b b b 被认为是等价的,即 a ≡ b ( m o d n ) a \equiv b \pmod{n} a≡b(modn)。
- 等价类表示:等价类可以记作 [ a ] [a] [a],其中 [ a ] [a] [a] 表示所有与 a a a 模 n n n 同余的整数的集合。
等价类的性质
- 每一个整数 a a a 都可以被分配到一个唯一的等价类 [ a ] [a] [a] 中。
- 对于模 n n n 的等价类而言,总共有 n n n 个不同的等价类,即 [ 0 ] , [ 1 ] , [ 2 ] , … , [ n − 1 ] [0], [1], [2], \dots, [n-1] [0],[1],[2],…,[n−1],分别表示除以 n n n 的余数为 0 到 n − 1 n-1 n−1 的集合。
举例说明
以模 3 3 3 为例:
- 整数 1、4、7 等对 3 取模的结果是 1,因此它们属于同一个等价类,记作 [ 1 ] [1] [1]。
- 整数 2、5、8 等对 3 取模的结果是 2,因此它们属于同一个等价类,记作 [ 2 ] [2] [2]。
- 整数 0、3、6 等对 3 取模的结果是 0,因此它们属于同一个等价类,记作 [ 0 ] [0] [0]。
对于模 3 3 3,一共有三个等价类: [ 0 ] , [ 1 ] , [ 2 ] [0], [1], [2] [0],[1],[2]。
负数取模 n n n时的结果
是一个非负整数,代表在 n n n的等价类中相对应的正余数。通常,我们通过将负数“向上移动”至相应的正余数来找到其模 n n n的值。具体步骤如下:
负数取模 n n n的计算方法
设 a a a是一个负整数, n n n是一个正整数。负数 a a a的模 n n n值可以通过以下步骤计算:
-
计算原始余数:先计算 a a a对 n n n的余数。例如,如果 a = − 7 a = -7 a=−7且 n = 5 n = 5 n=5,计算 − 7 ÷ 5 -7 \div 5 −7÷5的余数,得到 − 7 m o d 5 = − 2 -7 \mod 5 = -2 −7mod5=−2。
-
调整为非负余数:将负余数加上模数 n n n,得到正余数。例如:在上例中,将 − 2 -2 −2加上 5 5 5,得到 3 3 3。
因此,最终的结果为 − 7 ≡ 3 ( m o d 5 ) -7 \equiv 3 \pmod{5} −7≡3(mod5)。
举例说明
-
示例 1: − 7 m o d 5 -7 \mod 5 −7mod5
- 第一步: − 7 ÷ 5 = − 2 -7 \div 5 = -2 −7÷5=−2的余数是 − 2 -2 −2。
- 第二步: − 2 + 5 = 3 -2 + 5 = 3 −2+5=3,所以 − 7 m o d 5 = 3 -7 \mod 5 = 3 −7mod5=3。
-
示例 2: − 15 m o d 4 -15 \mod 4 −15mod4
- 第一步: − 15 ÷ 4 = − 4 -15 \div 4 = -4 −15÷4=−4的余数是 − 3 -3 −3。
- 第二步: − 3 + 4 = 1 -3 + 4 = 1 −3+4=1,所以 − 15 m o d 4 = 1 -15 \mod 4 = 1 −15mod4=1。
通用公式
对于任意负整数
a
a
a和正整数
n
n
n,可以用公式:
a
m
o
d
n
=
(
a
%
n
+
n
)
%
n
a \mod n = (a \% n + n) \% n
amodn=(a%n+n)%n
其中 a % n
表示普通取模运算的结果,加入
+
n
+ n
+n可以将负余数调整为正余数,再进行一次取模操作确保结果在范围内。
总结
负数取模的结果通常是一个非负整数,表示在模 n n n的范围内等价的正余数。
等价关系的例子
-
整数的模 n n n等价关系
给定一个正整数 n n n,我们可以定义一个等价关系 ∼ \sim ∼如下:
- a ∼ b a \sim b a∼b当且仅当 a a a和 b b b在模 n n n意义下同余,也就是说 a − b a - b a−b可以被 n n n整除,或者 a ≡ b ( m o d n ) a \equiv b \pmod{n} a≡b(modn)。例如,模 3 的等价关系将所有整数分为 3 个等价类:余数为 0、1 和 2 的整数分别在一个类中。
kill(all)$
declare([a,b,c,n], integer)$
n:3$
equivalent(x,y,n):=equal(mod(x,n),mod(y,n));
is(equivalent(a,a,n)=equivalent(a,a,n));
is(equivalent(b,b,n)=equivalent(b,b,n));
assume(equivalent(a,b,n))$
is(equivalent(b,a,n));
assume(equivalent(b,c,n))$
is(equivalent(a,c,n));
- 集合上的相同元素个数的划分
在集合 S = { A ∣ A ⊂ { 1 , 2 , 3 , a , b , c , d } } S = \{ A \mid A \subset \{1, 2, 3,a,b,c,d\} \} S={A∣A⊂{1,2,3,a,b,c,d}}上定义等价关系 ∼ \sim ∼,如果两个子集 A A A和 B B B含有相同个数的元素,则 A ∼ B A \sim B A∼B。这个等价关系会将集合 S S S分成等价类,每个类包含具有相同个数元素的子集。
kill(all);
/* 定义一个函数 subsets,用于枚举所有子集,生成幂集 */
subsets(lst) :=
if lst = [] then
[[]]
else
block(
/* 取出列表的第一个元素 */
[first_element, rest, subsets_rest],
first_element : first(lst),
rest : rest(lst),
/* 递归调用 subsets 处理剩余元素 */
subsets_rest : subsets(rest),
/* 将第一个元素添加到 subsets_rest 的每一个子集中 */
append(subsets_rest, map(lambda([s], cons(first_element, s)), subsets_rest))
);
my_set : [1,2,3,a,b,c,d];
all_subsets : subsets(my_set);
len:length(my_set);
array(evlt, len);
for i : 0 thru len do
evlt[i]:[];
block(
for elem in all_subsets do (
ele_len:length(elem),
evlt[ele_len]:endcons(elem,evlt[ele_len])
)
);
for i : 0 thru len do
print(evlt[i][1],":",evlt[i]);
- 矩阵的相似关系
对于线性代数中的方阵 A A A和 B B B,如果存在一个可逆矩阵 P P P,使得 B = P − 1 A P B = P^{-1}AP B=P−1AP,则称 A A A与 B B B相似,这是一种等价关系。这个等价关系将方阵划分为“相似矩阵”的等价类。
等价类 (Equivalence Class)
等价关系 ∼ \sim ∼将一个集合 X X X分为若干个互不相交的子集,这些子集称为等价类。每个等价类由在该等价关系下相互等价的元素组成。
如果 a a a是集合 X X X中的某个元素,则包含 a a a的等价类表示为:
[ a ] = { x ∈ X ∣ x ∼ a } [a] = \{ x \in X \mid x \sim a \} [a]={x∈X∣x∼a}
等价类具有以下特点:
- 等价类的分割性:每个元素属于唯一的等价类。
- 等价类的覆盖性:所有等价类的并集等于集合 X X X。
等价关系和等价类是数学中非常重要的概念,尤其在抽象代数、拓扑学等领域,为我们提供了一种对对象进行分类的方法。
- 模32的等价类,集合为[0,512]的所有整数。
kill(all)$
declare([a,b,c,n], integer)$
n:32$
equivalent(x,y,n):=equal(mod(x,n),mod(y,n));
array(evlt,n-1);
for k : 0 thru n-1 do(
evlt[k]:[]
);
for i:0 thru 511 do(
for j : 0 thru n-1 do(
if is(equivalent(i,j,n)) then evlt[j]:endcons(i, evlt[j])
)
);
for k : 0 thru n-1 do(
print([k],":",evlt[k])
);
等价关系的原理
等价关系的原理基于三个基本性质(自反性、对称性和传递性),使其在集合划分和分类中起到重要作用。等价关系能将一个集合分割为互不相交的等价类,每个等价类中的元素在等价关系下相等。以下是等价关系的基本原理和相关公式:
1. 等价关系的基本原理
等价关系是一种二元关系,将集合 X X X的元素对进行分类。假设在集合 X X X上定义了一个等价关系 ∼ \sim ∼,则:
- 自反性:对所有 a ∈ X a \in X a∈X,总有 a ∼ a a \sim a a∼a。
- 对称性:对所有 a , b ∈ X a, b \in X a,b∈X,如果 a ∼ b a \sim b a∼b,那么 b ∼ a b \sim a b∼a。
- 传递性:对所有 a , b , c ∈ X a, b, c \in X a,b,c∈X,如果 a ∼ b a \sim b a∼b且 b ∼ c b \sim c b∼c,那么 a ∼ c a \sim c a∼c。
满足这三个条件的关系 ∼ \sim ∼被称为等价关系。通过该等价关系,可以将集合 X X X划分为互不相交的等价类。
2. 等价类的定义
对于集合 X X X中的元素 a a a,以 a a a为代表的等价类定义为:
[ a ] = { x ∈ X ∣ x ∼ a } [a] = \{ x \in X \mid x \sim a \} [a]={x∈X∣x∼a}
即等价类 [ a ] [a] [a]包含所有与 a a a等价的元素。
等价类有以下性质:
- 唯一性:对于集合 X X X中的任意两个元素 a a a和 b b b,若 [ a ] ∩ [ b ] ≠ ∅ [a] \cap [b] \neq \emptyset [a]∩[b]=∅,则 [ a ] = [ b ] [a] = [b] [a]=[b]。也就是说,不同的等价类互不重叠。
- 完备性:所有等价类的并集就是集合 X X X本身,即 X = ⋃ a ∈ X [ a ] X = \bigcup_{a \in X} [a] X=⋃a∈X[a]。
3. 商集的定义与公式
等价关系的另一个重要概念是商集,表示为 X / ∼ X / \sim X/∼,表示集合 X X X中所有等价类的集合:
X / ∼ = { [ a ] ∣ a ∈ X } X / \sim = \{ [a] \mid a \in X \} X/∼={[a]∣a∈X}
商集中的每个元素都是一个等价类。通过商集的概念,可以将复杂的集合结构简化为代表性的等价类集合。
4. 等价关系的应用公式
在某些数学结构中,可以用公式来定义具体的等价关系。例如:
-
模 n n n的同余等价关系:
对于整数集合 Z \mathbb{Z} Z和正整数 n n n,定义等价关系 a ∼ b ⟺ a ≡ b ( m o d n ) a \sim b \iff a \equiv b \pmod{n} a∼b⟺a≡b(modn)。- 若 a ≡ b ( m o d n ) a \equiv b \pmod{n} a≡b(modn),则 a a a和 b b b属于同一个等价类,记作 [ a ] n [a]_n [a]n。
- 等价类公式:
[ a ] n = { x ∈ Z ∣ x ≡ a ( m o d n ) } [a]_n = \{ x \in \mathbb{Z} \mid x \equiv a \pmod{n} \} [a]n={x∈Z∣x≡a(modn)}
-
几何中的相似三角形等价关系:
对于平面几何中的三角形 △ A B C \triangle ABC △ABC和 △ D E F \triangle DEF △DEF,定义等价关系 △ A B C ∼ △ D E F \triangle ABC \sim \triangle DEF △ABC∼△DEF当且仅当它们的对应角相等且对应边成比例。 -
集合的元素个数等价关系:
对于集合 S = { A ∣ A ⊂ X } S = \{ A \mid A \subset X \} S={A∣A⊂X},可以定义一个等价关系 A ∼ B A \sim B A∼B若 ∣ A ∣ = ∣ B ∣ |A| = |B| ∣A∣=∣B∣(即集合 A A A和 B B B元素个数相同),则 A A A和 B B B在此等价关系下属于同一个等价类。
5. 等价关系的代数性质公式
在抽象代数中,等价关系常用于构造商结构。例如,在群 G G G上定义的等价关系可以形成商群 G / N G/N G/N:
G / N = { g N ∣ g ∈ G } G/N = \{ gN \mid g \in G \} G/N={gN∣g∈G}
其中 g N gN gN表示包含 g g g的等价类(即陪集),满足:
- 若 g 1 , g 2 ∈ G g_1, g_2 \in G g1,g2∈G并且 g 1 ∼ g 2 g_1 \sim g_2 g1∼g2,则 g 1 N = g 2 N g_1N = g_2N g1N=g2N。
- 商群 G / N G/N G/N的每个元素是一个陪集,且 G / N G/N G/N中的等价类组成了一个新的群结构。
等价关系在集合划分和代数结构构造中是基础性工具,其原理和公式帮助我们将复杂问题分解为等价类来解决。
参考文献
- chatgpt