matlab有限域上的运算教案资料

合集下载

第一讲MatLab简介及基本运算解读

第一讲MatLab简介及基本运算解读

第一讲 MatLab简介及基本运算教学目标:了解matlab主要功能,学习matlab的基本运算,熟练matlab主窗口,学会使用帮助系统,了解基本的符号概论.掌握用数学软件求解数学问题.教学重点:熟悉MATLAB的主窗口,运用matlab解决数学分析、高等代数中的计算,根据正在学习的相关知识,结合实例,编程计算,掌握相关符号计算命令及函数的使用方法和技巧.教学难点:使用MATLAB帮助系统.要掌握英语和数学专有名词.通过解说,演示以及举例子克服难点难关.一、MatLab简介MATLAB名字由MATrix和 LABoratory 两词的前三个字母组合而成.那是20世纪七十年代后期的事:时任美国新墨西哥大学计算机科学系主任的Cleve Moler教授出于减轻学生编程负担的动机,为学生设计了一组调用LINPACK和EISPACK库程序的“通俗易用”的接口,此即用FORTRAN编写的萌芽状态的MATLAB.经几年的校际流传,在Little的推动下,由Little、Moler、Steve Bangert合作,于1984年成立了MathWorks公司,并把MATLAB正式推向市场.从这时起,MATLAB的内核采用C语言编写,而且除原有的数值计算能力外,还新增了数据图视功能.MATLAB以商品形式出现后,仅短短几年,就以其良好的开放性和运行的可靠性,使原先控制领域里的封闭式软件包(如英国的UMIST,瑞典的LUND和SIMNON,德国的KEDDC)纷纷淘汰,而改以MATLAB为平台加以重建.在时间进入20世纪九十年代的时候,MATLAB 已经成为国际控制界公认的标准计算软件.在欧美大学里,诸如应用代数、数理统计、自动控制、数字信号处理、模拟与数字通信、时间序列分析、动态系统仿真等课程的教科书都把MATLAB作为内容.这几乎成了九十年代教科书与旧版书籍的区别性标志.在那里,MATLAB是攻读学位的大学生、硕士生、博士生必须掌握的基本工具.在国际学术界,MATLAB已经被确认为准确、可靠的科学计算标准软件.在许多国际一流学术刊物上,(尤其是信息科学刊物),都可以看到MATLAB的应用.在设计研究单位和工业部门,MATLAB被认作进行高效研究、开发的首选软件工具.如美国National Instruments公司信号测量、分析软件LabVIEW,Cadence公司信号和通信分析设计软件SPW等,或者直接建筑在MATLAB之上,或者以MATLAB为主要支撑.又如HP公司的VXI硬件,TM公司的DSP,Gage公司的各种硬卡、仪器等都接受MATLAB的支持.MATLAB具有用法简易、可灵活运用、程式结构强又兼具延展性.以下为其几个特色:∙功能强的数值运算 - 在MATLAB环境中,有超过500种数学、统计、科学及工程方面的函数可使用,函数的标示自然,使得问题和解答像数学式子一般简单明了,让使用者可全力发挥在解题方面,而非浪费在电脑操作上.∙先进的资料视觉化功能 - MATLAB的物件导向图形架构让使用者可执行视觉数据分,并制作高品质的图形,完成科学性或工程性图文并茂的文章.∙高阶但简单的程式环境 - 作为一种直译式的程式语言,MATLAB容许使用者在短时间内写完程式,所花的时间约为用 FORTRAN 或 C 的几分之一,而且不需要编译(compile)及联结 (link) 即能执行,同时包含了更多及更容易使用的内建功能.∙开放及可延伸的架构 - MATLAB容许使用者接触它大多数的数学原使码,检视运算法,更改现存函数,甚至加入自己的函数使 MATLAB成为使用者所须要的环境.∙丰富的程式工具箱 - MATLAB的程式工具箱融合了套装前软体的优点,与一个灵活的开放但容易操作之环境,这些工具箱提供了使用者在特别应用领域所需之许多函数.现有工具箱有:符号运算(利用Maple V的计算核心执行)、影像处理、统计分析、讯号处理、神经网路、模拟分析、控制系统、即时控制、系统确认、强建控制、弧线分析、最佳化、模糊逻辑、mu分析及合成、化学计量分析.二、MatLab界面表1 MATLAB系统命令命令含义help在线帮助helpwin在线帮助窗口helpdesk在线帮助工作台demo运行演示程序ver版本信息readme显示Readme文件who显示当前变量whos显示当前变量的详细信息clear清空工作间的变量和函数pack整理工作间的内存load把文件调入变量到工作间save把变量存入文件中退出MATLABquit/exitwhat显示指定的matlab文件lookfor在HELP里搜索关键字which定位函数或文件path获取或设置搜索路径echo命令回显cd改变当前的工作目录pwd显示当前的工作目录dir显示目录内容unix执行unix命令dos执行dos命令!执行操作系统命令computer显示计算机类型在MATLAB系统中使用帮助方式有三:1、是利用help指令,如果你已知要找的题材 (topic) 为何的话,直接键入help <topic>.所以即使身旁没有使用手册,也可以使用help指令查询不熟悉的指令或是题材之用法,例如help sqrt2、是利用lookfor指令,它可以从你键入的关键字(key-word)(即使这个关键字并不是MATLAB的指令)列出所有相关的题材,例如lookfor cosine, lookfor sine.3、是利用指令视窗的功能选单中的Help,从中选取Table of Contents(目录)或是Index(索引).三、基本数学运算在MATLAB下进行基本数学运算,只需将运算式直接打在提示号 >> 后面,并按入Enter键即可.MATLAB将计算的结果以ans显示.例求23[÷12⨯+的算术运算结果.-)]247((1)用键盘在MATLAB指令窗中输入以下内容>> (12+2*(7-4))/3^2(2)在上述表达式输入完成后,按【Enter】键,该就指令被执行.(3)在指令执行后,MATLAB指令窗中将显示以下结果.ans =2我们也可给运算式的结果设定一个变量x:x = (5*2+1.3-0.8)*10^2/25x =42变量x的值可以在下个语句中调用:y= 2*x+1y =851. 变量命名规则:(1)变量名的大小写是敏感.(2)变量的第一个字符必须为英文字母,而且不能超过31个字符.(3)变量名可以包含下连字符、数字,但不能为空格符、标点.2. 系统预定义的变量ans预设的计算结果的变量名eps MATLAB定义的正的极小值=2.2204e-16pi内建的π值(= 3.1415926...)inf∞值,无限大 (1/0)NaN无法定义一个数目 (0/0)i 或 j虚数单位i=j=1nargin函数输入参数个数nargout函数输出参数个数realmax最大的正实数realmin最小的正实数flops浮点运算次数而键入clear则是去除所有定义过的变量名称.3. 表达式MATLAB书写表达式的规则与“手写算式”差不多相同,但要求所有表达式都是以纯文本形式输入.如果一个指令过长可以在结尾加上...(代表此行指令与下一行连续). 例>> 1*2+3*4+5*6+7*8+9*10+11*12+...13*14+15*16ans =744若不想让MATLAB每次都显示运算结果,只需在运算式最后加上分号(;)即可, 如:y = 1034*22+3^5;若要显示变数y的值,直接键入y即可:>>yy =22991MATLAB会忽略所有在百分比符号(%)之后的文字,因此百分比之後的文字均可视为程式的注解(Comments).例:计算圆面积Area = ,半径r = 2,则可键入>> r=2;% 圆半径r = 2,>> area=pi*r^2; % 计算圆面积area>> area =12.5664MATLAB提供基本的算术运算有:加 (+)、减 (-)、乘 (*)、除 (/)、幂次方 (^),范例为:5+3, 5-3, 5*3, 5/3, 5^3.MATLAB提供了6种关系运算符:<(小于)、<=(小于或等于)、>(大于)、>=(大于或等于)、==(等于)、~=(不等于).MATLAB提供了3种逻辑运算符:&(与)、|(或)和~(非).4、MATLAB常用数学函数●三角函数和双曲函数名称含义名称含义名称含义sin正弦csc余割atanh反双曲正切cos余弦asec反正割acoth反双曲余切tan正切acsc反余割sech双曲正割cot余切sinh双曲正弦csch双曲余割asin反正弦cosh双曲余弦asech反双曲正割acos反余弦tanh双曲正切acsch反双曲余割atan反正切coth双曲余切atan2四象限反正切acot反余切asinh反双曲正弦sec正割acosh反双曲余弦●指数函数名称含义名称含义名称含义exp E为底的指数log1010为底的对数pow22的幂log自然对数log22为底的对数sqrt平方根●复数函数名称 含义 名称 含义 名称 含义 abs 绝对值 conj 复数共轭 real 复数实部 angle 相角 imag 复数虚部● 圆整函数和求余函数 名称 含义 名称 含义ceil 向+∞圆整 rem 求余数 fix 向0圆整 round 向靠近整数圆整 floor 向-∞圆整 sign 符号函数mod模除求余● 矩阵变换函数 名称 含义 名称 含义fiplr 矩阵左右翻转 diag 产生或提取对角阵 fipud 矩阵上下翻转 tril 产生下三角 fipdim 矩阵特定维翻转 triu 产生上三角 Rot90矩阵反时针90翻转det行列式的计算● 其他函数 名称 含义 名称 含义min 最小值 max 最大值 mean 平均值 median 中位数 std 标准差 diff 相邻元素的差sort 排序length 个数 norm 欧氏(Euclidean )长度sum 总和 prod 总乘积 dot 内积cumsum 累计元素总和cumprod 累计元素总乘积cross 外积例:>>y = sin(10)*exp(-0.3*4^2) y =-0.0045例:复数ie z i z i z 63212,21,43π=+=+=表达,及计算321z z z z =. (1)经典教科书的直角坐标表示法 z1= 3 + 4i z1 =3.0000 +4.0000i(2)采用运算符构成的直角坐标表示法和极坐标表示法z2 = 1 + 2 * i %运算符构成的直角坐标表示法 z3=2*exp(i*pi/6) %运算符构成的极坐标表示法 z=z1*z2/z3 z2 =1.0000 +2.0000i z3 =1.7321 + 1.0000i z =0.3349 + 5.5801i例:复数矩阵的生成及运算 A=[1,3;2,4]-[5,8;6,9]*iB=[1+5i,2+6i;3+8*i,4+9*i] C=A*B A =1.0000 - 5.0000i 3.0000 - 8.0000i2.0000 - 6.0000i 4.0000 - 9.0000i B =1.0000 + 5.0000i2.0000 + 6.0000i3.0000 + 8.0000i4.0000 + 9.0000i C =1.0e+002 *0.9900 1.1600 - 0.0900i 1.1600 + 0.0900i 1.3700 例:求上例复数矩阵C 的实部、虚部、模和相角. C_real=real(C) C_imag=imag(C)C_magnitude=abs(C)C_phase=angle(C)*180/pi %以度为单位计算相角 C_real = 99 116 116 137 C_imag = 0 -9 9 0 C_magnitude =99.0000 116.3486 116.3486 137.0000 C_phase =0 -4.4365 4.4365 0 例:指令行操作过程示例. (1)若用户想计算51)3.0sin(21+=πy 的值,那末用户应依次键入以下字符y1=2*sin(0.3*pi)/(1+sqrt(5))(2)按【Enter 】键,该指令便被执行,并给出以下结果 y1 =0.5000 若又想计算51)3.0cos(22+=πy ,可以简便地用操作键获得指令,具体办法是: 先用键调回已输入过的指令 y1=2*sin(0.3*pi)/(1+sqrt(5)) ;然后移动光标,把y1改成y2;把 sin 改成 cos 便可.即得 y2=2*cos(0.3*pi)/(1+sqrt(5)) y2 =0.3633注:设置精度值. t = 2.8957e-007digits(8) %精确到小数点后8位 sym(t,'d') ans =.28957372e-6四、阵列与矩阵MATLAB 的运算事实上是以阵列 (array) 及矩阵 (matrix) 方式在做运算.阵列强调元素对元素的运算,而矩阵则采用线性代数的运算方式.宣告一变量为阵列或是矩阵时,须用中括号[ ] 将元素置于其中.阵列为一维元素所构成,而矩阵为多维元素所组成.例如: » x=[1 2 3 4 5 6 7 8] ;% 一维 1x8 阵列例:简单矩阵⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=987654321A 的输入步骤.(1)在键盘上输入下列内容:( 以 ; 区隔各列的元素)A = [1,2,3; 4,5,6; 7,8,9](2)按【Enter 】键,指令被执行.(3)在指令执行后,MATLAB 指令窗中将显示以下结果: A =1 2 3 4 5 6 7 8 9 例:矩阵的分行输入 A=[1,2,3 4,5,6 7,8,9](以下是显示结果)A =1 2 34 5 67 8 9>>a=[1,4,6,8,10] %一维矩阵>>a(3) % a的第三个元素ans =6»x =[1 2 3 4 5 6 7 84 5 6 7 8 9 10 11]; %二维2x8 矩阵» x(3) % x的第三个元素ans =2» x([1 2 5]) % x的第一、二、五个元素ans =1 4 3>> x(2,3) % x的第二行第三列的元素ans =6x(1:5) % x的第前五个元素ans =1 42 5 3» x(10:end) % x的第十个元素后的元素ans =8 6 9 7 10 8 11» x(10:-1:2) % x的第十个元素和第二个元素的倒排ans =8 5 7 4 6 3 5 2 4» x(find(x>5)) % x中大于5的元素ans =6 7 8 6 9 7 10 8 11» x(4)=100 %给x的第四个元素重新给值x =1 2 3 4 5 6 7 84 100 6 7 8 9 10 11» x(3)=[] %删除第三个元素(不是二维数组)x =Columns 1 through 121 4 100 3 6 4 7 5 8 6 9 7Columns 13 through 1510 8 11» x(16)=1 %加入第十六个元素x =Columns 1 through 121 4 100 3 6 4 7 5 8 6 9 7Columns 13 through 1610 8 11 1当元素很多的时候,则须采用以下的方式:» x=(1:2.5:120); % 以:起始值=1,增量值=2,终止值=120的矩阵» x=linspa ce(0,1,100);% 利用linspace,以区隔起始值=0,终止值=1之间,元素数目=100»a=[]%空矩阵a =[]» zeros(2,2)%全为0的矩阵ans =0 000» ones(3,3) %全为1的矩阵ans =1 1 11 1 11 1 1» rand(2,4);%随机矩阵»a=1:7, b=1:0.2:5; %更直接的方式»c=[b a];%可利用先前建立的阵列 a 及阵列 b ,组成新阵列注:以下将阵列的运算符号及其意义列出,除了加减符号外其余的阵列运算符号均须多加. 符号.1. 阵列运算功能(注意:一定要多加. 符号)+加-减.*乘./左除.\右除.^次方.'转置>> a=1:5; a-2 % 从阵列a减2ans =-1 0 1 2 3>> 2*a-1 % 以2乘阵列a再减1ans =1 3 5 7 9>> b=1:2:9; a+b % 阵列a加阵列bans =2 5 8 11 14>> a.*b % 阵列a及b中的元素与元素相乘ans =1 6 15 28 45>> a./b % 阵列a及b中的元素与元素相除ans =1.0000 0.66667 0.6000 0.5714 0.5556>> a.^2 % 阵列中的各个元素作二次方ans =1 4 9 16 25>> 2.^a % 以2为底,以阵列中的各个元素为次方ans =2 4 8 16 32>> b.^a % 以阵列b中的各个元素为底,以阵列a中的各个元素为次方ans =1 9 125 2401 59049>> b=a' % 阵列b是阵列a的转置结果b =123452. 矩阵的几种基本变换操作(1) 通过在矩阵变量后加’的方法来表示转置运算>>a=[10,2,12;34,2,4;98,34,6];>>a'ans =10 34 982 2 3412 4 6(2) 矩阵求逆>>inv(a)ans =-0.0116 0.0372 -0.00150.0176 -0.1047 0.03450.0901 -0.0135 -0.0045(3) 矩阵求伪逆>>pinv(a)ans =-0.0116 0.0372 -0.00150.0176 -0.1047 0.03450.0901 -0.0135 -0.0045(4) 左右反转>>fliplr(a)ans =12 2 104 2 346 34 98(5) 矩阵的特征值>>[u,v]=eig(a)u =-0.2960 0.3635 -0.3600-0.2925 -0.4128 0.7886-0.9093 -0.8352 0.4985v =48.8395 0 00 -19.8451 00 0 -10.9943 (6) 上下反转>>flipud(a)ans =98 34 634 2 410 2 12(7) 旋转90度>>rot90(a)ans =12 4 62 2 3410 34 98(8) 取出上三角和下三角>>triu(a)ans =10 2 120 2 40 0 6>>tril(a)ans =10 0 034 2 098 34 6>>[l,u]=lu(a)l = 0.1020 0.1500 1.00000.3469 1.0000 01.0000 0 0u = 98.0000 34.0000 6.00000 -9.7959 1.91840 0 11.1000 (9) 正交分解>>[q,r]=qr(a)q =-0.0960 -0.1232 -0.9877-0.3263 -0.9336 0.1482-0.9404 0.3365 0.0494r =-104.2113 -32.8179 -8.09890 9.3265 -3.19410 0 -10.9638 (10) 奇异值分解>>[u,s,v]=svd(a)u =0.1003 -0.8857 0.45320.3031 -0.4066 -0.86180.9477 0.2239 0.2277s =109.5895 0 00 12.0373 00 0 8.0778v =0.9506 -0.0619 -0.30410.3014 0.4176 0.85720.0739 -0.9065 0.4156 (11) 求矩阵的范数>>norm(a)ans =109.5895>>norm(a,1)ans =142>>norm(a,inf)ans =138(12) 子矩阵提取已知A=magic(4),提取A矩阵全部奇数行,所有列;提取A矩阵 3,2,1 行、2,3,4 列构成子矩阵;将A矩阵左右翻转; 上下翻转;旋转 90°; 旋转180°. >> A=magic(4)A=16 2 3 135 11 10 89 7 6 124 14 15 1>> B=A(1:2:end,:)B =16 2 3 139 7 6 12>> B2=A([3 2 1],[2 3 4])B2 =7 6 1211 10 82 3 13>> fliplr(A)ans =13 3 2 168 10 11 512 6 7 91 15 14 4>> flipud(A)ans =4 14 15 19 7 6 125 11 10 816 2 3 13>> rot90(A)ans =13 8 12 13 10 6 152 11 7 1416 5 9 4>> rot90(ans)ans =1 15 14 412 6 7 98 10 11 513 3 2 16习题1、求解线性方程组XA=b正确的命令格式是(),其中A,b分别是已知的3×3的可逆矩阵和1×3向量.(A)A/b (B)b/A (C)b\A (D)A\b2、用户可以用命令()设置数据以有理分式的格式输出.3、已知V=-3:3,则逻辑表达式V>2&V<-1|V==3的返回结果是4、已知A=reshape(1:10,2,5),使用单下标提取数值为3的元素的方法是A( ) .5、下面定义元胞数组的语句是().(A)S=zeros(4) (B)S=’struct’(C)S=cell(4) (D)S= struct('Struct',[])6、MATLAB语句A=[1,2,3;4,5,6;7,8,0];A(2,:)*A(:,1)的结果显示为7、运行下面语句,其中一行有错误,在右边下划线上说明错误的原因.A=magic(4);B=A(1:3,:);C=A(:,end:-2:1)D=[B,C]8、运行下面语句,其中一行有错误,在右边下划线上说明错误的原因.A=magic(4);B=A(1:3,:);C=A(:,end:-2:1)D=[B,C]。

matlab的教学课程设计

matlab的教学课程设计

matlab 的教学课程设计一、教学目标本课程的教学目标是使学生掌握 MATLAB 的基本功能和操作,能够运用MATLAB 进行简单的数学计算、数据分析、图形绘制等。

具体目标如下:1.理解 MATLAB 的基本概念,如矩阵、数组、变量等。

2.掌握 MATLAB 的基本运算,如加减乘除、指数对数、三角函数等。

3.熟悉 MATLAB 的数据类型和数据结构。

4.了解 MATLAB 的编程语法和控制结构。

5.能够使用 MATLAB 进行基本的数学计算和数据分析。

6.能够使用 MATLAB 绘制二维和三维图形。

7.能够编写简单的 MATLAB 脚本程序,实现数学模型的求解和优化。

8.能够使用 MATLAB 与其他软件进行数据交换和协同工作。

情感态度价值观目标:1.培养学生的计算思维和问题解决能力。

2.培养学生对科学计算和数据分析的兴趣和热情。

3.培养学生的团队合作意识和交流沟通能力。

二、教学内容本课程的教学内容主要包括 MATLAB 的基本概念、基本运算、数据类型和数据结构、编程语法和控制结构等。

具体安排如下:第 1 课时:MATLAB 简介和基本概念1.MATLAB 的历史和发展2.MATLAB 的界面和基本操作3.MATLAB 的数据类型和数据结构第 2 课时:MATLAB 的基本运算1.矩阵运算2.数组运算3.数学函数运算第 3 课时:MATLAB 的数据类型和数据结构1.数值类型2.字符串类型3.结构体类型第 4 课时:MATLAB 的编程语法和控制结构1.变量和赋值2.循环结构3.条件结构第 5 课时:MATLAB 二维和三维图形绘制1.二维图形绘制2.三维图形绘制第 6 课时:MATLAB 脚本程序设计1.脚本程序的基本结构2.脚本程序的调试和优化三、教学方法本课程的教学方法包括讲授法、案例分析法、实验法等。

具体方法如下:1.讲授法:通过教师的讲解和演示,让学生掌握 MATLAB 的基本概念和操作。

使用MATLAB的有限域计算

使用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有限元分析操作基础共11页

Matlab有限元分析操作基础共11页

Matlab有限元分析20140226为了用Matlab进行有限元分析,首先要学会Matlab基本操作,还要学会使用Matlab进行有限元分析的基本操作。

1. 复习:上节课分析了弹簧系统x推导了系统刚度矩阵2. Matlab有限元分析的基本操作(1)单元划分(选择何种单元,分成多少个单元,标号)(2)构造单元刚度矩阵(列出…)(3)组装系统刚度矩阵(集成整体刚度矩阵)(4)引入边界条件(消除冗余方程)(5)解方程(6)后处理(扩展计算)3. Matlab有限元分析实战【实例1】分析:步骤一:单元划分>>k1=SpringElementStiffness(100)a) 分析SpringAssemble库函数function y = SpringAssemble(K,k,i,j)% This function assembles the element stiffness% matrix k of the spring with nodes i and j into the % global stiffness matrix K.% function returns the global stiffness matrix K% after the element stiffness matrix k is assembled. K(i,i) = K(i,i) + k(1,1);K(i,j) = K(i,j) + k(1,2);K(j,i) = K(j,i) + k(2,1);K(j,j) = K(j,j) + k(2,2);y = K;b) K是多大矩阵?今天的系统刚度矩阵是什么?因为11221212k kk kk k k k-⎡⎤⎢⎥-⎢⎥⎢⎥--+⎣⎦所以10001000200200 100200300-⎡⎤⎢⎥-⎢⎥⎢⎥--⎣⎦?c) K=SpringAssemble(K,k1,1,2) function y = SpringAssemble(K,k,i,j) K(i,i) = K(i,i) + k(1,1);K(i,j) = K(i,j) + k(1,2);K(j,i) = K(j,i) + k(2,1);K(j,j) = K(j,j) + k(2,2);K=SpringAssemble(K,k2,2,3)步骤四:引入边界条件,消除冗余方程>>k=K(2:3,2:3)%构造不含冗余的方程>>f=[0;15]%构造外力列阵步骤五:解方程引例:已知1212u31uu u+=⎧⎨-=⎩,求12u u和解:类似求解KU=F,输入下列Matlab命令:>> K=[1 1;1,-1]>> F=[3;1]>> U=inv(K)*F>> U=K\F(继续弹簧系统求解)>>u=k\f%使用高斯消去法求解>>U=[0 ; u]%构造原方程组>>F=K*U%求出所有外力,含多余计算步骤六:后处理、扩展计算>>u1=[0;U(2)]%构造单元位移>>f1=SpringElementForces(k1,u1)%求单元1内力>>u2=[U(2) ; U(3)]%构造单元2位移>>f2=SpringElementForces(k2,u2)%求单元2内力4. 总结clccleark1=SpringElementStiffness(100)%创建单元刚度矩阵1 k2=SpringElementStiffness(200)%创建单元刚度矩阵2 K=zeros(3,3)%创建空白整体刚度矩阵K=SpringAssemble(K,k1,1,2)%按节点装入单元矩阵1K=SpringAssemble(K,k2,2,3)%按节点装入单元矩阵2k=K(2:3,2:3)%构造不含冗余的方程f=[0;15]%构造外力列阵u=k\f%使用高斯消去法求解U=[0 ; u]%构造系统节点位移列阵F=K*U%求出所有外力,含多余计算u1=[0;U(2)]%构造单元位移f1=SpringElementForces(k1,u1)%求单元1内力u2=[U(2) ; U(3)]%构造单元2位移f2=SpringElementForces(k2,u2)%求单元2内力5. 练习1 Danyi 132 dan 34 3dan 35 4dan 35 dan5 54 dan6 42希望以上资料对你有所帮助,附励志名言3条:1、生气,就是拿别人的过错来惩罚自己。

matlab数学软件的课程设计

matlab数学软件的课程设计

matlab数学软件的课程设计一、教学目标本课程的教学目标是使学生掌握Matlab数学软件的基本操作和应用,能够利用Matlab进行数学计算、数据分析和图形绘制。

具体目标如下:1.知识目标:学生需要了解Matlab软件的基本功能和操作界面,掌握基本的 Matlab 命令和函数,包括数学计算、数据处理、图形绘制等。

2.技能目标:学生能够熟练使用Matlab进行数学计算、数据分析和图形绘制,能够独立完成简单的数学软件项目。

3.情感态度价值观目标:通过本课程的学习,学生能够理解数学软件在科学研究和工程应用中的重要性,提高数学素养和科学计算能力。

二、教学内容本课程的教学内容主要包括Matlab软件的基本操作、数学计算、数据处理和图形绘制。

具体安排如下:1.第一章:Matlab软件的基本操作和界面熟悉。

2.第二章:Matlab的数学计算功能,包括线性代数、微积分、概率统计等。

3.第三章:Matlab的数据处理功能,包括数据导入导出、数据清洗、数据分析等。

4.第四章:Matlab的图形绘制功能,包括基本图形绘制、三维图形绘制、图形编辑等。

三、教学方法本课程采用讲授法、操作演示法、案例分析法和小组讨论法相结合的教学方法。

1.讲授法:用于讲解Matlab软件的基本概念和操作方法。

2.操作演示法:通过实际操作演示,使学生掌握Matlab软件的使用技巧。

3.案例分析法:通过分析实际案例,使学生学会运用Matlab解决实际问题。

4.小组讨论法:通过小组讨论,激发学生的学习兴趣和主动性。

四、教学资源本课程的教学资源包括教材、多媒体资料、实验设备和网络资源。

1.教材:选用《Matlab教程》作为主要教材,辅助以相关参考书籍。

2.多媒体资料:制作课件、操作视频等,以便于学生复习和自学。

3.实验设备:提供计算机实验室,供学生进行实践操作。

4.网络资源:推荐相关和论坛,供学生交流和学习。

五、教学评估本课程的教学评估采用多元化的评价方式,包括平时表现、作业、考试等,以全面客观地评价学生的学习成果。

Matlab中的运算Matlab软件与基础数学实验学习PPT教案

Matlab中的运算Matlab软件与基础数学实验学习PPT教案

22
►f=inline('1./((x-0.3).^2+0.01)+1./((x-0.9).^2+0.04)-6'); fplot(f,[0,2]); grid c=fzero(f,[0,2]) %求 f(x)在[0,2]上的零点
◄ c= 1.2995
► c=fzero(f,1) %求 f(x)在 x=1附近的零点 ◄ c=
B的每个元素减 s
矩阵乘法
A的每个元素乘以数 s A的每个元素除以数 s A右除 B( B)inv( A) A左除 B( in)v( A) B A的 次n幂
点运算
A. B.C B. / C B.^ n
含义
矩阵 A的转置
同型矩阵中对应运 算相乘
同型矩阵中对应运 算相除
B中每一元素的 n
次幂
2
▪ 二、矩阵的建立和访问
法1 plot
►x=0:0.01:2;
y=1./((x-0.3).^2+0.01)+1./((x-0.9).^2+0.04)-6;
plot(x,y,'linewidb])
►f=inline('1./((x-0.3).^2+0.01)+1./((x-0.9).^2+0.04)-6');
[v,d]=eig(a)
◄ v=
-0.2320 -0.7858 0.4082
-0.5253 -0.0868 -0.8165
-0.8187 0.6123 0.4082
d=
16.1168 0
0
0
-1.1168 0
0
0
-0.0000
12
矩阵元素的修改

MATLAB在有限域教学中的应用

MATLAB在有限域教学中的应用
表 1 GF( 24 ) 中各元素的极小多项式
图 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有限域上的运算

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一、课程目标知识目标:1. 学生能理解有限元分析的基本原理,掌握运用MATLAB进行有限元建模和求解的基本步骤。

2. 学生能够运用MATLAB软件进行简单物理场的有限元模拟,并解释模拟结果。

3. 学生掌握如何将实际问题抽象为有限元模型,并能够运用MATLAB进行模型参数的设定和调整。

技能目标:1. 学生能够独立操作MATLAB软件,进行有限元模型的构建和求解。

2. 学生能够通过MATLAB编程实现有限元模型的自动化处理,包括前处理、求解和后处理。

3. 学生通过解决实际问题,提高数值分析能力和计算机应用能力。

情感态度价值观目标:1. 学生培养对科学研究的兴趣,特别是在工程计算和仿真领域。

2. 学生通过解决实际问题,体会数学和工程结合的美,增强对工程问题的探究欲望。

3. 学生通过团队合作解决问题,培养协作精神和解决问题的能力。

本课程针对高年级本科生或研究生,他们具备一定的数学基础和编程能力。

课程性质偏重实践,旨在通过MATLAB这一工具将有限元理论应用于具体问题的求解。

课程目标旨在使学生不仅掌握理论知识,而且能够实际操作,将理论知识转化为解决实际问题的技能。

通过课程学习,学生应能够将所学知识应用于未来的学术研究或工程实践中。

二、教学内容1. 有限元方法基本原理回顾:包括有限元离散化、单元划分、形函数、刚度矩阵和载荷向量等概念。

- 教材章节:第二章 有限元方法基础2. MATLAB编程基础:介绍MATLAB的基本操作、数据结构、流程控制、函数编写等。

- 教材章节:第三章 MATLAB编程基础3. MATLAB中的有限元工具箱使用:学习如何使用MATLAB内置的有限元工具箱进行建模和求解。

- 教材章节:第四章 MATLAB有限元工具箱介绍4. 有限元模型构建与求解:结合实际问题,学习如何构建有限元模型,并进行求解。

- 教材章节:第五章 有限元模型构建与求解5. 实例分析与上机操作:通过案例分析,让学生实际操作MATLAB软件,解决具体的有限元问题。

第三章数学运算(MATLAB实用教程教案及源程序)

第三章数学运算(MATLAB实用教程教案及源程序)

X=U\(L\B)
矩阵的行列式和逆也可以利用LU分解 来计算,如 det(A)=det(L)*det(U)
inv(A)=inv(U)*inv(L)
对 于 稀 疏 矩 阵 , 在 MATLAB 中 提 供 了 函 数
luinc()来做不完全LU分解,其具体用法如下:
[L U]= luinc(X,DROPTOL),其中X、L和U
在MATLAB中QR分解是由函数qr()来 实现,其具体用法如下:
[Q,R] = qr(A) 满足A=Q*R。
R = qr(A), 返回上三角矩阵R。
4.奇异值分解
奇异值分解就是将mn的矩阵A分解为 A=U*S*V’,其中U为mm的酉矩阵,V 为nn的酉矩阵,S为mn的矩阵,并可如 下表示:
的含义与函数lu()中的变量相同,DROPTOL为
不完全LU分解的丢失容限。当DROPTOL设为0 时,退化为完全LU分解。 [L,U] = luinc(X,‘0’),0级不完全LU分解。 [L,U,P] = luinc(X,'0'),0级不完全LU分解。
3.QR分解
QR分解就是将m×n的矩阵A分解为 m×n的矩阵Q和n×n的上三角矩阵R的乘 积,且Q‘*Q=I,即A=Q*R。
第1题。
7.计算矩阵A每个元素的指数、开平方和余弦值 (元素单位为度),其中A如第1题。
8. 计算复数矩阵C每个元素的模、相角和共轭。
3+4i C 2
2-i -2
-i 0
9. 分别使用函数fix()、floor()、ceil()和
round(),计算第8题中的相角结果。
10.将2-i的模结果近似为有理数,并以数值形式
不存在平方根X。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

m a t l a b有限域上的运算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+11016 D2+D110GF(23)GF(2)[D]/⟨p(D)⟩二进制7 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 =。

相关文档
最新文档