matlab有限域上的运算.docx
- 文档编号:5063206
- 上传时间:2022-12-12
- 格式:DOCX
- 页数:9
- 大小:22.46KB
matlab有限域上的运算.docx
《matlab有限域上的运算.docx》由会员分享,可在线阅读,更多相关《matlab有限域上的运算.docx(9页珍藏版)》请在冰豆网上搜索。
matlab有限域上的运算
1有限域基础知识
1、1有限域(Galois域)得构造
令p 为一个素数、则对任意得一个正整数n,存在一个特征为 p,元素个数为pn得有限域GF(pn)、
注:
任意一个有限域,其元素得个数一定为pn,其中 p为一个素数(有限域得特征),n 为一个正整数、
例1(有限域GF(p)) 令 p 为一个素数,集合
GF(p)=Zp={0,1,2,…,p−1}、
ﻫ在GF(p)上定义加法⊕与乘法⊙ 分别为模p加法与模p乘法,即任意得a,b∈GF(p),
a⊕b=(a+b)modp, a⊙b=(a⋅b)modp
则〈GF(p),⊕,⊙>为一个有 p个元素得有限域,其中零元素为0,单位元为 1、
令a为 GF(p)中得一个非零元素、 由于 gcd(a,p)=1,因此,存在整数b,c,使得ab+pc=1、由此得到 a得逆元为a−1=bmodp、
域GF(p) 称为一个素域(primefield)、
例注1:
给定a与p,例1中得等式 ab+pc=1 可以通过扩展得欧几里得除法得到,从而求得GF(p)中任意非零元素得逆元、
例2(有限域GF(pn)) 从GF(p)出发,对任意正整数n,n≥2,我们可以构造元素元素个数为 pn得有限域GF(pn)如下:
令 g(x)为一个 GF(p)上次数为n 得不可约多项式,集合
GF(pn)=GF(p)[x]/⟨g(x)⟩={a0+a1x+a2x2+⋯+an−1xn−1 | ai∈GF(p),0≤i≤n−1}
ﻫ在GF(pn)上定义加法 ⊕ 与乘法⊙ 分别为模g(x)加法与模g(x)乘法,即任意得 a(x),b(x)∈GF(pn),
a(x)⊕b(x)=a(x)+b(x), a(x)⊙b(x)=(a(x)⋅b(x))modg(x)
ﻫ则〈GF(pn),⊕,⊙>为一个有pn个元素,特征为p得有限域,其中零元素为GF(p)中得 0,单位元为GF(p)中得1、
令a(x)为 GF(pn)中得一个非零元素、由于gcd(a(x),g(x))=1,因此,存在 GF(p)上得多项式b(x),c(x),使得a(x)b(x)+g(x)c(x)=1、由此得到 a(x) 得逆元为a−1(x)=b(x)modg(x)、
域 GF(pn) 称为 GF(p)得(n次)扩域(extensionfield),而GF(p) 称为GF(pn) 得子域(subfield)、
例注2、1:
给定GF(p)上得多项式a(x)与 g(x),例2中得等式 a(x)b(x)+g(x)c(x)=1可以通过扩展得欧几里得除法得到,从而求得GF(pn) 中任意非零元素得逆元、
例注2、2:
设 GF(q)就是一个含有q个元素得有限域、对任意正整数n,GF(q) 上得n次不可约多项式一定存在、 更进一步,GF(q)上首项系数为 1 得n次不可约多项式得个数为
Nq(n)=1n∑d|nμ(nd)qd=1n∑d|nμ(d)qn/d
ﻫ其中μ 为Moebius函数,定义为
μ(m)=⎧⎩⎨1(−1)k0如果m=1如果m=p1p2⋯pk,其中p1,p2,…,pk为互不相同得素数其它
1、2 有限域得性质
令GF(q)就是一个含有q个元素得有限域,F∗q=GF(q)∖{0} 为有限域GF(q) 中所有非零元素构成得集合、则在乘法之下F∗q 就是一个有限循环群、 循环群F∗q得一个生成元称为有限域GF(q) 得一个本原元、
若 α∈GF(q) 为一个本原元,则
GF(q)={0,1,α,α2,…,αq−2}
ﻫ并且αq−1=1,即αq=α、
定义:
设GF(q)就是一个含有q个元素得有限域,GF(p) 就是 GF(q)得一个含有p 个元素得子域(p 不一定为素数),α∈GF(q)、则GF(p) 上以 α 为根,首项系数为1,并且次数最低得多项式称为 α在 GF(p)上得极小多项式(minimalpolynomial of αover GF(p))、
特别地,若α∈GF(q)为GF(q) 得一个本原元,则α在GF(p) 上得极小多项式称为GF(p)上得一个本原多项式(primitive polynomial forGF(q)overGF(p))、
定义注1:
对任意得α∈GF(q),α在GF(p)上得极小多项式存在并且唯一,并且α在GF(p) 上得极小多项式为 GF(p) 上得一个不可约多项式、
定义注2:
设α∈GF(q),则α与 αp在 GF(p)上具有相同得极小多项式、更进一步,集合
B(α)={α,αp,αp2,αp3,…,αpi,…}
ﻫ中得元素具有相同得极小多项式、设 q=pn,则αpn=α、因此,集合B(α)中互不相同得元素得个数(记为r)不超过 n、 可以证明,α 为GF(q)得一个本原元当且仅当r=n、
定理:
设 GF(q)就是一个含有q个元素得有限域,GF(p) 就是GF(q)得一个含有p个元素得子域、设α∈GF(q),r为满足αpr=α 得最小正整数、 则α 在GF(p) 上得极小多项式g(x)就是一个r次不可约多项式,并且
B(α)={α,αp,αp2,…,αpr−1}
ﻫ中得元素为 g(x)在GF(q)上得所有不同得根,即
g(x)=(x−α)(x−αp)(x−αp2)⋯(x−αpr−1)、
注:
r得计算方法如下:
设α在F∗q中得阶为k、集合
Z∗k={m | 0≤m≤k−1,gcd(m,k)=1}
ﻫ在模k乘法运算下就是一个含有 φ(k) 个元素得有限群(其中φ为欧拉(Euler)函数)、则r等于pmodk在 Z∗k 中得阶、
推论:
设 GF(q)就是一个含有q 个元素得有限域,GF(p)就是GF(q)得一个含有 p个元素得子域、 设 |GF(q)|=pn,即q=pn、设α∈GF(q)为GF(q)得一个本原元,则α在GF(p)上得极小多项式g(x)得次数为n,并且
g(x)=(x−α)(x−αp)(x−αp2)⋯(x−αpn−1)、
ﻫ更进一步,α,αp,αp2,…,αpn−1均为 GF(q)得本原元、
注:
设GF(p)就是一个含有 p个元素得有限域,n就是任意一个正整数,则GF(p)上得 n 次本原多项式一定存在、 更进一步,GF(p)上得首项系数为1得 n次本原多项式得个数为φ(pn−1)n,其中φ为欧拉函数、
例3考虑二元域GF(2)上得不可约多项式p(α)=α3+α+1,构造有限域
GF(23)=GF
(2)[α]/⟨p(α)⟩={0,1,α,α+1,α2,α2+1,α2+α,α2+α+1}、
容易验证,α,α2,α3,α4,α5,α6都就是 GF(23)得本原元、GF(2)上得首项系数为1得 3次本原多项式有两个,分别为
(i)α,α2,α4在GF
(2)上得极小多项式
g(x)=(x+α)(x+α2)(x+α4)=x3+x+1
(ii) α3,α5,α6在 GF
(2) 上得极小多项式
g(x)=x3+x2+1
有限域 GF(p)上得本原多项式一定就是GF(p) 上得不可约多项式;但就是,GF(p)上得不可约多项式不一定就是GF(p)上得本原多项式、
定理:
设GF(q) 就是一个含有q 个元素得有限域,GF(p) 就是 GF(q)得一个含有 p个元素得子域,g(x)就是GF(p)上得一个不可约多项式、则 g(x) 为 GF(p)上得本原多项式当且仅当g(x)在GF(q)上得根都就是GF(q)得本原元、
下面例子说明不可约多项式不一定就是本原多项式、
例4考虑二元域GF
(2)上得不可约多项式 p(x)=x4+x3+x2+x+1,构造有限域
GF(24)=GF
(2)[x]/⟨p(x)⟩={a+bx+cx2+dx3 | a,b,c,d∈GF
(2)}、
显然,x∈GF(24)、由于x5=1,即x得阶为 5,因此,x不就是GF(24)得本原元、 于就是, p(x)不就是GF(2) 上得本原多项式、 另外,可以验证x+1就是 GF(24)得本原元、
2 Matlab中得有限域计算函数
Matlab 中自带得有限域得计算就是在GF(2m)上进行得,即在二元域GF
(2)得扩域中进行计算,其中1≤m≤16、
由“1、1有限域得构造”得 “例2"可知,我们只需先找到一个GF
(2)上得 m次不可约多项式g(x),得到集合GF
(2)[x]/⟨g(x)⟩,然后定义其上得加法与乘法分别为模g(x)加法与模 g(x)乘法,即得到有限域GF(2m)、
然而,这样得到得有限域 GF(2m) 中,元素x未必就是本原元,这将给后面得(乘法)运算带来很多麻烦、因此,在不可约多项式 g(x)得挑选上,我们最好选择一个本原多项式、这其实就就是Matlab中得做法、
Matlab中GF(2m) 得元素:
在Matlab中GF(2m):
=GF
(2)[D]/⟨p(D)⟩,其中p(D) 为一个GF
(2)上得m次本原多项式、
GF(2m)={am−1Dm−1+am−2Dm−2+⋯+a1D+a0, | ai∈GF
(2),0≤i≤m−1}
ﻫ因此,每个GF(2m)中得元素本质上就是一个次数小于 m 得多项式,每个元素与多项式之间有“1-1”对应关系、例如,取m=3 与本原多项式 p(D)=D3+D+1,则我们得到有限域GF(23),其中得元素与多项式之间得对应关系如下:
GF(23)
GF
(2)[D]/⟨p(D)⟩
二进制
0
0
000
1
1
001
2
D
010
3
D+1
011
4
D2
100
5
D2+1
101
6
D2+D
110
7
D2+D+1
111
GF
(2)上得多项式由系数组成得二进制所对应得(十进制)数字来表示、例如,多项式p(D)=D3+D+1得系数组成得二进制为1011,因此,多项式p(D)表示为数字11、
2、1 定义有限域数组
在Matlab中,函数gf 用来定义一个有限域数组,函数申明如下:
X_GF = GF(X,M,PRIM_POLY)
函数创建有限域GF(2M)上得一个数组,使用得GF(2) 上得M次本原多项式为PRIM_POLY;M就是一个1 至 16之间得整数;数组X中得元素为0 至2M−1之间得数、
例如,生成有限域 GF(23)中得所有元素,并令本原多项式为p(D)=D3+D2+1、
>>GF8 = gf(0:
7,3,13)
GF8=GF(2^3) array、 Primitivepolynomial=D^3+D^2+1(13decimal)
Array elements=
0 1 234567
如果不指定本原多项式,则Matlab将使用默认本原多项式、例如
〉〉gf(0:
7,3)
ans= GF(2^3)array、Primitivepolynomial =D^3+D+1(11decimal)
Arrayelements =
01 23 4567
在这里例子中,Matlab 使用了3次本原多项式D3+D+1、
如果不指定次数M与本原多项式PRIM_POLY,则生成二元域GF(2)中得元素、
〉〉gf(0:
1)
ans= GF(2)array、
Arrayelements=
0 1
生成得有限域中得数组可以参与运算(+、、、、、^、\等)、注意:
参与运算得操作数必须来自同一个有限域,用于生成有限域得本原多项式也必须相同!
一个典型得例子就是计算有限域得乘法表如下:
〉〉GF8= gf(0:
7,3)
GF8 =GF(2^3)array、 Primitivepolynomial=D^3+D+1(11 decimal)
Arrayelements=
0 1 2 345 67
〉〉GF8'*GF8
ans =GF(2^3)array、 Primitivepolynomial=D^3+D+1(11decimal)
Array elements=
00 0 0000 0
01 23 4 5 6 7
02 46 3 1 75
0 36 5 7 4 12
04 37 6 2 51
05 14 2 73 6
06 71 5 32 4
0 75 2 1 64 3
>>GF8= gf(0:
7,3,13)
GF8=GF(2^3)array、Primitivepolynomial=D^3+D^2+1 (13 decimal)
Arrayelements=
0 1 23 45 6 7
>>GF8’*GF8
Warning:
Lookup tablesnot definedforthisorder2^3and
primitive polynomial13、 Arithmeticstillworks
correctlybutmultiplication, exponentiation, and
inversionofelements isfasterwithlookuptables、
Usegftabletocreateandsavethe lookuptables、
>Ingf、gettables at 35
In gf、mtimes at20
ans = GF(2^3) array、Primitive polynomial =D^3+D^2+1(13decimal)
Arrayelements =
000 0 0 00 0
0 1 2 3 4 5 67
0 2 4 657 1 3
0 3 6 5 127 4
0 45 1732 6
0 57 23 64 1
06 17 2 4 35
07 3 4 6 1 52
在这里我们用两个不同得本原多项式构造有限域GF(23),得到两张不同得乘法表、
注1:
当我们计算 GF
(2)[D]/⟨D3+D2+1⟩得乘法表时,Matlab给产生一个警告“Warning:
Lookuptablesnotdefined forthisorder2^3andprimitivepolynomial13、”从警告中我们可以瞧出,Matlab中有限域得乘法就是通过查表来完成得,这样可以显著地提高计算得速度、 我们可以通过命令 gftable 来创建并保存查找表格、ﻫ注2:
用本原多项式D3+D+1 与D3+D2+1生成两个不同得元素个数为8得有限域,然而这两个有限域就是同构得、一般地,我们有如下有限域同构定理:
定理:
任意两个元素个数相同得有限域一定同构、
与本原元多项式相关得函数
primpoly
函数 primpoly用于计算GF
(2)上得本原多项式,函数申明如下:
PR=PRIMPOLY(M,OPT,'nodisplay’)
其中 M为本原多项式得次数,其取值为2至16之间得整数;选项OPT得定义如下:
OPT=’min’给出一个权值最小得本原多项式
OPT=’max’给出一个权值最大得本原多项式
OPT='all'给出所有得本原多项式
OPT= L 给出所有权值为L得本原多项式
字符串‘nodisplay’用于关闭默认得本原多项式显示方式、
例如,输出GF
(2)上所有次数为3得本原多项式、
>〉primpoly(3,'all')
Primitive polynomial(s) =
D^3+D^1+1
D^3+D^2+1
ans=
11
13
>〉primpoly(3,’all',’nodisplay’)
ans =
11
13
isprimitive
函数isprimitive 用来检查 GF
(2) 上得多项式就是否为本原多项式,函数申明如下:
CK= ISPRIMITIVE(A)
其中 A为一个表示多项式得数字,并且表示得多项式得次数不能超过16、 如果 A为本原多项式,则返回1;否则返回0、
例如,检查多项式D3+D2+1与 D3+D2+D+1就是否为本原多项式如下:
〉>isprimitive(13)
ans=
1
〉>isprimitive(15)
ans=
0
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- matlab 有限 运算