matlab有限域上的运算
matlab运算符运算
Matlab运算符运算1.介绍在M at la b中,运算符是用来执行各种数学和逻辑运算的符号。
它们可以用于操作不同类型的数据,如数字、向量、矩阵和逻辑值。
M at la b 提供了一系列的运算符,包括算术运算符、关系运算符、逻辑运算符等。
本文将详细介绍M atl a b中常用的运算符及其使用方法。
2.算术运算符M a tl ab提供了一组算术运算符,用于执行基本的数学运算,如加法、减法、乘法和除法。
下面是一些常用的算术运算符及其使用方法:-加法运算符(`+`):用于执行两个数值的相加操作。
-减法运算符(`-`):用于执行两个数值的相减操作。
-乘法运算符(`*`):用于执行两个数值的相乘操作。
-除法运算符(`/`):用于执行两个数值的相除操作。
-取余运算符(`mo d`):用于计算两个数值的余数。
以下是一些示例代码:a=5;b=3;c=a+b;%计算a和b的和d=a-b;%计算a和b的差e=a*b;%计算a和b的积f=a/b;%计算a和b的商g=mo d(a,b);%计算a除以b的余数3.关系运算符关系运算符用于比较两个数值或变量之间的关系,并返回一个逻辑值(`tr ue`或`f al se`)。
M at la b提供了一组关系运算符,包括等于、不等于、大于、小于、大于等于和小于等于。
下面是一些常用的关系运算符及其使用方法:-等于运算符(`==`):用于比较两个数值是否相等。
-不等于运算符(`~=`):用于比较两个数值是否不相等。
-大于运算符(`>`):用于比较第一个数值是否大于第二个数值。
-小于运算符(`<`):用于比较第一个数值是否小于第二个数值。
-大于等于运算符(`>=`):用于比较第一个数值是否大于等于第二个数值。
-小于等于运算符(`<=`):用于比较第一个数值是否小于等于第二个数值。
以下是一些示例代码:a=5;b=3;c=(a==b);%判断a是否等于b,返回逻辑值d=(a~=b);%判断a是否不等于b,返回逻辑值e=(a>b);%判断a是否大于b,返回逻辑值f=(a<b);%判断a是否小于b,返回逻辑值g=(a>=b);%判断a是否大于等于b,返回逻辑值h=(a<=b);%判断a是否小于等于b,返回逻辑值4.逻辑运算符逻辑运算符用于执行布尔逻辑运算,并返回一个逻辑值。
matla 在命令行运行10个以上数学运算例子
matla 在命令行运行10个以上数学运算例子Matlab是一种强大的数学软件和编程语言,广泛应用于科学计算和工程应用中。
它的主要特点是高度的可靠性和可扩展性,可以轻松处理大规模的数据和复杂的数学运算。
在本文中,我们将探讨在Matlab命令行中运行多个数学运算的示例,并逐步解释每个示例。
1.基本算术运算:Matlab支持基本的算术运算,如加法、减法、乘法和除法。
我们可以在Matlab命令行中输入以下命令进行计算:matlab2 + 3这将输出结果5,表示2加3的和。
2.向量和矩阵运算:Matlab也可以进行向量和矩阵的计算。
我们可以在命令行中定义向量和矩阵,并进行加法、减法、乘法和除法运算。
例如,我们可以输入以下命令来计算两个向量的和:matlaba = [1 2 3]b = [4 5 6]c = a + b这将输出结果c=[5 7 9],表示向量a和b的对应元素相加的结果。
3.三角函数运算:Matlab还支持各种三角函数的计算,如正弦、余弦和正切。
我们可以使用以下命令在Matlab命令行中计算sin(30)的值:matlabsin(30)这将输出结果0.5,表示30度的正弦值为0.5。
4.指数和对数运算:Matlab还支持指数和对数运算。
我们可以使用以下命令在Matlab命令行中计算e的幂次方:matlabexp(1)这将输出结果2.7183,表示e的幂次方值。
5.矩阵运算:Matlab可以进行复杂的矩阵运算,如矩阵的转置、求逆和特征值等。
我们可以使用以下命令在Matlab命令行中计算矩阵的逆:matlabA = [1 2; 3 4]inv(A)这将输出结果[-2 1; 1.5 -0.5],表示矩阵A的逆矩阵。
6.积分和微分运算:Matlab还支持积分和微分运算。
我们可以使用以下命令在Matlab命令行中计算函数的积分:matlabintegrate(2*x, 0, 1)这将输出结果1,表示函数2x在区间[0,1]上的定积分值为1。
使用MATLAB的有限域计算
Galois Field Computation in MATLAB:Primitive Polynomial:An Irreducible polynomial p(X) of degree m is said to be primitive if the smaller positive integer n for which p(X) divides X n + 1 is n = 2m – 1. For example, p(X) = X4 + X + 1 divides X15 +1 but not divides any X n +1 for 1 ≤ n < 15.In Matlab you can easily find the primitive polynomials for any degree using primpoly(m) function.Example:m= 4; Define m = 4 for GF(24)s = primpoly(m)Output is:Primitive polynomial(s) =D^4+D^1+1s =19Here it shows the primitive polynomial and an integer whose binary representation indicates the coefficients of the polynomial. Note that there could be more than one primitive polynomial for a particular degree of m.Galois Field arithmetic:To demonstrate Galois Field arithmetic we consider following table for degree m = 4 an primitive polynomial p(X) = 1 + X + X4Power Representation Polynomial Represent4-Tuple Representation0 0 0 0 0 01 1 1 0 0 0αα0 1 0 0α2 α20 0 1 0α3 α30 0 0 1α4 1+ α 1 1 0 0α5 α + α2 0 1 1 0α6 α2 + α30 0 1 1α7 1+ α + α3 1 1 0 1α8 1 + α2 1 0 1 0α9 α + α30 1 0 1α10 1+ α + α2 1 1 1 0α11 α + α2 + α30 1 1 1α12 1 + α + α2 + α3 1 1 1 1α13 1 + α2 + α3 1 0 1 1α14 1 + α3 1 0 0 1The Matlab function gftuple(),Simplify or convert the format of elements of a Galois field. That means, you can find the tuple representation of corresponding power representation by gftuple() function.Example:X = gftuple(11,4);Y= gftuple(14,4);The output is:X =0 1 1 1Y =1 0 0 1In Matlab you can do any Galois Field arithmetic using gf() function. Example:X = gf(6,4) % first argument is integer equivalent of tuple% representation and 2nd argument is degree mY = gf(13,4)Z = X + YThe output is:X = GF(2^4) array. Primitive polynomial = D^4+D+1 (19 decimal) Array elements =6Y = GF(2^4) array. Primitive polynomial = D^4+D+1 (19 decimal) Array elements =13Z = GF(2^4) array. Primitive polynomial = D^4+D+1 (19 decimal)Array elements =11Note: The array elements are shown in tuple representation format. Tounderstand it you may need to convert from tuple representation to power representation from the table.In the above example we did the addition of α5 + α7, which is α13.Similarly you ca do multiplication, division or subtraction.Minimal polynomialsMinimal polynomials of elements in GF(24) generated by p(X) = X4 + X+ 1are given in following table.Conjugate Roots Minimal polynomials Ф(X)0 X1 X+1α, α2, α4, α8X4 + X + 1α3, α6, α9, α12X4 + X3 + X + 1α5, α10X2 + X + 1α7, α11, α13, α14X4 + X3 + 1By using minpol() function in matlab you can genetare the minimalpolynomial for any root. Again using roots() function you can find theconjugate roots for a particular minimal polynomial.Example:m = 4;e = gf(6,4);em = minpol(e) %Find minimal polynomial of e. em is in%GF(2^m)emr = roots(gf([0 0 1 1 1],m))%Roots of D^4+D^3+1 in GF(2^m)The output is:em = GF(2) array.Array elements =0 0 1 1 1emr GF(2^4) array. Primitive polynomial D^4+D+1 (19 decimal)Array elements =9111314Generation of generator polynomial of BCH codes:For BCH codes generator polynomials can be calculated by following equation asg(X) = LCM{ Ф1(X), Ф3(X), Ф5(X), Ф7(X)…… Ф2t-1(X)} where Фi(X) are the minimal polynomials.Now for m = 4, we can calculate the generator polynomial for (15, 11), (15, 7) and (15, 5) BCH codes as following:g1(X) = Ф1(X) for (15, 11) BCH code, t = 1g2(X) = LCM{ Ф1(X), Ф3(X)} for (15, 7) BCH code, t = 2g3(X) = LCM{ Ф1(X), Ф3(X), Ф5(X)} for (15, 5) BCH code, t = 3In matlab you can easily generate the generator polynomial by using bchgenpoly() function.Example:genpoly1 = bchgenpoly(15,11)genpoly2 = bchgenpoly(15,7)The output is:genpoly = GF(2) array.Array elements =1 0 0 1 1genpoly = GF(2) array.Array elements =1 1 1 0 1 0 0 0 1Now you can shift this generator polynomial using circshift() command to create the generator matrix and encode the message block by block.。
matlab gfprimfd函数
matlab gfprimfd函数MATLAB的gfprimfd函数是一个用于生成有限域GF(p^m)的不可约多项式的函数。
在代数学中,有限域是一个包含有限个元素的域,而不可约多项式是无法分解为两个或更多个较低次数多项式相乘的多项式。
有限域在现代密码学和纠错编码等领域中被广泛应用。
gfprimfd函数的作用就是根据给定的域大小p和扩展度m生成一个不可约多项式。
在密码学中,有限域常用于实现分组密码算法和公钥密码算法。
分组密码算法中,有限域用于定义加法和乘法运算,从而实现对明文的加密和密文的解密。
而公钥密码算法中,有限域则用于定义离散对数问题,从而实现安全的密钥交换和数字签名。
纠错编码是一种通过添加冗余信息来检测和纠正数据传输中的错误的技术。
有限域在纠错编码中被用于定义编码和解码算法,从而实现对数据传输中错误的检测和纠正。
gfprimfd函数通过输入域大小p和扩展度m生成一个不可约多项式,该多项式可以用于构建有限域GF(p^m)。
例如,当p=2,m=8时,gfprimfd函数可以生成一个不可约的8次多项式,用于构建有限域GF(2^8)。
gfprimfd函数的使用非常简单,只需要指定域大小p和扩展度m即可。
函数会返回一个不可约多项式的系数向量,这个向量可以用于构建有限域GF(p^m)的元素。
在实际应用中,根据具体的需求,可以使用gfprimfd函数生成不同大小和扩展度的有限域。
根据生成的不可约多项式,可以实现不同的密码算法和纠错编码方案。
总结而言,MATLAB的gfprimfd函数是一个用于生成有限域GF(p^m)的不可约多项式的函数,它在密码学和纠错编码等领域中有着广泛的应用。
通过使用gfprimfd函数,可以生成不同大小和扩展度的有限域,从而实现安全的加密、解密和纠错传输等功能。
MATLAB在有限域教学中的应用
图 1 有限域表示的图形演示界面
2 MATLAB 在有限域多项式中的应用
一方面,利用 MATLAB 软件能非常方便地求出 有限域的本原多项式和极小多项式,MATLAB 为学 生求 BCH 码 的 生 成 多 项 式 提 供 一 个 有 利 的 计 算工具。
[6] 王国强,赵月琴,朱永飞. 大型仪器设备开放共享平台建设的 探索[J]. 实验技术与管理,2007,24( 6) : 155-159.
[7] Zhou S Q,Zhao W,Xiong W H. Microstructure and properties of the cermets based on Ti( C,N) [J]. International Journal of Re-
[2] 清源计算机工作室编著. Matlab 高级应用--图形及影像处理 [M]. 北京: 机械工业出版社.
[3] W. C. Huffman. Fundamentals of Error- Correcting Codes[M]. Cambridge University Press. 2003.
构造有限域 GF( 2m) 需要选取有限域 GF( 2) 上 的一个 m 次本原多项式[3]。在 MATLAB 软件中, GF( 2) 上的多项式用整数表示,例如“25”的二进制 为“11001 ”,故 “25 ” 表 示 多 项 式“x4 + x 3 + 1 ”。 MATLAB 软件提供了函数 gf ( x,m,prim_poly) ,用 来产生一个有限域 GF( 2m) 。下面用 MATLAB 软件 实现二元有限域上的运算。
函数 primpoly( m,opt) 用来求有限域 GF( 2m ) 的本原多项式。参数“m”是位于 2 到 16 之间的整 数,opt 是可选的参数,返回值为本原多项式的整数 表示。函数 minpol( x) 用来求有限域 GF( 2m ) 的极 小多项式。输入参数“x”是 GF( 2m ) 中的元素在有 限域数组中的位置,返回值为极小多项式前的系数。 下面的程序给出了 GF( 24 ) 中各元素的极小多项式。
matlab有限域上的运算
1 有限域基础知识1.1 有限域(Galois域)的构造令p为一个素数. 则对任意的一个正整数n,存在一个特征为p,元素个数为p n的有限域GF(p n).注:任意一个有限域,其元素的个数一定为p n,其中p为一个素数(有限域的特征),n为一个正整数.例1(有限域GF(p))令p为一个素数,集合GF(p)=Z p={0,1,2,…,p−1}.在GF(p)上定义加法⊕和乘法⊙分别为模p加法和模p乘法,即任意的a,b∈GF(p),a⊕b=(a+b)mod p, a⊙b=(a⋅b)mod p则<GF(p),⊕,⊙>为一个有p个元素的有限域,其中零元素为0,单位元为1.令a为GF(p)中的一个非零元素. 由于gcd(a,p)=1,因此,存在整数b,c,使得ab+pc=1. 由此得到a的逆元为a−1=b mod p.域GF(p)称为一个素域(prime field).例注1:给定a和p,例1中的等式ab+pc=1可以通过扩展的欧几里得除法得到,从而求得GF(p)中任意非零元素的逆元.例2(有限域GF(p n))从GF(p)出发,对任意正整数n,n≥2,我们可以构造元素元素个数为p n的有限域GF(p n)如下:令g(x)为一个GF(p)上次数为n的不可约多项式,集合GF(p n)=GF(p)[x]/⟨g(x)⟩={a0+a1x+a2x2+⋯+a n−1x n−1 | a i∈GF(p),0≤i≤n−1}在GF(p n)上定义加法⊕和乘法⊙分别为模g(x)加法和模g(x)乘法,即任意的a(x),b(x)∈GF(p n),a(x)⊕b(x)=a(x)+b(x), a(x)⊙b(x)=(a(x)⋅b(x))mod g(x)则<GF(p n),⊕,⊙>为一个有p n个元素,特征为p的有限域,其中零元素为GF(p)中的0,单位元为GF(p)中的1.令a(x)为GF(p n)中的一个非零元素. 由于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)mod g(x).域GF(p n)称为GF(p)的(n次)扩域(extension field),而GF(p)称为GF(p n)的子域(subfield).例注2.1:给定GF(p)上的多项式a(x)和g(x),例2中的等式a(x)b(x)+g(x)c(x)=1可以通过扩展的欧几里得除法得到,从而求得GF(p n)中任意非零元素的逆元.例注2.2:设GF(q)是一个含有q个元素的有限域. 对任意正整数n, GF(q)上的n次不可约多项式一定存在. 更进一步,GF(q)上首项系数为1的n 次不可约多项式的个数为N q(n)=1n∑d|nμ(nd)q d=1n∑d|nμ(d)q n/d其中μ为Moebius函数,定义为μ(m)=⎧⎩⎨1(−1)k0如果m=1如果m=p1p2⋯p k,其中p1,p2,…,p k为互不相同的素数其它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)上的极小多项式(minimal polynomial of α over GF(p)).特别地,若α∈GF(q)为GF(q)的一个本原元,则α在GF(p)上的极小多项式称为GF(p)上的一个本原多项式(primitive polynomial for GF(q) over GF(p)).定义注1:对任意的α∈GF(q),α在GF(p)上的极小多项式存在并且唯一,并且α在GF(p)上的极小多项式为GF(p)上的一个不可约多项式.定义注2:设α∈GF(q),则α和αp在GF(p)上具有相同的极小多项式. 更进一步,集合B(α)={α,αp,αp2,αp3,…,αp i,…}中的元素具有相同的极小多项式. 设q=p n,则αp n=α. 因此,集合B(α)中互不相同的元素的个数(记为r)不超过n. 可以证明,α为GF(q)的一个本原元当且仅当r=n.定理:设GF(q)是一个含有q个元素的有限域,GF(p)是GF(q)的一个含有p个元素的子域. 设α∈GF(q),r为满足αp r=α的最小正整数. 则α在GF(p)上的极小多项式g(x)是一个r次不可约多项式,并且B(α)={α,αp,αp2,…,αp r−1}中的元素为g(x)在GF(q)上的所有不同的根,即g(x)=(x−α)(x−αp)(x−αp2)⋯(x−αp r−1).注:r的计算方法如下:设α在F∗q中的阶为k. 集合Z∗k={m | 0≤m≤k−1,gcd(m,k)=1}在模k乘法运算下是一个含有φ(k)个元素的有限群(其中φ为欧拉(Euler)函数). 则r等于p mod k在Z∗k中的阶.推论:设GF(q)是一个含有q个元素的有限域,GF(p)是GF(q)的一个含有p个元素的子域. 设|GF(q)|=p n,即q=p n. 设α∈GF(q)为GF(q)的一个本原元,则α在GF(p)上的极小多项式g(x)的次数为n,并且g(x)=(x−α)(x−αp)(x−αp2)⋯(x−αp n−1).更进一步,α,αp,αp2,…,αp n−1均为GF(q)的本原元.注:设GF(p)是一个含有p个元素的有限域,n是任意一个正整数,则GF(p)上的n次本原多项式一定存在. 更进一步,GF(p)上的首项系数为1的n 次本原多项式的个数为φ(p n−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)={a m−1D m−1+a m−2D m−2+⋯+a1D+a0, | a i∈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 00001 10012 D0103 D+10114 D21005 D2+1101GF(23)GF(2)[D]/⟨p(D)⟩二进制6 D2+D1107 D2+D+1111GF(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. Primitive polynomial = D^3+D^2+1 (13 decimal) Array elements =0 1 2 3 4 5 6 7如果不指定本原多项式,则 Matlab 将使用默认本原多项式. 例如>> gf(0:7,3)ans = GF(2^3) array. Primitive polynomial = D^3+D+1 (11 decimal) Array elements =0 1 2 3 4 5 6 7在这里例子中,Matlab 使用了3次本原多项式D3+D+1.如果不指定次数M和本原多项式PRIM_POLY,则生成二元域GF(2)中的元素.>> gf(0:1)ans = GF(2) array.Array elements =0 1生成的有限域中的数组可以参与运算(+、、.、.^、\等). 注意:参与运算的操作数必须来自同一个有限域,用于生成有限域的本原多项式也必须相同!一个典型的例子是计算有限域的乘法表如下:>> GF8 = gf(0:7,3)GF8 = GF(2^3) array. Primitive polynomial = D^3+D+1 (11 decimal) Array elements =0 1 2 3 4 5 6 7>> GF8'*GF8ans = GF(2^3) array. Primitive polynomial = D^3+D+1 (11 decimal) Array elements =0 0 0 0 0 0 0 00 1 2 3 4 5 6 70 2 4 6 3 1 7 50 3 6 5 7 4 1 20 4 3 7 6 2 5 10 5 1 4 2 7 3 60 6 7 1 5 3 2 40 7 5 2 1 6 4 3>> GF8 = gf(0:7,3,13)GF8 = GF(2^3) array. Primitive polynomial = D^3+D^2+1 (13 decimal) Array elements =0 1 2 3 4 5 6 7>> GF8'*GF8Warning: Lookup tables not defined for this order 2^3 andprimitive polynomial 13. Arithmetic still workscorrectly but multiplication, exponentiation, andinversion of elements is faster with lookup tables.Use gftable to create and save the lookup tables.> In gf.gettables at 35In gf.mtimes at 20ans = GF(2^3) array. Primitive polynomial = D^3+D^2+1 (13 decimal) Array elements =0 0 0 0 0 0 0 00 1 2 3 4 5 6 70 2 4 6 5 7 1 30 3 6 5 1 2 7 40 4 5 1 7 3 2 60 5 7 2 3 6 4 10 6 1 7 2 4 3 50 7 3 4 6 1 5 2在这里我们用两个不同的本原多项式构造有限域GF(23),得到两张不同的乘法表.注1:当我们计算GF(2)[D]/⟨D3+D2+1⟩的乘法表时,Matlab 给产生一个警告“Warning: Lookup tables not defined for this order 2^3 and primitive polynomial 13.” 从警告中我们可以看出,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+1D^3+D^2+1ans =1113>> primpoly(3,'all','nodisplay')ans =1113isprimitive函数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 =。
matlab有限域上的运算
1 有限域基础知识1、1有限域(Galois域)得构造令p为一个素数、则对任意得一个正整数n,存在一个特征为p,元素个数为p n得有限域GF(p n)、注:任意一个有限域,其元素得个数一定为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)mod p则〈GF(p),⊕,⊙>为一个有p个元素得有限域,其中零元素为0,单位元为1、令a为GF(p)中得一个非零元素、由于gcd(a,p)=1,因此,存在整数b,c,使得ab+pc=1、由此得到a得逆元为a−1=bmo dp、域GF(p)称为一个素域(primefield)、例注1:给定a与p,例1中得等式ab+pc=1可以通过扩展得欧几里得除法得到,从而求得GF(p)中任意非零元素得逆元、例2(有限域GF(pn))从GF(p)出发,对任意正整数n,n≥2,我们可以构造元素元素个数为p n得有限域GF(p n)如下:令g(x)为一个GF(p)上次数为n得不可约多项式,集合GF(p n)=GF(p)[x]/⟨g(x)⟩={a0+a1x+a2x2+⋯+an−1x n−1 | a i∈GF(p),0≤i≤n−1}ﻫ在GF(p n)上定义加法⊕与乘法⊙分别为模g(x)加法与模g (x)乘法,即任意得a(x),b(x)∈GF(p n),a(x)⊕b(x)=a(x)+b(x),a(x)⊙b(x)=(a(x)⋅b(x))mod g(x)ﻫ则〈GF(pn),⊕,⊙>为一个有pn个元素,特征为p得有限域,其中零元素为GF(p)中得0,单位元为GF(p)中得1、令a(x)为GF(p n)中得一个非零元素、由于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)mod g(x)、域GF(pn)称为GF(p)得(n次)扩域(extension field),而GF(p)称为GF(pn)得子域(subfield)、例注2、1:给定GF(p)上得多项式a(x)与g(x),例2中得等式a(x)b (x)+g(x)c(x)=1可以通过扩展得欧几里得除法得到,从而求得GF(p n)中任意非零元素得逆元、例注2、2:设GF(q)就是一个含有q个元素得有限域、对任意正整数n, GF(q)上得n次不可约多项式一定存在、更进一步,GF(q)上首项系数为1得n次不可约多项式得个数为Nq(n)=1n∑d|nμ(nd)qd=1n∑d|nμ(d)q n/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)上得极小多项式(minimal polynomial of α over GF(p))、特别地,若α∈GF(q)为GF(q)得一个本原元,则α在GF(p)上得极小多项式称为GF(p)上得一个本原多项式(primitive polynomial for GF(q) over GF(p))、定义注1:对任意得α∈GF(q),α在GF(p)上得极小多项式存在并且唯一,并且α在GF(p)上得极小多项式为GF(p)上得一个不可约多项式、定义注2:设α∈GF(q), 则α与αp在GF(p)上具有相同得极小多项式、更进一步,集合B(α)={α,αp,αp2,αp3,…,αpi,…}ﻫ中得元素具有相同得极小多项式、设q=p n,则α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,…,αp r−1}ﻫ中得元素为g(x)在GF(q)上得所有不同得根,即g(x)=(x−α)(x−αp)(x−αp2)⋯(x−αp r−1)、注:r得计算方法如下:设α在F∗q中得阶为k、集合Z∗k={m | 0≤m≤k−1,gcd(m,k)=1}ﻫ在模k乘法运算下就是一个含有φ(k)个元素得有限群(其中φ为欧拉(Euler)函数)、则r等于p mod k在Z∗k中得阶、推论:设GF(q)就是一个含有q个元素得有限域,GF(p)就是GF(q)得一个含有p个元素得子域、设|GF(q)|=p n,即q=p n、设α∈GF(q)为GF(q)得一个本原元,则α在GF(p)上得极小多项式g(x)得次数为n,并且g(x)=(x−α)(x−αp)(x−αp2)⋯(x−αp n−1)、ﻫ更进一步,α,αp,αp2,…,αp n−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)得本原元、2Matlab 中得有限域计算函数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−2D m−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 00001 10012 D0103 D+10114 D21005 D2+11016 D2+D1107 D2+D+1111GF(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、Primitive polynomial = D^3+D^2+1 (13 decimal)Array elements =0 1 2 3 4 5 6 7如果不指定本原多项式,则 Matlab 将使用默认本原多项式、例如〉〉gf(0:7,3)ans = GF(2^3) array、 Primitive polynomial= D^3+D+1 (11 decimal)Array elements =0 1 2 3 45 6 7在这里例子中,Matlab 使用了3次本原多项式D3+D+1、如果不指定次数M与本原多项式PRIM_POLY,则生成二元域GF(2)中得元素、〉〉 gf(0:1)ans = GF(2) array、Array elements =0 1生成得有限域中得数组可以参与运算(+、、、、、^、\等)、注意:参与运算得操作数必须来自同一个有限域,用于生成有限域得本原多项式也必须相同!一个典型得例子就是计算有限域得乘法表如下:〉〉 GF8 =gf(0:7,3)GF8 = GF(2^3)array、Primitive polynomial = D^3+D+1 (11 decimal)Array elements =0 12 3 4 5 6 7〉〉 GF8'*GF8ans = GF(2^3) array、Primitive polynomial = D^3+D+1 (11decimal)Array elements=0 0 0 0 0 0 0 00 1 2 3 4 5 6 70 2 4 6 3 17 50 3 6 5 7 4 1 20 4 3 7 6 2 5 10 5 1 4 2 7 360 6 7 1 5 3 2 40 752 1 6 4 3>> GF8 =gf(0:7,3,13)GF8 = GF(2^3) array、Primitive polynomial = D^3+D^2+1 (13 decimal)Array elements =0 1 2 3 4 567>> GF8’*GF8Warning:Lookup tables notdefined for this order 2^3 and primitive polynomial13、Arithmetic still workscorrectly but multiplication, exponentiation,and inversion of elementsis faster with lookup tables、Use gftable to create and save thelookup tables、> In gf、gettables at 35Ingf、mtimes at 20ans =GF(2^3) array、 Primitive polynomial = D^3+D^2+1 (13 decimal)Array elements=0 00 0 0 0 0 00 1 2 3 4 5 6 702 4 6 5 7 1 30 3 6 5 1 2 7 40 4 5 1 7 3 2 60 5 7 2 3 6 4 10 6 1 7 2 4 350 7 3 4 6 1 5 2在这里我们用两个不同得本原多项式构造有限域GF(23),得到两张不同得乘法表、注1:当我们计算GF(2)[D]/⟨D3+D2+1⟩得乘法表时,Matlab给产生一个警告“Warning: Lookup tables not defined for thisorder 2^3 and primitive polynomial 13、” 从警告中我们可以瞧出,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+1D^3+D^2+1ans =1113>〉primpoly(3,’all',’nodisplay’)ans =1113isprimitive函数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 =。
Matlab矩阵运算介绍
Matlab 矩阵运算说明:这一段时间用Matlab做了LDPC码的性能仿真,过程中涉及了大量的矩阵运算,本文记录了Matlab中矩阵的相关知识,特别的说明了稀疏矩阵和有限域中的矩阵。
Matlab的运算是在矩阵意义下进行的,这里所提到的是狭义上的矩阵,即通常意义上的矩阵。
目录第一部分:矩阵基本知识一、矩阵的创建1.直接输入法2.利用Matlab函数创建矩阵3.利用文件创建矩阵二、矩阵的拆分1.矩阵元素2.矩阵拆分3.特殊矩阵三、矩阵的运算1.算术运算2.关系运算3.逻辑运算四、矩阵分析1.对角阵2.三角阵3.矩阵的转置与旋转4.矩阵的翻转5.矩阵的逆与伪逆6.方阵的行列式7.矩阵的秩与迹8.向量和矩阵的范数9.矩阵的特征值与特征向量五、字符串六、其他第二部分矩阵的应用一、稀疏矩阵1.稀疏矩阵的创建2.稀疏矩阵的运算3.其他二、有限域中的矩阵内容第一部分:矩阵基本知识(只作基本介绍,详细说明请参考Matlab帮助文档)矩阵是进行数据处理和运算的基本元素。
在MATLAB中a、通常意义上的数量(标量)可看成是”1*1″的矩阵;b、n维矢量可看成是”n*1″的矩阵;c、多项式可由它的系数矩阵完全确定。
一、矩阵的创建在MATLAB中创建矩阵有以下规则:a、矩阵元素必须在”[ ]“内;b、矩阵的同行元素之间用空格(或”,”)隔开;c、矩阵的行与行之间用”;”(或回车符)隔开;d、矩阵的元素可以是数值、变量、表达式或函数;e、矩阵的尺寸不必预先定义。
下面介绍四种矩阵的创建方法:1、直接输入法最简单的建立矩阵的方法是从键盘直接输入矩阵的元素,输入的方法按照上面的规则。
建立向量的时候可以利用冒号表达式,冒号表达式可以产生一个行向量,一般格式是: e1:e2:e3,其中e1为初始值,e2为步长,e3为终止值。
还可以用linspace函数产生行向量,其调用格式为:linspace(a,b,n) ,其中a和b 是生成向量的第一个和最后一个元素,n是元素总数。
matlab的数值运算
matlab的数值运算当使用MATLAB 进行数值运算时,可以使用各种内置函数和运算符进行计算。
下面是一些常见的数值运算操作的详细说明:基本数学运算:加法:使用"+" 运算符进行两个数的相加。
例如,计算2 和3 的和:2 + 3。
减法:使用"-" 运算符进行两个数的相减。
例如,计算5 减去2 的结果:5 - 2。
乘法:使用"*" 运算符进行两个数的相乘。
例如,计算4 乘以3 的结果:4 * 3。
除法:使用"/" 运算符进行两个数的相除。
例如,计算10 除以2 的结果:10 / 2。
取余数:使用"mod" 函数或"%" 运算符计算两个数的余数。
例如,计算11 除以3 的余数:mod(11, 3) 或11 % 3。
幂运算:使用"^" 运算符进行幂运算。
例如,计算2 的3 次幂:2^3。
数学函数:MATLAB 提供了许多内置的数学函数,可以进行各种数值计算和分析操作。
这些函数包括但不限于:abs(x):返回x 的绝对值。
sin(x):返回x 的正弦值。
cos(x):返回x 的余弦值。
exp(x):返回e 的x 次幂,其中e 是自然对数的底数。
log(x):返回x 的自然对数。
sqrt(x):返回x 的平方根。
round(x):返回x 的四舍五入值。
floor(x):返回不大于x 的最大整数。
ceil(x):返回不小于x 的最小整数。
max(x, y):返回x 和y 中的较大值。
min(x, y):返回x 和y 中的较小值。
数组运算:MATLAB 中的数值计算通常涉及数组操作。
可以对向量、矩阵和多维数组执行各种运算,例如:矩阵相加:使用"+" 运算符对两个相同大小的矩阵进行元素级别的相加。
矩阵相乘:使用"" 运算符对两个矩阵进行乘法运算。
MATLAB的基本运算
例
>> x= 3; >> z1 = exp(x)
>> y= -3; >> z1 = exp(y) >> f= 2+ 4i; >> z3 = exp(f)
第二章 MATLAB的基本运算
实战4:函数 log
功能 自然对数,即以e为底数的对数。 格式 Y = log(X) % 对参量X中的每一个元素计算自然对数。 % 其中X中的元素可以是复数与负数,但由此可能得到意想不到的结果 % 若z = x + i*y,则log对复数的计算如下: % log (z) = log (abs (z)) + i*atan2(y,x)
第二章 MATLAB的基本运算 四、现实问题转化为数学模型 例如:哥哥弟弟年龄问题。
哥哥比弟弟大19岁,哥哥年龄是弟弟的3 倍还多1,问:哥哥和弟弟的年龄分别是多少?
第二章 MATLAB的基本运算 四、现实问题转化为数学模型 例如:吃桃问题。
桃子1毛钱一个,每3个桃核可以换一 个桃子。如果有一元钱,10个核桃,问:一 共能吃到多少桃子?
%复数的模
第二章 MATLAB的基本运算
实战2:函数 sqrt
功能 求平方根函数 格式 Y = sqrt(X) % 数值的平方根运算 例 >> x= 16; >> z1 = sqrt(x) >> y= -18; >> z2 = sqrt(y)
>> f= 2+ 4i; >> z3 = sqrt(f)
第二章 MATLAB的基本运算 二、变量 5 清除变量 clear:清除所有定义过的变量。 clear 变量名:清除某个变量。
matlab域上的运算
m a t l a b域上的运算Document serial number【UU89WT-UU98YT-UU8CB-UUUT-UUT108】1 有限域基础知识有限域(Galois域)的构造令p为一个素数. 则对任意的一个正整数n,存在一个特征为p,元素个数为pn的有限域GF(pn).注:任意一个有限域,其元素的个数一定为pn,其中p为一个素数(有限域的特征),n为一个正整数.例1(有限域GF(p))令p为一个素数,集合GF(p)=Z p={0,1,2,…,p?1}.在GF(p) 上定义加法⊕和乘法⊙分别为模p加法和模p乘法,即任意的a,b∈GF(p),a⊕b=(a+b)mod p,?a⊙b=(a?b)mod p则 <GF(p),⊕,⊙> 为一个有p个元素的有限域,其中零元素为 0,单位元为 1.令a为GF(p) 中的一个非零元素. 由于gcd(a,p)=1,因此,存在整数b,c,使得ab+pc=1. 由此得到a的逆元为a?1=b mod p.域GF(p) 称为一个素域(prime field).例注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))mod g(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)mod g(x).域GF(pn) 称为GF(p) 的(n次)扩域(extension field),而GF(p) 称为GF(pn) 的子域(subfield).例注:给定GF(p) 上的多项式a(x) 和g(x),例2中的等式a(x)b(x)+g(x)c(x)=1 可以通过扩展的欧几里得除法得到,从而求得GF(pn) 中任意非零元素的逆元.例注:设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为互不相同的素数其它有限域的性质令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) 上的极小多项式(minimal polynomial of α over GF(p)).特别地,若α∈GF(q) 为GF(q) 的一个本原元,则α在GF(p) 上的极小多项式称为GF(p) 上的一个本原多项式(primitive polynomial for GF(q) over GF(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等于p mod k在 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.由“ 有限域的构造” 的“例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)?二进制00000110012D0103D+10114D21005D2+11016D2+D1107D2+D+1111GF(2) 上的多项式由系数组成的二进制所对应的(十进制)数字来表示. 例如,多项式p(D)=D3+D+1 的系数组成的二进制为 1011,因此,多项式p(D) 表示为数字 11.定义有限域数组在 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. Primitive polynomial = D^3+D^2+1 (13 decimal)Array elements =0 1 2 3 4 5 6 7如果不指定本原多项式,则 Matlab 将使用默认本原多项式. 例如>> gf(0:7,3)ans = GF(2^3) array. Primitive polynomial = D^3+D+1 (11 decimal)Array elements =0 1 2 3 4 5 6 7在这里例子中,Matlab 使用了 3 次本原多项式D3+D+1.如果不指定次数M和本原多项式PRIM_POLY,则生成二元域GF(2) 中的元素.>> gf(0:1)ans = GF(2) array.Array elements =0 1生成的有限域中的数组可以参与运算(+、、.、.^、\等). 注意:参与运算的操作数必须来自同一个有限域,用于生成有限域的本原多项式也必须相同!一个典型的例子是计算有限域的乘法表如下:>> GF8 = gf(0:7,3)GF8 = GF(2^3) array. Primitive polynomial = D^3+D+1 (11 decimal) Array elements =0 1 2 3 4 5 6 7>> GF8'*GF8ans = GF(2^3) array. Primitive polynomial = D^3+D+1 (11 decimal) Array elements =0 0 0 0 0 0 0 00 1 2 3 4 5 6 70 2 4 6 3 1 7 50 3 6 5 7 4 1 20 4 3 7 6 2 5 10 5 1 4 2 7 3 60 6 7 1 5 3 2 40 7 5 2 1 6 4 3>> GF8 = gf(0:7,3,13)GF8 = GF(2^3) array. Primitive polynomial = D^3+D^2+1 (13 decimal)Array elements =0 1 2 3 4 5 6 7>> GF8'*GF8Warning: Lookup tables not defined for this order 2^3 and primitive polynomial 13. Arithmetic still workscorrectly but multiplication, exponentiation, andinversion of elements is faster with lookup tables.Use gftable to create and save the lookup tables.> In at 35In at 20ans = GF(2^3) array. Primitive polynomial = D^3+D^2+1 (13 decimal)Array elements =0 0 0 0 0 0 0 00 1 2 3 4 5 6 70 2 4 6 5 7 1 30 3 6 5 1 2 7 40 4 5 1 7 3 2 60 5 7 2 3 6 4 10 6 1 7 2 4 3 50 7 3 4 6 1 5 2在这里我们用两个不同的本原多项式构造有限域GF(23),得到两张不同的乘法表.注1:当我们计算GF(2)[D]/?D3+D2+1? 的乘法表时,Matlab 给产生一个警告“Warning: Lookup tables not defined for this order 2^3 and primitive polynomial 13.” 从警告中我们可以看出,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+1D^3+D^2+1ans =1113>> primpoly(3,'all','nodisplay')ans =1113isprimitive函数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 =。
MATLAB中常见的数学运算函数介绍
MATLAB中常见的数学运算函数介绍一、基本数学运算在MATLAB中,有许多常见的基本数学运算函数,包括加减乘除、求幂(指数运算)等。
这些函数在数学计算中经常用到,以下是几个例子:1. 加法函数:在MATLAB中,可以使用"+"运算符进行加法运算。
例如,对于两个变量a和b,可以使用a + b来进行加法运算。
2. 减法函数:在MATLAB中,使用"-"运算符进行减法运算。
例如,a - b可以实现对a和b进行减法运算。
3. 乘法函数:在MATLAB中,使用"*"运算符进行乘法运算。
例如,a * b可以实现对a和b进行乘法运算。
4. 除法函数:在MATLAB中,使用"/"运算符进行除法运算。
例如,a / b可以实现对a和b进行除法运算。
5. 幂函数:在MATLAB中,使用"^"运算符进行幂运算。
例如,a ^ b可以实现对a进行b次幂运算。
这些基本数学运算函数可以在MATLAB中灵活应用,完成各种数学运算任务。
二、三角函数与反三角函数MATLAB也提供了一系列的三角函数和反三角函数,这些函数在数学计算和科学工程中都有广泛的应用。
以下是几个例子:1. 正弦函数:在MATLAB中,可以使用sin函数来计算一个角度的正弦值。
例如,sin(x)可以计算角度x的正弦值。
2. 余弦函数:在MATLAB中,可以使用cos函数来计算一个角度的余弦值。
例如,cos(x)可以计算角度x的余弦值。
3. 正切函数:在MATLAB中,可以使用tan函数来计算一个角度的正切值。
例如,tan(x)可以计算角度x的正切值。
4. 反正弦函数:在MATLAB中,可以使用asin函数来计算一个值的反正弦值。
例如,asin(x)可以计算值x的反正弦值。
5. 反余弦函数:在MATLAB中,可以使用acos函数来计算一个值的反余弦值。
例如,acos(x)可以计算值x的反余弦值。
matlab有限元计算
matlab有限元计算有限元计算是一种常用的数值计算方法,广泛应用于工程领域。
而Matlab作为一种强大的数值计算软件,提供了丰富的工具和函数,使得有限元计算变得更加简单和高效。
有限元计算是一种将连续问题离散化为有限个简单子问题的方法。
它将复杂的连续问题转化为离散的有限元网格,然后通过求解每个单元上的方程,最终得到整个问题的解。
有限元计算可以用于求解结构力学、流体力学、热传导等各种物理问题。
在Matlab中进行有限元计算,首先需要构建有限元模型。
有限元模型由节点和单元组成,节点是问题的离散点,单元是连接节点的基本单元。
在Matlab中,可以使用函数如meshgrid、linspace等来生成节点坐标,使用函数如delaunay、trimesh等来生成单元。
然后,需要定义问题的边界条件和加载条件。
边界条件是指在问题的边界上给定的约束条件,加载条件是指在问题中施加的外部力或位移。
在Matlab中,可以使用函数如boundary、findEdges等来定义边界条件,使用函数如force、displacement等来定义加载条件。
接下来,需要定义问题的材料性质和单元特性。
材料性质是指问题中所使用的材料的力学性质,单元特性是指单元的几何形状和材料性质。
在Matlab中,可以使用函数如materialProperties、elementProperties等来定义材料性质和单元特性。
然后,需要建立有限元方程。
有限元方程是通过对每个单元上的方程进行组装得到的整体方程。
在Matlab中,可以使用函数如stiffnessMatrix、loadVector等来建立有限元方程。
最后,需要求解有限元方程。
在Matlab中,可以使用函数如solve、eigs等来求解有限元方程。
求解得到的结果可以用于分析问题的应力、位移、变形等。
除了上述基本步骤,Matlab还提供了丰富的后处理工具和函数,用于可视化和分析有限元计算的结果。
MATLAB-的运算符号及函数
返回结果:ans = 1.8000.
如果不为表达式赋值,MATLAB会将运算结果存入变量ans,并显示其数值于屏幕上.
不过,我们也可将上述运算式结果保存到某个变量中.
例如:>> x (2 3 3 4) / 10
返回结果:x = 1.8000
MATLAB表达式遵循四则运算法则,即乘、除优先于加、减,指数运算更优于乘、除运算,而括
号运算级别最高,在多层括号中(均用小括号),从最里层向最外层逐渐脱开.
-1所示)
表8-1
MATLAB 的运算符号及函数
3.常用的函数及常量(如表8-2所示)
注意: (1)在输
入命令时,若每 条命令后为逗号 或无标点符号, 按Enter键后则显 示执行结果,若 每条命令后为分 号则不显示执行 结果.
经济数学
MATLAB 的运算符号及函数
1. 基本运算
MATLAB能识别常用的加(+)、减()、乘()、除(/)及幂次运算符号( )等绝大部分
数学运算符号.因此,要在MATLAB中进行基本数学运算,只需在命令窗口中的提示符(>>)之后直接
输入运算式并按Enter键即可.
例如:>> (2 3 3 4) / 10
(2)“%”后 面所有字符为注 释说明.
表8-2
经济数学
Matlab 有限元法计算分析程序编写
fid_in = fopen( file_in, 'r' ) ; % open input file node_number = fscanf( fid_in, '%d', 1 ) ; %read node number node = zeros( node_number, 2 ) ; for i=1:1:node_number nn = fscanf( fid_in, '%d', 1 ) ; node( i, : ) = fscanf( fid_in, '%f', [1,2] ) ; % read node definition end element_number = fscanf( fid_in, '%d', 1 ) ; % read element number element = zeros( element_number, 4 ) ; for i=1:1:element_number ne = fscanf( fid_in, '%d', 1 ) ; element( i, : ) = fscanf( fid_in, '%d', [1,4] ) ; % read element definition end
计算荷载向量
对各节点集中荷载作如下的计算 a)分解成坐标方向的荷载分量 b)按自由度顺序叠加到荷载向量中 对非节点集中荷载作如下的计算 a)在单元局部坐标系下计算等效节点荷载 b)作坐标变换(如果需要) c)按自由度顺序叠加到荷载向量中
引入边界条件
• 最简单的方法是改变主元为十分大的值 (采用这种方法时,可以在刚度方程计算 过程中实施) • 修改刚度方程
a i = βi
MATLAB中的数学运算技巧
MATLAB中的数学运算技巧引言MATLAB是一款功能强大的数学软件,广泛应用于科学、工程等领域。
在MATLAB中,有许多数学运算技巧可以帮助我们更高效地处理各种数学问题。
本文将介绍一些常用的MATLAB数学运算技巧,希望能帮助读者更好地掌握这一工具。
一、符号计算MATLAB的符号计算功能可以让我们进行精确的数学运算,而不仅仅是数值近似。
通过使用符号变量,在MATLAB中可以进行各种代数、微积分和方程求解等高级数学运算。
例如,我们可以使用符号变量来计算多项式的导数。
首先,定义一个符号变量x:```MATLABsyms x```然后,假设我们要计算多项式2x^3+3x^2+4x的导数,可以使用diff函数:```MATLABpoly = 2*x^3 + 3*x^2 + 4*x;diff(poly)```运行上述代码,我们将得到多项式的导数6x^2 + 6x + 4。
这样,符号计算功能可以帮助我们解决各种数学问题,提供更精确的结果。
二、线性代数运算在科学和工程领域中,线性代数是一个非常重要的数学分支。
MATLAB提供了丰富的线性代数函数,帮助我们进行向量和矩阵的计算。
例如,我们可以使用MATLAB的矩阵乘法运算符*来进行矩阵乘法。
假设我们有两个矩阵A和B,想要计算它们的矩阵乘法结果C,可以使用以下代码:```MATLABC = A * B;```此外,MATLAB还提供了求解线性方程组、矩阵求逆和特征值计算等功能,使得线性代数运算更加便捷。
三、数值积分数值积分是一种常见的数学问题,需要将一个函数在一定的区间上进行近似积分。
MATLAB提供了多种数值积分函数,帮助我们计算各种复杂函数的近似积分值。
例如,我们可以使用quad函数来计算定积分。
假设我们要计算函数f(x) = x^2在区间[0, 1]上的定积分,可以使用以下代码:```MATLABf = @(x) x^2;integral = quad(f, 0, 1);```运行上述代码,我们将得到函数f(x) = x^2在区间[0, 1]上的定积分值1/3。
matlab有限元求解微分方程的本征值
一、概述Matlab是一种常用的数学软件,它提供了丰富的工具和函数,可用于解决各种数学问题。
其中,有限元法是一种常用的数值求解方法,它可用于求解微分方程的本征值问题。
本文将探讨如何使用Matlab进行有限元求解微分方程的本征值问题。
二、有限元法简介有限元法是一种数值分析方法,它通过将连续的物理问题离散化为有限数量的单元或网格,然后利用线性代数方法求解离散问题,从而得到原始的连续问题的近似解。
在微分方程的求解中,有限元法可用于求解微分方程的本征值问题,即确定微分方程的本征值和本征函数。
三、使用Matlab进行有限元求解微分方程的本征值问题1. 离散化微分方程需要将微分方程离散化为有限元形式。
这通常涉及将微分方程转化为一个矩阵形式的代数方程组。
对于一维问题,可以将区域离散化为一系列节点,并将微分方程表示为每个节点上的代数方程。
对于二维或三维问题,可以将区域离散化为网格或单元,并在每个单元中求解微分方程。
2. 构建刚度矩阵和质量矩阵一旦微分方程被离散化,就可以构建刚度矩阵和质量矩阵。
刚度矩阵描述了系统的刚度和连接性,质量矩阵描述了系统的质量和惯性。
这两个矩阵可以通过有限元方法和数值积分计算得到。
3. 求解本征值问题一旦刚度矩阵和质量矩阵被构建,就可以通过求解本征值问题来得到微分方程的本征值和本征函数。
这通常涉及求解特征值问题,即寻找一个非零向量,使得矩阵乘以该向量等于特征值乘以该向量。
4. 使用Matlab进行求解Matlab提供了丰富的工具和函数,可用于构建刚度矩阵和质量矩阵,并求解本征值问题。
使用Matlab的有限元工具箱或相关函数,可以方便地进行有限元求解微分方程的本征值问题。
四、案例分析下面通过一个简单的例子来说明如何使用Matlab进行有限元求解微分方程的本征值问题。
考虑一维弦的振动问题,其微分方程为:$$\frac{d^2u}{dx^2} +\omega^2u = 0$$其中$u$为弦的位移,$x$为弦的位置,$\omega$为本征频率。
有限元的MATLAB解法
有限元的MATLAB解法1.打开MATLAB。
2.输入“pdetool”再回车,会跳出PDE Toolbox的窗口(PDE意为偏微分方程,是partial differential equations的缩写),需要的话可点击Options菜单下Grid命令,打开栅格。
3.完成平面几何模型:在PDE Toolbox的窗口中,点击工具栏下的矩形几何模型进行制作模型,可画矩形R,椭圆E,圆C,然后在Set formula栏进行编辑并(如双脊波导R1+R2+R3改为RI-R2-R3,设定a、b、s/a、d/b的值从而方便下步设定坐标)用算术运算符将图形对象名称连接起来,若还需要,可进行储存,形成M文件。
4.用左键双击矩形进行坐标设置:将大的矩形left和bottom都设为0,width是矩形波导的X轴的长度,height是矩形波导的y轴的长度,以大的矩形左下角点为原点坐标为参考设置其他矩形坐标。
5.进行边界设置:点击“Boundary”中的“Boundary Mode”,再点击“Boundary”中的“Specify Boundary Conditions”,选择符合的边界条件,Neumann为诺曼条件,Dirichlet为狄利克雷条件,边界颜色显示为红色。
6.进入PDE模式:点击"PDE"菜单下“PDE Mode”命令,进入PDE 模式,单击“PDE Specification”,设置方程类型,“Elliptic”为椭圆型,“Parabolic”为抛物型,“Hyperbolic”为双曲型,“Eigenmodes”为特征值问题。
7.对模型进行剖分:点击“Mesh”中“Initialize Mesh”进行初次剖分,若要剖的更细,再点击“Refine Mesh”进行网格加密。
8.进行计算:点击“Solve”中“Solve PDE”,解偏微分方程并显示图形解,u值即为Hz或者Ez。
9.单击“Plot”菜单下“Parameters”选项,打开“Plot Selection”对话框。
matlab中对gf后的矩阵求逆
MATLAB是一种用于数学计算和数据可视化的强大工具。
在MATLAB 中,我们经常会遇到需要对GF(伽罗瓦域)后的矩阵进行求逆操作的情况。
GF矩阵求逆是一个复杂且常见的数学运算,它在信息论、编码理论和密码学等领域都有着重要的应用。
本文将着重介绍在MATLAB中对GF后的矩阵进行求逆的方法,希望对读者在实际应用中遇到类似问题时能够提供帮助。
1. 了解GF(伽罗瓦域)GF(Galois Field)是数学中一个重要的概念,也称伽罗瓦域。
在GF 中,加法和乘法运算满足一定的性质:封闭性、交换律、结合律、存在零元素和单位元素、可逆性等。
GF中的元素可以表示为有限域上的多项式形式,求解GF中的逆元素是一个常见的数学问题。
2. GF矩阵求逆的意义在实际应用中,我们经常需要对GF后的矩阵进行求逆操作。
比如在编码理论中,数据通常会进行编码处理,编码后的数据可以理解为GF中的矩阵。
当需要进行解码操作时,就需要对编码后的矩阵进行逆运算,以恢复原始数据。
GF矩阵求逆在信息传输和存储中具有重要意义。
3. MATLAB中的GF矩阵求逆方法在MATLAB中,求解GF矩阵的逆可以使用“inv”函数。
假设有一个GF矩阵A,我们可以通过如下方法求解其逆矩阵:```matlabA_inv = gf(inv(A), m);```其中,inv(A)表示对矩阵A进行求逆操作,gf()函数用于将数值转换为GF中的元素,m表示GF的阶数。
通过这个简单的步骤,就可以在MATLAB中得到GF矩阵A的逆矩阵A_inv。
4. 实际示例为了更加直观地演示在MATLAB中对GF矩阵进行求逆的方法,我们可以假定一个具体的GF矩阵,并进行求逆操作。
假设有一个4阶GF(2^3)域中的矩阵:A = [1 2 3; 4 5 6; 7 8 9];我们可以通过如下方法求解其逆矩阵:```matlabA_gf = gf(A, 3); 将A转换为GF(2^3)中的矩阵A_inv = gf(inv(A_gf), 3); 求解A_gf的逆矩阵```通过以上代码,在MATLAB中就可以得到GF矩阵A的逆矩阵A_inv。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1 有限域基础知识1.1 有限域(Galois域)的构造令p为一个素数. 则对任意的一个正整数n,存在一个特征为p,元素个数为p n的有限域GF(p n).注:任意一个有限域,其元素的个数一定为p n,其中p为一个素数(有限域的特征),n为一个正整数.例1(有限域GF(p))令p为一个素数,集合GF(p)=Z p={0,1,2,…,p−1}.在GF(p)上定义加法⊕和乘法⊙分别为模p加法和模p乘法,即任意的a,b∈GF(p),a⊕b=(a+b)mod p, a⊙b=(a⋅b)mod p则<GF(p),⊕,⊙>为一个有p个元素的有限域,其中零元素为0,单位元为1.令a为GF(p)中的一个非零元素. 由于gcd(a,p)=1,因此,存在整数b,c,使得ab+pc=1. 由此得到a的逆元为a−1=b mod p.域GF(p)称为一个素域(prime field).例注1:给定a和p,例1中的等式ab+pc=1可以通过扩展的欧几里得除法得到,从而求得GF(p)中任意非零元素的逆元.例2(有限域GF(p n))从GF(p)出发,对任意正整数n,n≥2,我们可以构造元素元素个数为p n的有限域GF(p n)如下:令g(x)为一个GF(p)上次数为n的不可约多项式,集合GF(p n)=GF(p)[x]/⟨g(x)⟩={a0+a1x+a2x2+⋯+a n−1x n−1 | a i∈GF(p),0≤i≤n−1}在GF(p n)上定义加法⊕和乘法⊙分别为模g(x)加法和模g(x)乘法,即任意的a(x),b(x)∈GF(p n),a(x)⊕b(x)=a(x)+b(x), a(x)⊙b(x)=(a(x)⋅b(x))mod g(x)则<GF(p n),⊕,⊙>为一个有p n个元素,特征为p的有限域,其中零元素为GF(p)中的0,单位元为GF(p)中的1.令a(x)为GF(p n)中的一个非零元素. 由于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)mod g(x).域GF(p n)称为GF(p)的(n次)扩域(extension field),而GF(p)称为GF(p n)的子域(subfield).例注2.1:给定GF(p)上的多项式a(x)和g(x),例2中的等式a(x)b(x)+g(x)c(x)=1可以通过扩展的欧几里得除法得到,从而求得GF(p n)中任意非零元素的逆元.例注2.2:设GF(q)是一个含有q个元素的有限域. 对任意正整数n, GF(q)上的n次不可约多项式一定存在. 更进一步,GF(q)上首项系数为1的n 次不可约多项式的个数为N q(n)=1n∑d|nμ(nd)q d=1n∑d|nμ(d)q n/d其中μ为Moebius函数,定义为μ(m)=⎧⎩⎨1(−1)k0如果m=1如果m=p1p2⋯p k,其中p1,p2,…,p k为互不相同的素数其它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)上的极小多项式(minimal polynomial of α over GF(p)).特别地,若α∈GF(q)为GF(q)的一个本原元,则α在GF(p)上的极小多项式称为GF(p)上的一个本原多项式(primitive polynomial for GF(q) over GF(p)).定义注1:对任意的α∈GF(q),α在GF(p)上的极小多项式存在并且唯一,并且α在GF(p)上的极小多项式为GF(p)上的一个不可约多项式.定义注2:设α∈GF(q),则α和αp在GF(p)上具有相同的极小多项式. 更进一步,集合B(α)={α,αp,αp2,αp3,…,αp i,…}中的元素具有相同的极小多项式. 设q=p n,则αp n=α. 因此,集合B(α)中互不相同的元素的个数(记为r)不超过n. 可以证明,α为GF(q)的一个本原元当且仅当r=n.定理:设GF(q)是一个含有q个元素的有限域,GF(p)是GF(q)的一个含有p个元素的子域. 设α∈GF(q),r为满足αp r=α的最小正整数. 则α在GF(p)上的极小多项式g(x)是一个r次不可约多项式,并且B(α)={α,αp,αp2,…,αp r−1}中的元素为g(x)在GF(q)上的所有不同的根,即g(x)=(x−α)(x−αp)(x−αp2)⋯(x−αp r−1).注:r的计算方法如下:设α在F∗q中的阶为k. 集合Z∗k={m | 0≤m≤k−1,gcd(m,k)=1}在模k乘法运算下是一个含有φ(k)个元素的有限群(其中φ为欧拉(Euler)函数). 则r等于p mod k在Z∗k中的阶.推论:设GF(q)是一个含有q个元素的有限域,GF(p)是GF(q)的一个含有p个元素的子域. 设|GF(q)|=p n,即q=p n. 设α∈GF(q)为GF(q)的一个本原元,则α在GF(p)上的极小多项式g(x)的次数为n,并且g(x)=(x−α)(x−αp)(x−αp2)⋯(x−αp n−1).更进一步,α,αp,αp2,…,αp n−1均为GF(q)的本原元.注:设GF(p)是一个含有p个元素的有限域,n是任意一个正整数,则GF(p)上的n次本原多项式一定存在. 更进一步,GF(p)上的首项系数为1的n 次本原多项式的个数为φ(p n−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)={a m−1D m−1+a m−2D m−2+⋯+a1D+a0, | a i∈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 00001 10012 D0103 D+10114 D21005 D2+1101GF(23)GF(2)[D]/⟨p(D)⟩二进制6 D2+D1107 D2+D+1111GF(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. Primitive polynomial = D^3+D^2+1 (13 decimal) Array elements =0 1 2 3 4 5 6 7如果不指定本原多项式,则 Matlab 将使用默认本原多项式. 例如>>gf(0:7,3)ans = GF(2^3) array. Primitive polynomial = D^3+D+1 (11 decimal) Array elements =0 1 2 3 4 5 6 7在这里例子中,Matlab 使用了3次本原多项式D3+D+1.如果不指定次数M和本原多项式PRIM_POLY,则生成二元域GF(2)中的元素.>>gf(0:1)ans = GF(2) array.Array elements =0 1生成的有限域中的数组可以参与运算(+、、.、.^、\等). 注意:参与运算的操作数必须来自同一个有限域,用于生成有限域的本原多项式也必须相同!一个典型的例子是计算有限域的乘法表如下:>> GF8 = gf(0:7,3)GF8 = GF(2^3) array. Primitive polynomial = D^3+D+1 (11 decimal) Array elements =0 1 2 3 4 5 6 7>> GF8'*GF8ans = GF(2^3) array. Primitive polynomial = D^3+D+1 (11 decimal) Array elements =0 0 0 0 0 0 0 00 1 2 3 4 5 6 70 2 4 6 3 1 7 50 3 6 5 7 4 1 20 4 3 7 6 2 5 10 5 1 4 2 7 3 60 6 7 1 5 3 2 40 7 5 2 1 6 4 3>> GF8 = gf(0:7,3,13)GF8 = GF(2^3) array. Primitive polynomial = D^3+D^2+1 (13 decimal) Array elements =0 1 2 3 4 5 6 7>> GF8'*GF8Warning: Lookup tables not defined for this order 2^3 andprimitive polynomial 13. Arithmetic still workscorrectly but multiplication, exponentiation, andinversion of elements is faster with lookup tables.Use gftable to create and save the lookup tables.> In gf.gettables at 35In gf.mtimes at 20ans = GF(2^3) array. Primitive polynomial = D^3+D^2+1 (13 decimal) Array elements =0 0 0 0 0 0 0 00 1 2 3 4 5 6 70 2 4 6 5 7 1 30 3 6 5 1 2 7 40 4 5 1 7 3 2 60 5 7 2 3 6 4 10 6 1 7 2 4 3 50 7 3 4 6 1 5 2在这里我们用两个不同的本原多项式构造有限域GF(23),得到两张不同的乘法表.注1:当我们计算GF(2)[D]/⟨D3+D2+1⟩的乘法表时,Matlab给产生一个警告“Warning: Lookup tables not defined for this order 2^3 and primitive polynomial 13.” 从警告中我们可以看出,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+1D^3+D^2+1ans =1113>>primpoly(3,'all','nodisplay')ans =1113isprimitive函数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 =。