matlab有限域上的运算
matlab中的基本运算
matlab中的基本运算
MATLAB中的基本运算包括数学运算、逻辑运算、矩阵运算和字符串运算等,具体如下:
1.数学运算:包括加减乘除、幂运算、三角函数等,例如:
a=2+3;%加法运算。
b=6-4;%减法运算。
c=5*2;%乘法运算。
d=10/2;%除法运算。
e=3^2;%幂运算。
f = sin(0.5); %三角函数。
2.逻辑运算:包括与、或、非、等于、不等于等,例如:
a=5<10;%小于运算。
b=5>10;%大于运算。
c=5==10;%等于运算。
d=5~=10;%不等于运算。
e=(3<5)&&(4>2);%逻辑与运算。
f=(3<5)||(4>6);%逻辑或运算。
g=~(4<6);%逻辑非运算。
3.矩阵运算:包括矩阵加减乘除、转置、求逆、行列式等,例如:
A=[12;34];%定义矩阵。
B=[56;78];。
C=A+B;%矩阵加法。
D=A-B;%矩阵减法。
E=A*B;%矩阵乘法。
F=A/B;%矩阵除法。
G=A';%矩阵转置。
H = inv(A); %矩阵求逆。
I = det(A); %矩阵求行列式。
4.字符串运算:包括字符串连接、子串提取等,例如:str1 = 'Hello,';。
str2 = 'world!';。
str3 = [str1 str2]; %字符串连接。
使用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的关系运算、逻辑运算和符号计算
第3讲 Matlab的关系、逻辑运算与符号计算本讲要点:1.非数、"空"数组2.关系运算3.逻辑运算4.符号计算一、“非数”和“空”数组 (1)1、非数NaN (1)2、“空”数组 (3)二、运算符 (6)1、算数运算符 (6)2、关系运算 (6)3、逻辑运算符 (8)三、MATLAB的符号计算 (11)1、sym函数 (12)2、syms函数 (14)3、符号表达式中变量的确定:findsym (15)4、符号表达式与数值表达式的转换 (17)5、符号极限:limit (17)6、符号微分与差分:diff (18)7、符号积分:int (20)8、符号代数方程求解:solve (21)一、“非数”和“空”数组1、非数NaN(1)非数的产生和性质按IEEE 规定,∞∞∞⨯∞∞-000,,,等运算都会产生非数(Not a number )。
该非数在Matlab 中用NaN 或nan 记述。
NaN 具有以下性质:● NaN 参与运算所得的结果也是NaN ,即具有传递性。
● 非数没有“大小”概念,因此不能比较两个非数的大小。
(2)非数的功用● 真实记述∞∞∞⨯∞∞-000,,,运算的结果。
● 数据统计中,很多用Nan 替代缺失数据。
● 避免可能因∞∞∞⨯∞∞-000,,,运算而造成程序执行的中断。
在测量数据处理中,标识非正常点。
【例1】非数的产生和性质演示。
本例演示:运算中如何产生非数;在运算过程中的传递;非数如何判断。
(1)非数的产生cleara=0/0,b=0*log(0),c=inf-inf % 不同表达式之间用逗号隔开时,结果仍然照常显示;若用分号隔开时,结果不会输出a =NaNb =NaNc =NaN(2)非数的传递性cleara=0/00*asin(a)a =NaNans =NaNans =NaN(3)非数的属性判断cleara=0/0class(a) % 数据类型归属isnan(a) % 正确判断非数与否a =NaNans =doubleans =12、“空”数组“空”数组是Matlab为操作和表述需要而专门设计的一种数组。
实验一MATLAB基本操作及运算
实验一MATLAB基本操作及运算MATLAB是一种强大的数值计算和数据可视化工具,广泛应用于科学研究、工程设计、数据分析等领域。
本文将介绍MATLAB的基本操作和运算。
首先,我们需要了解MATLAB中的基本数据类型,包括数值型、字符型和逻辑型。
数值型可以是整数、实数、复数等;字符型用单引号或双引号包围字符;逻辑型用true和false表示。
MATLAB提供了各种数学运算函数,包括四则运算、三角函数、指数函数等。
例如,加法可以使用加号(+),减法可以使用减号(-),乘法可以使用乘号(*),除法可以使用除号(/)。
三角函数可以使用sin、cos、tan等函数,指数函数可以使用exp函数。
此外,还可以使用log 函数进行对数运算。
MATLAB还可以进行矩阵运算。
矩阵可以使用方括号([])表示,每一行用分号(;)分隔。
可以使用矩阵乘法运算符(*)进行矩阵相乘,使用点乘运算符(.)进行矩阵对应元素的运算。
矩阵还可以进行转置、逆运算等。
除了基本运算,MATLAB还提供了各种其他功能。
例如,可以使用plot函数进行数据可视化,使用subplot函数绘制多个图形。
可以使用for循环和while循环进行循环操作,使用if语句进行条件判断。
MATLAB还可以进行文件读写操作。
可以使用load函数从文件中加载数据,使用save函数将数据保存到文件中。
可以使用fopen函数打开文件,使用fclose函数关闭文件。
可以使用fprintf函数写入文本文件,使用fscanf函数读取文本文件。
还可以使用imread函数读取图像文件,使用imwrite函数保存图像文件。
MATLAB还具备向量化的能力。
向量化是指使用矩阵代替循环进行计算,能够提高代码的执行效率。
例如,可以使用点乘运算符(.)对矩阵的每个元素进行计算,而不是使用循环逐个计算。
使用向量化的方法,可以更加简洁地编写代码。
在MATLAB中还有很多强大的功能等待探索,例如符号计算、模拟仿真、深度学习等。
Maple常用计算命令
Maple常用计算命令常用计算命令《Maple 指令》7.0版本第1xx xx数1.1 复数Re,Im - 返回复数型表达式的实部/虚部abs - 函数argument - 复数的幅角函数conjugate - 返回共轭复数csgn - 实数和复数表达式的符号函数signum - 实数和复数表达式的sign 函数5 1.2 MAPLE 常数已知的变量名称指数常数(以自然对数为底)I - x^2 = -1 的根infinity 无穷大1.3 整数函数! - 阶乘函数irem, iquo - 整数的余数/商isprime - 素数测试isqrfree - 无整数平方的因数分解max, min - 数的最大值/最小值mod, modp, mods - 计算对m 的整数模rand - 随机数生成器randomize - 重置随机数生成器1.4 素数Randpoly, Randprime - 有限域的随机多项式/首一素数多项式ithprime - 确定第i 个素数nextprime, prevprime - 确定下一个最大/最小素数1.5 数的进制转换convert/base - 基数之间的转换convert/binary - 转换为二进制形式convert/decimal - 转换为10 进制convert/double - 将双精度浮点数由一种形式转换为另一种形式convert/float - 转换为浮点数convert/hex - 转换为十六进制形式convert/metric - 转换为公制单位convert/octal - 转换为八进制形式1.6 数的类型检查type - 数的类型检查函数第2xx 初等数学2.1 初等函数product - 确定乘积求和不确定乘积exp - 指数函数sum - 确定求和不确定求和sqrt - 计算xx算术运算符+, -, *, /, ^add, mul - 值序列的加法/乘法2.2 三角函数arcsin, arcsinh, . - 反三角函数/反双曲函数sin, sinh, . - 三角函数/双曲函数2.3 LOGARITHMS 函数dilog - Dilogarithm 函数ln, log, log10 - 自然对数/一般对数,常用对数2.4 类型转换convert/`+`,convert/`*` - 转换为求和/乘积convert/hypergeom - 将求和转换为超越函数convert/degrees - 将弧度转换为度convert/expsincos - 将trig 函数转换为exp, sin, cos convert/Ei - 转换为指数积分convert/exp - 将trig 函数转换为指数函数convert/ln - 将arctrig 转换为对数函数polar - 转换为极坐标形式convert/radians - 将度转换为弧度convert/sincos - 将trig 函数转换为sin, cos, sinh, cosh convert/tan - 将trig 函数转换为tanconvert/trig - 将指数函数转换为三角函数和双曲函数第3xx 求值3.1 假设功能3.2 求值Eval - 对一个表达式求值eval - 求值evala - 在代数数(或者函数)域求值evalb - 按照一个求值evalc - 在复数域上符号求值evalf - 使用浮点算法求值evalhf - 用硬件浮点数算法对表达式求值evalm - 对矩阵表达式求值evaln - 求值到一个名称evalr, shake - 用区间算法求表达式的值和计算范围evalrC - 用复数区间算法对表达式求值value - 求值的惰性函数第4xx 求根,xx4.1 数值解fsolve - 利用浮点数算法求解solve/floats - 包含浮点数的表达式4.2 最优化extrema - 寻找一个表达式的相对极值minimize, maximize - 计算最小值/最大值maxnorm - 一个多项式无穷大范数4.3 求根allvalues -计算含有RootOfs的表达式的所有可能值isqrt, iroot - 整数的xx/第n 次根realroot - 一个多项式的实数根的隔离区间root - 一个代数表达式的第n 阶根RootOf - 方程根的表示surd - 非主根函数roots - 一个多项式对一个变量的精确根turm, sturmseq - 多项式在区间上的实数根数和实根序列4.4 xx eliminate - 消去一个方程组中的某些变量isolve - 求解方程的整数解solvefor - 求解一个方程组的一个或者多个变量isolate - 隔离一个方程左边的一个子表达式singular - 寻找一个表达式的极点solve/identity - 求解包含属性的表达式solve/ineqs - 求解不等式solve/linear - 求解线性方程组solve/radical - 求解含有未知量根式的方程solve/scalar - 标量情况(单变量和方程)solve/series - 求解含有一般级数的方程solve/system - 解方程组或不等式组第5xx 操作表达式5.1 处理表达式Norm - 代数数(或者函数) 的标准型Power - 惰性幂函数Powmod -带余数的惰性幂函数Primfield - 代数域的原始元素Trace - 求一个代数数或者函数的迹charfcn - 表达式和集合的特征函数Indets - 找一个表达式的变元invfunc - 函数表的逆powmod - 带余数的幂函数Risidue - 计算一个表达式的代数余expand - 表达式展开Expand - 展开表达式的惰性形式expandoff/expandon - 抑制/不抑制函数展开5.2 因式分解Afactor - 绝对因式分解的惰性形式Afactors - 绝对因式分解分解项列表的惰性形式Berlekamp - 因式分解的Berlekamp 显式度factor - 多元的多项式的因式分解factors - 多元多项式的因式分解列表Factor - 函数factor 的惰性形式Factors - 函数factors 的惰性形式polytools[splits] - 多项式的完全因式分解第6xx 化简6.1 表达式化简118simplify - 给一个表达式实施化简规则simplify/@ - 利用运算符化简表达式simplify/Ei - 利用指数积分化简表达式simplify/GAMMA - 利用GAMMA 函数进行化简simplify/RootOf - 用RootOf 函数化简表达式simplify/wronskian - 化简含wronskian 的表达式simplify/hypergeom - 化简超越函数表达式simplify/ln - 化简含有对数的表达式simplify/piecewise - 化简分段函数表达式simplify/polar - 化简含有极坐标形式的复数型表达式simplify/power - 化简含幂次的表达式simplify/radical - 化简含有根式的表达式simplify/rtable - 化简rtable 表达式simplify/siderels - 使用关系式进行化简simplify/sqrt - 根式化简simplify/trig - 化简trig 函数表达式simplify/zero - 化简含嵌入型实数和虚数的复数表达式6.2 其它化简操作Normal - normal 函数的惰性形式convert - 将一个表达式转换成不同形式radnormal - 标准化一个含有根号数的表达式rationalize - 分母有理化第7xx 操作多项式7.0 MAPLE 中的多项式简介7.1 提取coeff - 提取一个多项式的系数coeffs - 提取多元的多项式的所有系数coeftayl - 多元表达式的系数lcoeff, tcoeff - 返回多元多项式的首项和末项系数7.2 多项式约数和根gcd, lcm - 多项式的最大公约数/最小公倍数psqrt, proot - 多项式的xx和第n次根rem,quo - 多项式的余数/商7.3 操纵多项式convert/horner - 将一个多项式转换成Horner形式collect - 象幂次一样合并系数convert/polynom - 将级数转换成多项式形式convert/mathorner - 将多项式转换成Horner矩阵形式convert/ratpoly - 将级数转换成有理多项式sort - 将值的列表或者多项式排序sqrfree - 不含平方项的因数分解函数7.4 多项式运算discrim - 多项式的判别式fixdiv - 计算多项式的固定除数norm - 多项式的标准型resultant - 计算两个多项式的终结式bernoulli - Bernoulli 数和多项式bernstein - 用Bernstein多项式近似一个函数content, primpart - 一个多元的多项式的内容和主部degree, ldegree - 一个多项式的最高次方/最低次方divide - 多项式的精确除法euler - Euler 数和多项式icontent - 多项式的整数部分interp - 多项式的插值prem, sprem - 多项式的pseudo 余数和稀疏pseudo 余数randpoly - 随机多项式生成器spline - 计算自然样条函数第8xx 有理表达式8.0 有理表达式简介8.1 操作有理多项式numer,denom - 返回一个表达式的分子/分母frontend - 将一般的表达式处理成一个有理表达式normal - 标准化一个有理表达式convert/parfrac - 转换为部分分数形式convert/rational - 将浮点数转换为接近的有理数ratrecon - 重建有理函数第9xx 微积分9.1 取极限Limit, limit - 计算极限limit[dir] - 计算方向极限limit[multi] - 多重方向极限limit[return] - 极限的返回值9.2 连续性测试discont - 寻找一个函数在实数域上的间断点fdiscont - 用数值法寻找函数在实数域上的间断点iscont - 测试在一个区间上的连续性9.3 微分计算D - 微分算子D, diff - 运算符D 和函数diffdiff, Diff - 微分或者偏微分convert/D - 将含导数表达式转换为D运算符表达式convert/diff- 将D(f)(x)表达式转换为diff(f(x),x)的形式implicitdiff - 由一个方程定义一个函数的微分9.4 积分计算Si, Ci … - 三角和双曲积分Dirac, Heaviside - Dirac 函数/Heaviside阶梯函数Ei - 指数积分Elliptic -FresnelC, … - Fresnel 正弦,xx积分和辅助函数int, Int - 定积分和不定积分LegendreP, … - Legendre 函数及其第一和第二类函数Li - 对数积分student[changevar] - 变量代换dawson - Dawson 积分ellipsoid - 椭球体的表面积evalf(int) - 数值积分intat, Intat - 在一个点上积分求值第10xx 微分方程10.1 微分方程分类odeadvisor - ODE-求解分析器DESol - 表示微分方程解的pdetest - 测试pdsolve 能找到的偏微分方程(PDEs)解10.2 常微分方程求解dsolve - 求解常微方程(ODE)dsolve - 用给定的求解ODE 问题dsolve/inttrans - 用积分变换方法求解常微分方程dsolve/numeric - 常微方程数值解dsolve/piecewise - 带分段系数的常微方程求解dsolve - 寻找ODE 问题的级数解dsolve - 求解ODEs 方程组odetest - 从ODE 求解器中测试结果是显式或者隐式类型10.3 偏微分方程求解pdsolve - 寻找偏微分方程(PDEs) 的解析解第11xx 数值计算11.1 MAPLE 中的数值计算环境IEEE 标准和Maple数值计算数据类型特殊值环境变量11.2 算法标准算法复数算法含有0,无穷和未定义数的算法11.3 数据构造器254Float, … - 浮点数及其构造器Fraction - 分数及其的构造器integer - 整数和整数构造器11.4 MATLAB 简介11.5 “”区间类型表达式第12xx级数12.1 幂级数的阶数Order - 阶数项函数order - 确定级数的截断阶数12.2 常见级数展开series - 一般的级数展开taylor - Taylor 级数展开mtaylor - 多元Taylor级数展开poisson - Poisson级数展开.26812.3 其它级数eulermac - Euler-Maclaurin求和piecewise - 分段连续函数asympt - 渐进展开第13xx 特殊函数AiryAi, AiryBi - Airy 波动函数AiryAiZeros, AiryBiZeros - Airy函数的实数零点AngerJ,WeberE - Anger函数和Weber函数BesselI, HankelH1, … - Bessel 函数和Hankel函数BesselJZeros, … - Bessel函数实数零点Beta - Beta函数EllipticModulus - 模数函数k(q)GAMMA, lnGAMMA - 完全和不完全Gamma函数GaussAGM - Gauss 算术的几何平均数JacobiAM, ., - Jacobi 振幅函数和JacobiTheta1, JacobiTheta4 - Jacobi theta函数JacobiZeta - Jacobi 的Zeta函数KelvinBer, KelvinBei - Kelvin函数KummerM, - Kummer M函数和U函数LambertW - LambertW函数LerchPhi - 一般的Lerch Phi函数LommelS1, LommelS2 - Lommel函数MeijerG - 一个xx的Meijer G函数Psi - Digamma 和Polygamma函数StruveH, StruveL - Struve函数WeierstrassP - Weierstrass P函数及其导数WhittakerM - Whittaker 函数Zeta - Zeta 函数erf, … - 误差函数,补充的误差函数和虚数误差函数harmonic - 调和函数hypergeom - xx的超越函数pochhammer - 一般的pochhammer函数polylog - 一般的polylogarithm函数第14xx 线性代数14.1 ALGEBRA(代数)中矩阵,矢量和14.2 LINALG 软件包简介14.3 数据结构矩阵matrices(小写)矢量vectors(矢量)convert/matrix - 将数组,列表,Matrix 转换成matrixconvert/vector - 将列表,数组或Vector 转换成矢量vectorlinalg[matrix] - 生成矩阵matrix(小写)linalg[vector] - 生成矢量vector(小写)14.4 惰性函数Det - 惰性行列式运算符Eigenvals - 数值型矩阵的特征值和特征向量Hermite, Smith - 矩阵的Hermite 和Smith 标准型14.5 LinearAlgebra函数Matrix 定义矩阵Add 加/减矩阵Adjoint 伴随矩阵BackwardSubstitute 求解A . X = B,其中A 为上三角型行阶梯矩阵BandMatrix 带状矩阵Basis 返回向量空间的一组基SumBasis 返回向量空间直和的一组基IntersectionBasis 返回向量空间交的一组基BezoutMatrix 构造两个多项式的Bezout 矩阵BidiagonalForm 将矩阵约化为双对角型CharacteristicMatrix 构造特征矩阵CharacteristicPolynomial 构造矩阵的特征多项式CompanionMatrix 构造一个首一(或非首一)多项式或矩阵多项式的xx (xx)ConditionNumber 计算矩阵关于某范数的条件数ConstantMatrix 构造常数矩阵ConstantVector 构造常数向量Copy 构造矩阵或向量的一份复制CreatePermutation 将一个NAG 主元向量转换为一个置换向量或矩阵CrossProduct 向量的叉积`&x` 向量的叉积DeleteRow 删除矩阵的行DeleteColumn 删除矩阵的列Determinant 行列式Diagonal 返回从矩阵中得到的向量序列DiagonalMatrix 构造(分块)Dimension 行数和列数DotProduct 点积BilinearForm 向量的双线性形式EigenConditionNumbers 计算数值特征值制约问题的特征值或特征向量的条件数Eigenvalues 计算矩阵的特征值Eigenvectors 计算矩阵的特征向量Equal 比较两个向量或矩阵是否相等ForwardSubstitute 求解A . X = B,其中A 为下三角型行阶梯矩阵FrobeniusForm 将一个方阵约化为Frobenius 型(有理标准型)GaussianElimination 对矩阵作消元ReducedRowEchelonForm 对矩阵作xx-约当消元GetResultDataType 返回矩阵或向量运算的结果数据类型GetResultShape 返回矩阵或向量运算的结果形状GivensRotationMatrix 构造Givens 旋转的矩阵GramSchmidt 计算一个正交向量集HankelMatrix 构造一个Hankel 矩阵HermiteForm 计算一个矩阵的Hermite 正规型HessenbergForm 将一个方阵约化为上Hessenberg 型HilbertMatrix 构造xx Hilbert 矩阵HouseholderMatrix 构造Householder 反射矩阵IdentityMatrix 构造一个单位矩阵IsDefinite 检验矩阵的正定性,负定性或不定性IsOrthogonal 检验矩阵是否正交IsUnitary 检验矩阵是否为酉矩阵IsSimilar 确定两个矩阵是否相似JordanBlockMatrix 构造约当块矩阵JordanForm 将矩阵约化为约当型KroneckerProduct 构造两个矩阵的Kronecker xxLeastSquares 方程的最小二乘解LinearSolve 求解线性方程组A . x = bMap 将一个程序映射到一个表达式上,对矩阵和向量在原位置上进行处理MatrixAdd 计算两个矩阵的线性组合VectorAdd 计算两个向量的线性组合MatrixExponential 确定一个矩阵A 的矩阵指数exp(A)MatrixFunction 确定方阵A 的函数F(A)MatrixInverse 计算方阵的逆或矩阵的Moore-Penrose 伪逆MatrixMatrixMultiply 计算两个矩阵的乘积MatrixVectorMultiply 计算一个矩阵和一个列向量的乘积VectorMatrixMultiply 计算一个行向量和一个矩阵的乘积MatrixPower 矩阵的幂MinimalPolynomial 构造矩阵的最小多项式Minor 计算矩阵的子式Multiply 矩阵相乘Norm 计算矩阵或向量的p-范数MatrixNorm 计算矩阵的p-范数VectorNorm 计算向量的p-范数Normalize 向量正规化NullSpace 计算矩阵的零度零空间。
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中对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。
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的基本运算
例
>> 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数学运算及数值计算
—— matlab 具有出色的数值计 算能力,占据世界上数值计算软 件的主导地位
编辑ppt
数值运算的功能
创建矩阵 矩阵运算 多项式运算 线性方程组 数值统计 线性插值 函数优化 微分方程的数值解
编辑ppt
一、MATLAB中的变量类型 数值变量 字符串变量 单元型变量 结构型变量
编辑ppt
a=[1,2,3;4,5,6;7,8,9];a^2 ans =30 36 42
66 81 96 102 126 150
※当一个方阵有复数特征值或负实 特征值时,非整数幂是复数阵。
编辑ppt
a^0.5 ans =
0.4498 + 0.7623i 0.5526 + 0.2068i 0.6555 -0.3487i 1.0185 + 0.0842i 1.2515 + 0.0228i 1.4844 - 0.0385i 1.5873 - 0.5940i 1.9503 - 0.1611i 2.3134 + 0.2717i
strjust 微调字符串 deblank 去除串空格
strmatch 查找匹配的串 eval 执行字符串
编辑ppt
串检验与进制转换函数
详情请参阅帮助(help)
函数名 可实现的功能 函数名 可实现的功能 ischar 字符串检验 isletter 字母检验 iscellstr 串单元阵检验 isspace 空格检验 hex2dec 16→10转换 dec2bin 10→2转换 hex2num 16→双精转换 base2dec n→10转换 dec2hex 10→16转换 dec2base 10→n转换 bin2dec 2→10转换 strings 字串帮助
matlab 有限差分法公式
matlab 有限差分法公式Matlab 有限差分法公式有限差分法(Finite Difference Method)是一种常用的数值计算方法,广泛应用于科学和工程领域中的偏微分方程求解问题。
Matlab是一种强大的数值计算软件,提供了丰富的工具和函数,用于实现有限差分法求解各种偏微分方程。
有限差分法的基本思想是将连续的函数空间离散化为有限的点集,然后利用差分近似来逼近微分方程的导数。
最常用的差分近似形式是中心差分公式,它通过计算函数在某一点及其周围点的差分来近似函数的导数。
中心差分公式的一般形式如下:\[f'(x) \approx \frac{f(x+h) - f(x-h)}{2h}\]其中,\(f'(x)\)表示函数\(f\)在点\(x\)处的导数,\(h\)为步长。
通过适当选择步长,可以提高差分近似的精度。
对于二阶导数的求解,可以使用如下的中心差分公式:\[f''(x) \approx \frac{f(x+h) - 2f(x) + f(x-h)}{h^2}\]有限差分法的核心是将微分方程转化为差分方程,然后利用差分方程的离散解来逼近微分方程的解。
对于一维的偏微分方程,可以将空间离散化为一系列的点,时间离散化为一系列的时间步长,然后利用差分公式逐步迭代求解。
对于二维或三维的偏微分方程,可以将空间离散化为网格,然后利用差分公式在网格上逐步迭代求解。
在Matlab中,可以使用矩阵运算和向量化操作来高效地实现有限差分法。
通过构建差分矩阵和右端项向量,可以将差分方程转化为线性代数方程组,然后利用Matlab提供的线性代数函数来求解方程组。
Matlab还提供了一些专门用于求解偏微分方程的工具箱,如Partial Differential Equation Toolbox,可以进一步简化求解过程。
有限差分法在科学和工程领域中有着广泛的应用。
它可以用于求解热传导方程、扩散方程、波动方程等各种偏微分方程。
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$为本征频率。
- 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 define d 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 =。