《高等代数实验》PPT课件.ppt
1,高等代数实验,2,预备实验 MATLAB使用练习,3,MATLAB是MATrix LABoratory的缩写,它将计算、可视化和编程功能集成在非常便于使用的环境中,是一个交互式的、以矩阵计算为基础的科学和工程计算软件。MATLAB的特点可以简要地归纳如下:,4,编程效率高 与Fortran、C等语言相比,它更接近我们通常进行计算时的思维方法,用它编程犹如在纸上书写计算公式,编程时间和程序量大大减少。计算功能强 它以不必指定维数的矩阵和数组作为主要数据对象,矩阵和向量计算功能特别强,库函数也很丰富,非常适用于科学和工程计算。,5,使用简便 其语言灵活、方便,将编译、连接、执行融为一体,在同一画面上排除书写、语法等错误,加快了用户编写、修改、调试程序的速度,计算结果也用人们十分熟悉的数学符号表示出来。具有初步计算机知识的人几个小时就可以基本掌握它。易于扩充 用户根据需要建立的文件可以与库函数一样被调用,从而提高了使用效率,扩充了计算功能,它还可以与Fortran、C语言子程序混合编程。,6,此外,它还有很方便的绘图功能。为了解决各种特殊的科学和工程计算问题,MATLAB系统提供了许多个工具箱,如优化工具箱、统计工具箱和符号运算工具箱等。,7,1 概述,1.1 数据术语1)矩阵:由mn个数组成的排成m行n列的一个矩形的数表,其中00矩阵为空矩阵()。数表中第i(1im)行第j(1jn)列的数据称为矩阵元素 2)标量:11的矩阵,即为只含一个数的矩阵。3)向量:1n或n1的矩阵,即只有一行的或者一列的矩阵。只有一行的矩阵称为行向量,只有一列的矩阵称为列向量。数表中第i(1in)个数据称为向量元素。4)数组:矩阵的延伸,一般指多维数组,其中标量、向量和矩阵都是数组的特例。,8,1.2 数据类型数据类型包括数值型、字符串型、元胞型、构架型等。数值型有单精度型、双精度型和整数型。整数型有uint8,uint16,uint32和uint64等无符号型和int8,int16,int32和int64等符号型整数。数值型数据可以用带小数点的形式和科学计数法表示,数值的表示范围是10-30910+309。-20、1.25、2.88e-56(表示2.8810-56)、7.68e204(表示7.6810204)都是合法的数据表示。一般在计算时采用双精度型,在输出时有多种数值显示格式可供选择。,9,数值显示格式的设置通过format 命令,格式如下:format short 默认设置,以5位数字形式输出 format long 以15位十进制数形式输出format short e 以5位十进制数加指数形式输出format long e 以16位十进制数加指数形式输出format short g 从format short和format short e 中自动选择最佳输出形式,10,format long g 从format long和format long e 中自动选择最佳输出形式format hex 以16位十六进制数形式输出format+以正号、负号和零形式输出format bank 以两位小数形式输出format rat 以近似分数形式输出format loose 以稀疏格式(变量与执行结果之 间有空行)输出 format compact 以紧凑格式(变量与执行结果之 间无空行)输出,11,2 变量,2.1变量的命名变量的命名规则为:1 变量名必须以字母开头,变量名的组成可以是任意字母、数字或者下划线,但不能含有空格和标点符号。2 关键字和函数名不能作为变量名。3 变量名不能超过63个字符。4 变量名区分字母的大小写,即大小写敏感。大小写是否区分可以通过命令casesen on/off进行切换(如果不区分大小写,为casesen off,否则为casesen on)。,12,2.2变量的赋值变量的赋值通常有两种形式:1 变量=表达式 2 表达式其中表达式是用运算符将有关运算量连接起来的式子,其结果是一个数组。形式1中,=代表的是赋值操作,将表达式的值赋给MATLAB的变量;形式2中,将表达式的值赋给MATLAB的临时变量ans。,13,例2-1 在命令窗口输入下述语句,并按回车键执行,分别给变量a、b、c赋值:,a=1%a为标量b=0 1%b为行向量c=1 2;3 4;5 6%c为矩阵即二维数组,14,2.3 特殊变量eps MATLAB定义的正的极小值2.2204e-16Realmax 最大的正实数1.7977e+308Realmin 最小的正实数2.2251e-308Pi 内建的值i,j 虚数单位i=j=-1Inf NaN 无法定义一个数目 Nargin 函数输入参数个数Nargout 函数输出参数个数Flops 浮点运算次数,15,2.4内存变量的管理1 内存变量的显示与删除1)who 用于显示在MATLAB工作空间中已 经驻留的变量名清单。2)whos 在给出变量名的同时,还给出它们 的大小、所占字节数及数据类型等 信息。3)clear 删除MATLAB工作空间中的变量。注 意,特殊变量不能被删除。,16,例2-2 查询例2-1中语句执行后工作空间中 的变量情况。在命令窗口输入 who执行结果为:Your variables are:a b c在命令窗口输入 whos执行结果为:Name Size Bytes Class a 1x1 8 double array b 1x2 16 double array c 3x2 48 double arrayGrand total is 10 elements using 72 bytes,17,2 工作空间浏览器工作空间浏览器窗口用于显示所有MATLAB工作空间中的变量名、数据结构、类型、大小和字节数,也可以对变量进行观察、编辑、提取和保存。,18,3 内存变量文件 利用MAT文件可以把MATLAB工作空间中的一些有用变量久地保留下来。MAT文件的生成和调入由save和load命令来完成1)save的格式为:save 文件名 变量名表-append-ascii 功能:把工作空间中的变量存入磁盘。其中变量名表指出需存储的变量,append为数据填加方式,ascii为数据形式2)load的格式为:load 文件名 变量名表-ascii功能:磁盘上存储的mat数据文件取回到MATLAB工作空间中。参数含义同save。,19,例2-3:例2-1中语句执行后,在命令窗口 依次输入下述命令:Save%变量a,b和c保存在matlab.matSave mydata1.mat%变量a,b和c保存在 mydata2.matsave mydata2.mat a%变量a保存在 mydata2.matsave mydata3.mat a b%变量a和b保存在 mydata3.matsave mydata4.mat a b c%变量a,b和c保存在 mydata4.mat,20,3 图形功能,3.1 直角坐标系的二维图形Plot:直角坐标系的二维图形的绘制函数三种调用格式:1)plot(y,s)功能:当y是向量时,元素的序号作为x坐标,元素值作为y坐标,对应绘制线性直角坐标系的二维图形。当y是矩阵时,元素的所在列号作为x坐标,元素值作为y坐标,分别对应绘制线性直角坐标系的二维图形,曲线条数等于输入参数矩阵的列数。,21,2)plot(x,y,s)功能:当x是向量,y是矩阵时,则绘制出多根不同颜色的曲线。曲线条数等于y矩阵的另一维数,x被作为这些曲线共同的横坐标。当x,y是同维矩阵时,则以x,y对应列元素为横、纵坐标分别绘制曲线,曲线条数等于矩阵的列数。当输入参数是实矩阵时,则按列绘制每列元素值相对其下标的曲线,曲线条数等于输入参数矩阵的列数。当输入参数是复数矩阵时,则按列分别以元素实部和虚部为横、纵坐标绘制多条曲线,22,3)plot(x1,y1,s1,x2,y2,s2,xn,yn,sn)功能:绘制(xi,yi,si)对应的二维图形。S是表示所绘图形的线形、点型和颜色的字符串。函数调用格式中的S是线形、点型和颜色的组合字符,默认值为b-.(蓝色实线实点标记)。,23,绘图函数的常用的颜色含义 类型 符号蓝色(默认)b(Blue)黄色 y(Yellow)品红色(紫色)m(Magenta)青色 c(Cyan)红色 r(Red)绿色 g(Green)白色 w(White)黑色 k(Black),24,绘图函数的常用的线形含义 类型 符号实线(默认)-点线:点划线-.虚线-,25,绘图函数的常用的数据点形含义,类型 符号实点标记(默认).圆圈标记 o叉号形 x星号标记*钻石形标记 d向下的三角形标记 v向上的三角形标记 向左的三角形标记 五角星标记 p,26,3.2 绘制图形的辅助操作1 图形标记title(txt)功能:在图形窗口顶端的中间位置输出字符串txt作为标题。xlabel(txt)功能:在x轴下的中间位置输出字符串txt作为标注。ylabel(txt)功能:在y轴边上的中间位置输出字符串txt作为标注。,27,text(x,y,txt)功能:在图形窗口的(x,y)处写字符串txt。坐标x和y按照与所绘制图形相同的刻度给出。gtext(txt)功能:通过使用鼠标或方向键,移动图形窗口中的十字光标,在图形窗口中添加字符串txt。legend(str1,str2,)功能:在当前图上输出图例,并用说明性字符串str1,str2等作为标注。legend off 功能:从当前图形中清除图例。,28,2 屏幕控制命令 功能figure(n)创建和显示当前序号为n的图形窗口。clf 清除当前图形窗口的图形。clc 清除命令窗口的命令。home 移动光标到命令窗口的左上角。hold 是否保持当前图形的切换命令。hold on命令保持当前图形并加入另一个图形,hold off命令 释放当前图形窗口(缺省状态),ishold命令如果当前图形处于hold on状态,则返回1;否则,返回0。,29,subplot(m,n,p)将图形窗口分割成m行n列,并设置p所指定的子窗口为当前窗口。子窗口按行由左至右,由上至下进行编号。subplot设置图形窗口为缺省模式,即单窗口模式,等价于subplot(1,1,1)。grid是否画分格线的双向切换命令,grid on设置为画分格线,grid off为不画分格线。,30,3 设定坐标系统axis(xmin xmax ymin ymax)设定坐标系统的最大和最小值。axis(auto)将当前图形的坐标系统恢复到自动缺省状态。axis(square)将当前图形的坐标系统设置为方形。axis(equal)将当前图形的坐标轴设成相等。,31,axis(off)关闭坐标系统。axis(on)显示坐标系统。box坐标形式在封闭式和开启式之间切换指令。box on命令使坐标形式呈封闭形式box off命令坐标形式呈开启形式。,32,3.3 plotyy函数Plotyy:用不同标度在同一个坐标内绘制曲线plotyy(x1,y1,x2,y2)分别绘制(x1,y1)和(x2,y2)的图形。其中x1和y1、x2和y2为对应的向量或矩阵。,33,3.4 极坐标系绘图Polar:极坐标系绘图函数polar(theta,r)在极坐标中绘图。向量theta的元素代表弧度参数,向量r代表从极点开始的长度。,34,3.5 对数坐标绘图半对数和对数坐标系绘图函数:semilogx,semilogy,loglog格式:semilogx(x,y)功能:在半对数坐标系中绘图,x轴用以10为底的对数刻度标定。这类似于plot(log10(x),y),但是对于log10(0)不能给出警告信息。,35,semilogy(x,y)功能:在半对数坐标系中绘图,y轴用以10为底的对数刻度标定。这类似于plot(x,log10(y),但是对于log10(0)不能给出警告信息。loglog(x,y)功能:在对数坐标系中绘图。两个坐标轴均用以1 0为底的对数刻度标定。这类似于plot(log10(x),log10(y),但是对于log10(0)不能给出警告信息,36,4 程序设计,4.1 运算符优先级MATLAB中各种运算符的优先级如下:(矩阵转置)、(矩阵幂)和.(数组转置)、.(数组幂)(逻辑非)*(乘)、/(左除)、(右除)和.*(点乘)、./(点左除)、.(点右除)+、-(加减):(冒号)、=、=&(逻辑与)|(逻辑或)&(先决与)|(先决或),37,4.2 M文件4.2.1 M文件概述 用MATLAB语言编写的程序,称为M文件。M文件可以根据调用方式的不同分为两类:命令文件和函数文件。两种工作方式:交互式的命令行工作方式和M文件的程序工作方式。,38,4.2.2 M文件的建立 为建立新的M文件,启动MATLAB文本编辑器有3种方法:1)菜单操作。2)命令操作。3)命令按钮操作。,39,4.3 分支语句 4.3.1 if 结构 格式1:if 条件 语句组 end,40,格式2:if 条件 语句组1 else 语句组2 end,41,格式3:if 条件1 语句组1 elseif 条件2 语句组2 elseif 条件m 语句组m else 语句组m+1 end,42,switch-case结构一般switch-case语句格式为:switch 表达式 case 值1 语句组1 case 值2 语句组2 case 值m 语句组m otherwise 语句组m+1 end,43,4.3.3 try-catch结构try-catch结构格式为:try 语句组1 catch 语句组2 end,44,4.4 循环语句4.4.1 while循环 while 循环的一般形式:while 条件表达式 语句组;end,45,4.4.2 for循环for语句的格式为:for循环变量=表达式1:表达式2:表达式3 循环体语句end,46,for语句的更一般的格式为:for 循环变量=矩阵表达式 循环体语句 end 执行时依次将矩阵的各列元素赋给循环变量,然后执行循环体语句,直至各列元素处理完毕。,47,实验1 矩阵及其运算,48,1 矩阵1.1 矩阵的建立1直接输入法 最简单的建立矩阵的方法是从键盘直接输入矩阵的元素。具体方法如下:将矩阵的元素用方括号括起来,按矩阵行的顺序输入各元素,同一行的各元素之间用空格或逗号分隔,不同行的元素之间用分号分隔。,49,2利用M文件建立矩阵 对于比较大且比较复杂的矩阵,可以为它专门建立一个M文件。下面通过一个简单例子来说明如何利用M文件创建矩阵。,50,例1-1 利用M文件建立MYMAT矩阵。(1)启动有关编辑程序或MATLAB文本编辑器,并输入待建矩阵:(2)把输入的内容以纯文本方式存盘(设文件名为mymatrix.m)。(3)在MATLAB命令窗口中输入mymatrix,即运行该M文件,就会自动建立一个名为MYMAT的矩阵,可供以后使用。,51,3.利用冒号表达式建立一个向量 冒号表达式可以产生一个行向量,一般格式是:e1:e2:e3其中e1为初始值,e2为步长,e3为终止值。在MATLAB中,还可以用linspace函数产生行向量。其调用格式为:linspace(a,b,n)其中a和b是生成向量的第一个和最后一个元素,n是元素总数。显然,linspace(a,b,n)与a:(b-a)/(n-1):b等价。4建立大矩阵大矩阵可由方括号中的小矩阵或向量建立起来。,52,1.2 矩阵的拆分1矩阵元素 通过下标引用矩阵的元素,例如A(3,2)=200采用矩阵元素的序号来引用矩阵元素。矩阵元素的序号就是相应元素在内存中的排列顺序。在MATLAB中,矩阵元素按列存储,先第一列,再第二列,依次类推。例如A=1,2,3;4,5,6;A(3)ans=2显然,序号(Index)与下标(Subscript)是一一对应的,以mn矩阵A为例,矩阵元素A(i,j)的序号为(j-1)*m+i。其相互转换关系也可利用sub2ind和ind2sub函数求得。,53,2矩阵拆分(1)利用冒号表达式获得子矩阵 A(:,j)表示取A矩阵的第j列全部元素;A(i,:)表示A矩阵第i行的全部元素;A(i,j)表示取A矩阵第i行、第j列的元素。A(i:i+m,:)表示取A矩阵第ii+m行的全部元素;A(:,k:k+m)表示取A矩阵第kk+m列的全部元素,A(i:i+m,k:k+m)表示取A矩阵第ii+m行内,并在第kk+m列中的所有元素。此外,还可利用一般向量和end运算符来表示矩阵下标,从而获得子矩阵。end表示某一维的末尾元素下标。,54,(2)利用空矩阵删除矩阵的元素 在MATLAB中,定义为空矩阵。给变量X赋空矩阵的语句为X=。注意,X=与clear X不同,clear是将X从工作空间中删除,而空矩阵则存在于工作空间中,只是维数为0。,55,1.3 特殊矩阵1通用的特殊矩阵常用的产生通用特殊矩阵的函数有:zeros:产生全0矩阵(零矩阵)。ones:产生全1矩阵(幺矩阵)。eye:产生单位矩阵。rand:产生01间均匀分布的随机矩阵。randn:产生均值为0,方差为1的标准正态分布随机矩阵。,56,例1-2 分别建立33、32和与矩阵A同样大小的零矩阵。(1)建立一个33零矩阵。zeros(3)(2)建立一个32零矩阵。zeros(3,2)(3)设A为23矩阵,则可以用zeros(size(A)建立一个与矩阵A同样大小零矩阵。A=1 2 3;4 5 6;%产生一个23阶矩阵Azeros(size(A)%产生一个与矩阵A同样大小的零矩阵,57,例1-3 建立随机矩阵:(1)在区间20,50内均匀分布的5阶随机矩阵。(2)均值为0.6、方差为0.1的5阶正态分布随机矩阵。命令如下:x=20+(50-20)*rand(5)y=0.6+sqrt(0.1)*randn(5)此外,常用的函数还有reshape(A,m,n),它在矩阵总元素保持不变的前提下,将矩阵A重新排成mn的二维矩阵。,58,2用于专门学科的特殊矩阵(1)魔方矩阵魔方矩阵有一个有趣的性质,其每行、每列及两条对角线上的元素和都相等。对于n阶魔方阵,其元素由1,2,3,n2共n2个整数组成。MATLAB提供了求魔方矩阵的函数magic(n),其功能是生成一个n阶魔方阵。,59,例1-4 将101125等25个数填入一个5行5列的表格中,使其每行每列及对角线的和均为565。M=100+magic(5),60,(2)范得蒙矩阵范得蒙(Vandermonde)矩阵最后一列全为1,倒数第二列为一个指定的向量,其他各列是其后列与倒数第二列的点乘积。可以用一个指定向量生成一个范得蒙矩阵。在MATLAB中,函数vander(V)生成以向量V为基础向量的范得蒙矩阵。例如,A=vander(1;2;3;5)即可得到上述范得蒙矩阵。,61,(3)伴随矩阵MATLAB生成伴随矩阵的函数是compan(p),其中p是一个多项式的系数向量,高次幂系数排在前,低次幂排在后。例如,为了求多项式的x3-7x+6的伴随矩阵,可使用命令:p=1,0,-7,6;compan(p),62,2 矩阵运算,2.1算术运算1基本算术运算 MATLAB的基本算术运算有:(加)、(减)、*(乘)、/(右除)、(左除)、(乘方)。注意,运算是在矩阵意义下进行的,单个数据的算术运算只是一种特例。,63,(1)矩阵加减运算 假定有两个矩阵A和B,则可以由A+B和A-B实现矩阵的加减运算。运算规则是:若A和B矩阵的维数相同,则可以执行矩阵的加减运算,A和B矩阵的相应元素相加减。如果A与B的维数不相同,则MATLAB将给出错误信息,提示用户两个矩阵的维数不匹配。,64,(2)矩阵乘法 假定有两个矩阵A和B,若A为mn矩阵,B为np矩阵,则C=A*B为mp矩阵。,65,(3)矩阵除法在MATLAB中,有两种矩阵除法运算:和/,分别表示左除和右除。如果A矩阵是非奇异方阵,则AB和B/A运算可以实现。AB等效于A的逆左乘B矩阵,也就是inv(A)*B,而B/A等效于A矩阵的逆右乘B矩阵,也就是B*inv(A)。对于含有标量的运算,两种除法运算的结果相同,如3/4和43有相同的值,都等于0.75。又如,设a=10.5,25,则a/5=5a=2.1000 5.0000。对于矩阵来说,左除和右除表示两种不同的除数矩阵和被除数矩阵的关系。对于矩阵运算,一般ABB/A。,66,(4)矩阵的乘方 一个矩阵的乘方运算可以表示成Ax,要求A为方阵,x为标量。2点运算 在MATLAB中,有一种特殊的运算,因为其运算符是在有关算术运算符前面加点,所以叫点运算。点运算符有.*、./、.和.。两矩阵进行点运算是指它们的对应元素进行相关运算,要求两矩阵的维参数相同。,67,2.2 关系运算 MATLAB提供了6种关系运算符:(大于)、=(大于或等于)、=(等于)、=(不等于)。它们的含义不难理解,但要注意其书写方法与数学中的不等式符号不尽相同。,68,关系运算符的运算法则为:(1)当两个比较量是标量时,直接比较两数的大小。若关系成立,关系表达式结果为1,否则为0。(2)当参与比较的量是两个维数相同的矩阵时,比较是对两矩阵相同位置的元素按标量关系运算规则逐个进行,并给出元素比较结果。最终的关系运算的结果是一个维数与原矩阵相同的矩阵,它的元素由0或1组成。,69,(3)当参与比较的一个是标量,而另一个是矩阵时,则把标量与矩阵的每一个元素按标量关系运算规则逐个比较,并给出元素比较结果。最终的关系运算的结果是一个维数与原矩阵相同的矩阵,它的元素由0或1组成。,70,例1-5 产生5阶随机方阵A,其元素为10,90区间的随机整数,然后判断A的元素是否能被3整除。(1)生成5阶随机方阵A。A=fix(90-10+1)*rand(5)+10)(2)判断A的元素是否可以被3整除。P=rem(A,3)=0其中,rem(A,3)是矩阵A的每个元素除以3的余数矩阵。此时,0被扩展为与A同维数的零矩阵,P是进行等于(=)比较的结果矩阵。,71,3 矩阵分析,3.1 对角阵与三角阵1对角阵只有对角线上有非0元素的矩阵称为对角矩阵,对角线上的元素相等的对角矩阵称为数量矩阵,对角线上的元素都为1的对角矩阵称为单位矩阵。,72,(1)提取矩阵的对角线元素设A为mn矩阵,diag(A)函数用于提取矩阵A主对角线元素,产生一个具有min(m,n)个元素的列向量。diag(A)函数还有一种形式diag(A,k),其功能是提取第k条对角线的元素。(2)构造对角矩阵设V为具有m个元素的向量,diag(V)将产生一个mm对角矩阵,其主对角线元素即为向量V的元素。diag(V)函数也有另一种形式diag(V,k),其功能是产生一个nn(n=m+)对角阵,其第k条对角线的元素即为向量V的元素。,73,例1-6 先建立55矩阵A,然后将A的第一行元素乘以1,第二行乘以2,第五行乘以5。A=17,0,1,0,15;23,5,7,14,16;4,0,13,0,22;10,12,19,21,3;.11,18,25,2,19;D=diag(1:5);D*A%用D左乘A,对A的每行乘以一个指定常数,74,2三角阵三角阵又进一步分为上三角阵和下三角阵,所谓上三角阵,即矩阵的对角线以下的元素全为0的一种矩阵,而下三角阵则是对角线以上的元素全为0的一种矩阵。,75,(1)上三角矩阵求矩阵A的上三角阵的MATLAB函数是triu(A)。triu(A)函数也有另一种形式triu(A,k),其功能是求矩阵A的第k条对角线以上的元素。例如,提取矩阵A的第2条对角线以上的元素,形成新的矩阵B。(2)下三角矩阵在MATLAB中,提取矩阵A的下三角矩阵的函数是tril(A)和tril(A,k),其用法与提取上三角矩阵的函数triu(A)和triu(A,k)完全相同。,76,3.2 矩阵的转置与旋转1矩阵的转置转置运算符是单撇号()。2矩阵的旋转利用函数rot90(A,k)将矩阵A旋转90的k倍,当k为1时可省略。,77,3矩阵的左右翻转对矩阵实施左右翻转是将原矩阵的第一列和最后一列调换,第二列和倒数第二列调换,依次类推。MATLAB对矩阵A实施左右翻转的函数是fliplr(A)。4矩阵的上下翻转MATLAB对矩阵A实施上下翻转的函数是flipud(A)。,78,3.3 矩阵的逆与伪逆1矩阵的逆对于一个方阵A,如果存在一个与其同阶的方阵B,使得:AB=BA=I(I为单位矩阵)则称B为A的逆矩阵,当然,A也是B的逆矩阵。求一个矩阵的逆是一件非常烦琐的工作,容易出错,但在MATLAB中,求一个矩阵的逆非常容易。求方阵A的逆矩阵可调用函数inv(A)。例1-7 用求逆矩阵的方法解线性方程组。Ax=b其解为:x=A-1b,79,2矩阵的伪逆如果矩阵A不是一个方阵,或者A是一个非满秩的方阵时,矩阵A没有逆矩阵,但可以找到一个与A的转置矩阵A同型的矩阵B,使得:ABA=ABAB=B此时称矩阵B为矩阵A的伪逆,也称为广义逆矩阵。在MATLAB中,求一个矩阵伪逆的函数是pinv(A)。,80,3.4 方阵的行列式把一个方阵看作一个行列式,并对其按行列式的规则求值,这个值就称为矩阵所对应的行列式的值。在MATLAB中,求方阵A所对应的行列式的值的函数是det(A)。,81,3.5 矩阵的秩与迹1矩阵的秩矩阵线性无关的行数与列数称为矩阵的秩。在MATLAB中,求矩阵秩的函数是rank(A)。2矩阵的迹矩阵的迹等于矩阵的对角线元素之和,也等于矩阵的特征值之和。在MATLAB中,求矩阵的迹的函数是trace(A)。,82,3.6 向量和矩阵的范数矩阵或向量的范数用来度量矩阵或向量在某种意义下的长度。范数有多种方法定义,其定义不同,范数值也就不同。,83,1向量的3种常用范数及其计算函数在MATLAB中,求向量范数的函数为:(1)norm(V)或norm(V,2):计算向量V的2范数。(2)norm(V,1):计算向量V的1范数。(3)norm(V,inf):计算向量V的范数。2矩阵的范数及其计算函数MATLAB提供了求3种矩阵范数的函数,其函数调用格式与求向量的范数的函数完全相同。,84,3.7 矩阵的条件数在MATLAB中,计算矩阵A的3种条件数的函数是:(1)cond(A,1)计算A的1范数下的条件数。(2)cond(A)或cond(A,2)计算A的2范数数下的条件数。(3)cond(A,inf)计算A的 范数下的条件数。,85,3.8 矩阵的特征值与特征向量在MATLAB中,计算矩阵A的特征值和特征向量的函数是eig(A),常用的调用格式有3种:(1)E=eig(A):求矩阵A的全部特征值,构成向量E。(2)V,D=eig(A):求矩阵A的全部特征值,构成对角阵D,并求A的特征向量构成V的列向量。,86,(3)V,D=eig(A,nobalance):与第2种格式类似,但第2种格式中先对A作相似变换后求矩阵A的特征值和特征向量,而格式3直接求矩阵A的特征值和特征向量。,87,实验2 多项式,88,1 多项式的表示,MATLAB中多项式的表示方法:,例如:行向量 p=1-12 0 25 116对应的多项式为:,89,2 多项式的算术运算,1 加减运算,90,91,2 乘法运算,MATLAB支持多项式乘法,函数格式为:函数conv(P1,P2)求多项式P1和P2的乘积。这里,P1,P2是两个多项式系数向量。,例 2-2 计算c=conv(1 2 2,1 5 4)执行结果如下:c=1 7 16 18 8由执行结果可知:,92,3 除法运算Q,r=deconv(P1,P2)对多项式P1和P2作除法运算。其中Q返回多项式P1除以P2的商式,r返回P1除以P2的余式。注意deconv是conv的逆函数,即有P1=conv(P2,Q)+r。,93,例2-3 计算Q=deconv(1 8 0 0-10,2-1 3)Q=0.5000 4.2500 1.3750Q,r=deconv(1 8 0 0-10,2-1 3)执行结果如下:Q=0.5000 4.2500 1.3750r=0 0 0-11.3750-14.1250由执行结果可知商是:余式是:,94,3 多项式求根,x=roots(P)其中P为多项式的系数向量,求得的根赋给向量x,即x(1),x(2),x(n)分别代表多项式的n个根。给出一个多项式的根,可以构造相应的多项式。若已知多项式的全部根,则可以用poly函数建立起多项式,其调用格式为:P=poly(x)x为具有n个元素的向量,poly(x)为以x为其根的多项式,且将该多项式的系数赋给向量P。,95,例2-4 求多项式的 根,A=1,8,0,0,-10;x=roots(A)执行结果如下:x=-8.0194 1.0344-0.5075+0.9736i-0.5075-0.9736i由结果可以看出,方程的根为两个实根和一对共轭复根,96,例2-5 求方程 的根。,r=1-7 2 40;p=roots(r);执行结果如下:p=5.0000 4.0000-2.0000由结果可以看出,方程的根均为实根5.000,4.0000和-2.0000。,97,例 2-6已知(1)计算 的全部根。(2)由方程 的根构造一个多项式并与 进行对比。,P=3,0,4,-5,-7.2,5;X=roots(P)%求方程f(x)=0的根G=poly(X)%求多项式G(x),98,执行结果为:X=-0.3046+1.6217i-0.3046-1.6217i-1.0066 1.0190 0.5967 G=1.0000 0.0000 1.3333-1.6667-2.4000 1.6667注意:构造的多项式的首项系数为1。,99,4 多项式估值,1 代数多项式求值 Y=polyval(P,x)求代数多项式的值。若x为一常数,则求多项式P在该点的值,Y=P(1)x N+P(2)x(N-1)+.+P(N)x+P(N+1)若x为向量或矩阵,则对向量或矩阵中的每个元素求多项式P的值,返回值为与自变量同型的向量或矩阵。,100,例2-7 已知 分别计算 和 时 的值。,P=1 8 0 0-10;x=1.2;Y=polyval(P,x)执行结果如下:Y=5.8976y=2 3 4;5 4 1;Y=polyval(P,y)执行结果如下:Y=70 287 758 1615 758-1,101,2 矩阵多项式求值,polyvalm函数用来求矩阵多项式的值,要求以方阵x为自变量求多项式的值。,102,例2-8 当x取 时求 的值。,p=1-5 0 8;a=2 3 5;5 8 1;7 6 9;polyvalm(p,a)执行结果:ans=552 690 562 548 686 538 1148 1422 1154,103,polyval(p,a)执行结果:ans=-4-10 8 8 200 4 106 44 332,104,例2-9 当x=8时求(x-1)(x-2)(x-3)(x-4)的值。,p=poly(1 2 3 4),polyvalm(p,8)执行结果如下:p=1-10 35-50 24ans=840,105,实验3 线性方程组的解法,106,直接解法,1利用左除运算符的直接解法对于线性方程组Ax=b,可以利用左除运算符“”求解:x=Ab,107,例-1 用直接解法求解下列线性方程组。命令如下:A=2,1,-5,1;1,-5,0,7;0,2,1,-1;1,6,-1,-4;b=13,-9,6,0;x=Ab,108,2利用矩阵的分解求解线性方程组矩阵分解是指根据一定的原理用某种算法将一个矩阵分解成若干个矩阵的乘积。常见的矩阵分解有LU分解、QR分解、Cholesky分解,以及Schur分解、Hessenberg分解、奇异分解等。,109,(1)LU分解矩阵的LU分解就是将一个矩阵表示为一个交换下三角矩阵和一个上三角矩阵的乘积形式。线性代数中已经证明,只要方阵A是非奇异的,LU分解总是可以进行的。MATLAB提供的lu函数用于对矩阵进行LU分解,其调用格式为:L,U=lu(X):产生一个上三角阵U和一个变换形式的下三角阵L(行交换),使之满足X=LU。注意,这里的矩阵X必须是方阵。L,U,P=lu(X):产生一个上三角阵U和一个下三角阵L以及一个置换矩阵P,使之满足PX=LU。当然矩阵X同样必须是方阵。实现LU分解后,线性方程组Ax=b的解x=U(Lb)或x=U(LPb),这样可以大大提高运算速度。,110,例-2 用LU分解求解例7-1中的线性方程组。命令如下:A=2,1,-5,1;1,-5,0,7;0,2,1,-1;1,6,-1,-4;b=13,-9,6,0;L,U=lu(A);x=U(Lb)或采用LU分解的第2种格式,命令如下:L,U,P=lu(A);x=U(LP*b),111,(2)QR分解对矩阵X进行QR分解,就是把X分解为一个正交矩阵Q和一个上三角矩阵R的乘积形式。QR分解只能对方阵进行。MATLAB的函数qr可用于对矩阵进行QR分解,其调用格式为:Q,R=qr(X):产生一个一个正交矩阵Q和一个上三角矩阵R,使之满足X=QR。Q,R,E=qr(X):产生一个一个正交矩阵Q、一个上三角矩阵R以及一个置换矩阵E,使之满足XE=QR。实现QR分解后,线性方程组Ax=b的解x=R(Qb)或x=E(R(Qb)。,112,例-3 用QR分解求解例7-1中的线性方程组。命令如下:A=2,1,-5,1;1,-5,0,7;0,2,1,-1;1,6,-1,-4;b=13,-9,6,0;Q,R=qr(A);x=R(Qb)或采用QR分解的第2种格式,命令如下:Q,R,E=qr(A);x=E*(R(Qb),113,(3)Cholesky分解如果矩阵X是对称正定的,则Cholesky分解将矩阵X分解成一个下三角矩阵和上三角矩阵的乘积。设上三角矩阵为R,则下三角矩阵为其转置,即X=RR。MATLAB函数chol(X)用于对矩阵X进行Cholesky分解,其调用格式为:R=chol(X):产生一个上三角阵R,使RR=X。若X为非对称正定,则输出一个出错信息。R,p=chol(X):这个命令格式将不输出出错信息。当X为对称正定的,则p=0,R与上述格式得到的结果相同;否则p为一个正整数。如果X为满秩矩阵,则R为一个阶数为q=p-1的上三角阵,且满足RR=X(1:q,1:q)。实现Cholesky分解后,线性方程组Ax=b变成RRx=b,所以x=R(Rb)。,114,例-4 用Cholesky分解求解例7-1中的线性方程组。命令如下:A=2,1,-5,1;1,-5,0,7;0,2,1,-1;1,6,-1,-4;b=13,-9,6,0;R=chol(A)?Error using=cholMatrix must be positive definite命令执行时,出现错误信息,说明A为非正定矩阵。,115,迭代解法,迭代解法非常适合求解大型系数矩阵的方程组。在数值分析中,迭代解法主要包括 Jacobi迭代法、Gauss-Serdel迭代法、超松弛迭代法和两步迭代法。1Jacobi迭代法对于线性方程组Ax=b,如果A为非奇异方阵,即aii0(i=1,2,n),则可将A分解为A=D-L-U,其中D为对角阵,其元素为A的对角元素,L与U为A的下三角阵和上三角阵,于是Ax=b化为:x=D-1(L+U)x+D-1b与之对应的迭代公式为:x(k+1)=D-1(L+U)x(k)+D-1b这就是Jacobi迭代公式。如果序列x(k+1)收敛于x,则x必是方程Ax=b的解。,116,Jacobi迭代法的MATLAB函数文件Jacobi.m如下:function y,n=jacobi(A,b,x0,eps)if nargin=3 eps=1.0e-6;elseif nargin=eps x0=y;y=B*x0+f;n=n+1;end,117,例-5 用Jacobi迭代法求解下列线性方程组。设迭代初值为0,迭代精度为10-6