matlab第2章矩阵与数值数组.ppt

上传人:tia****nde 文档编号:11497187 上传时间:2020-04-25 格式:PPT 页数:64 大小:533KB
返回 下载 相关 举报
matlab第2章矩阵与数值数组.ppt_第1页
第1页 / 共64页
matlab第2章矩阵与数值数组.ppt_第2页
第2页 / 共64页
matlab第2章矩阵与数值数组.ppt_第3页
第3页 / 共64页
点击查看更多>>
资源描述
第2章矩阵与数值数组,1,本章学习目标,掌握数组的创建理解数组元素的标志方法掌握子数组的寻访和赋值方法了解MATLAB的数值、变量与表达式的表示方法自己通过帮助学习MATLAB常用的运算函数理解数组运算和矩阵运算的区别掌握MATLAB的关系运算与逻辑运算了解“非数”和“空”数组的概念掌握数组操作函数和高维数组方面的内容掌握多项式及其运算,2,主要内容,2.1数组的创建2.2数组元素的标志2.3子数组的寻访和赋值2.4MATLAB的数值、变量与表达式2.5MATLAB常用的运算函数2.6数组运算和矩阵运算2.7关系运算与逻辑运算2.8“非数”和“空”数组2.9数组操作函数和高维数组2.10多项式及其运算,3,2.1数组的创建,1.直接输入法直接输入法就是在命令窗口中直接输入数组中的所有元素,在输入数组时必须遵循以下的规定。所有数组元素必须置于“”中。数组元素必须由“,”或空格分隔。数组的行与行之间必须用“;”标志,或用回车键Enter进行换行。例如,输入九宫图矩阵,只需在命令窗口直接输入I=492;857;316I=492857316,4,2.载入外部数据文件载入函数(loadfunction)可以读取由MATLAB早期版本生成的包含矩阵的二进制文件,或者读取包含数值数据的文本文件。文本文件中的数字应排列成矩形,每行只能包含矩阵的一行元素,元素与元素之间用空格分隔,各行元素的个数必须相等。例如,用Windows自带的记事本或用MATLAB的文本调试编辑器创建一个包含下列4行数字的文本文件12345678910111213141516保存该文本为theloadtest.dat文件,在命令窗口中输入loadtheloadtest.dat将读取该文件并创建一个变量theloadtest,包含上面的这个矩阵,在MATLAB工作空间中可以查到这个变量。,5,【例2-1】读取二进制数据文件woman.mat。在MATLAB命令窗口中输入loadwoman%读取二进制数据文件woman.mat,在工作空间会产生数组Ximage(X)%以图像的方式显示数组X,如图2.6所示colormap(map)%设置颜色查找表为map,6,3.用内置函数生成数组MATLAB还可以利用内置函数直接生成数组。几种标准数组生成函数及其功能见表2-1。【例2-2】标准数组产生的演示。ones(1,2)%生成一个1行2列的全1数组ans=11zeros(2)%生成一个2行2列的全0数组ans=0000,rand(state,0)rand(2,3)%生成一个2行3列的均匀分布随机数组ans=0.95010.60680.89130.23110.48600.7621E=eye(3)%生成一个3行3列的单位数组E=100010001,8,4.利用M文件创建和保存数组可以利用M文件创建数组,M文件是包含MATLAB代码的文本文件。可以用MATLAB自带的文本编辑调试器或别的文本编辑器来创建一个文件,代码和要在MATLAB命令窗口中输入的指令一样就可以,以.m格式保存该文件。,9,【例2-4】创建和保存数组TEST的TestMatrix.m。(1)打开文本编辑调试器,输入以下内容%TestMatrix.mCreationandpreservationofmatrixTESTTEST=11,12,13,14,15,16,17,18,19;.21,22,23,24,25,26,27,28,29;.31,32,33,34,35,36,37,38,39;(2)保存此文件文件名为TestMatrix.m。(3)以后只要在MATLAB指令窗口中运行TestMatrix.m文件,就会自动生成数组TEST,并保存于MATLAB内存中。,10,以上介绍的4种创建数组的方法既适用于二维数组的创建,有些方法又完全可以用于高维数组的创建,后面还将对高维数组做进一步的介绍。对于一维数组来说更是适用,不过一维数组形式比较简单,在实际中还有更常用的创建一维数组的方式,下面以例题的形式给出两种方法。,11,【例2-5】利用冒号运算符生成一维数组。冒号(:)是MATLAB最重要的运算符之一。它有以下几种应用方式,输入表达式1:10可以生成一个包含从110所有整数的行向量12345678910要想获得非单位间隔,可以指定一个步长。例如100:-7:5010093867972655851又如0:pi/4:pi得到00.78541.57082.35623.1416,12,【例2-6】定数线性采样法。该方法的通用格式为x=linspace(a,b,n),相当于第一个数为a,最后一个数为b,以n为采样点数等间距采样,生成1n的数组。例如x=linspace(1,12,6)1.00003.20005.40007.60009.800012.0000,13,2.2数组元素的标志为了叙述方便,首先利用内置函数magic()在MATLAB中生成一个四阶幻方矩阵A。A=magic(4)A=16231351110897612414151。,14,1.“全下标”标志对于二维数组来说,“全下标”标志指出是第几行、第几列的元素。例如,数组A第i行第j列的元素可以用A(i,j)表示。A(3,4)表示第3行第4列的元素,对于四阶幻方数组A来说,它的值是12。2.“单下标”标志“单下标(LinearIndex)”标志就是只用一个下标A(k)来指明元素在数组的位置。这种方式一般用来标志只有一行或一列的向量的元素。当然也可以用来标志二维数组的元素,这种情况首先设想,15,把二维数组的所有列,按先左后右的次序、首尾相接排成“一维长列”,然后自上往下对元素位置进行编号。例如,对于四阶幻方数组A来说,A(15)是另外一种标志存储在A(3,4)中的数值12的方式。3.“逻辑1”标志在实际使用中,常会遇到诸如寻找数组中所有符合某个条件的元素的问题,这时用“逻辑1”标志显得很方便。假设X是一个普通数组,L是对数组X进行某种逻辑操作后得到的相同大小的数组,那么X(L)得到数组X中的符合某个条件的所有元素。,16,假设有以下一组数据X=2.11.71.61.5NaN1.91.81.55.11.81.42.21.61.8其中的非数(NaN)是某个观测中一个丢失的数据的标记,比如某个调查问卷中没有得到回答的选项。可以用“逻辑1”标志法去除这个丢失的数据,使用函数isfinite(X)将得到一个逻辑数组,对于X中的有限值是真,对于NaN和无穷大(Inf)是假。,17,2.3子数组的寻访和赋值掌握了2.2节所讲的元素标志方法,就容易理解数组的元素或子数组的寻访和赋值。下面以例题的形式来讲解本部分内容。【例2-7】一维数组子数组的寻访(Address)和赋值(Assign)。rand(state,0)%把均匀分布伪随机发生器置为0状态X=rand(1,6)%创建均布随机数组X=0.95010.23110.60680.48600.89130.7621,18,X(2)%寻访数组X的第2个元素ans=0.2311X(135)%寻访数组X第1、3、5个元素组成的子数组ans=0.95010.60680.8913X(3)=100%把上述第3个元素重新赋值为100 x=0.95010.2311100.00000.48600.89130.7621,19,【例2-8】二维数组的子数组寻访和赋值。A=magic(4)%创建44的幻方矩阵A=16231351110897612414151A(4,:)=0%第4行赋值为零A=162313511108976120000A(1:2,1:3)%寻访由数组A的第1、2行和第1、2、3列指定的子数组ans=162351110,20,2.4MATLAB的数值、变量与表达式1.数值MATLAB的数值采用习惯的十进制表示,可以带小数点及正负号,以下记述都合法100-100.11.2345科学计数法采用字符e来表示10的幂,例如1.60210e-206.02252e23虚数采用i或j作为扩展名,例如1i-3.14159j3e5i所有数值存储时采用IEEE规定的浮点数标准的长格式(longformat)形式,数值的相对精度是eps,即大约保持有效数字16位,数值范围大致为10-30810+308。,21,2.变量MATLAB不需要对变量进行类型声明或维数声明。当MATLAB遇到一个新的变量名,就自动产生一个变量并分配一个合适的存储空间。如果变量已经存在,MATLAB就会改变变量的内容,如果需要还会分配新的存储空间。例如num_students=25创建一个1行1列名称为num_students的矩阵,数值25存储在该矩阵的单一元素中。变量名由英文字母、数字和下画线组成,并且必须以字母作为第一个字符。,22,MATLAB区分大小写,也就是说大写字母和小写字母是有区别的。A和a不是同一个变量。在MATLAB中对一个变量进行命名的时候,注意不能使用关键字如for、while等作为变量名,否则程序就会报错,也不要使用常用的函数名如sin、cos等作为变量名。在MATLAB中还有一些所谓的预定义变量,每当MATLAB启动时这些变量就被产生。这些变量其实是一些特殊函数,规定了有用常量的值(所以有些教材中把这部分内容放在函数中讲解),详见表2-2。,23,3.表达式和大多数别的编程语言一样,MATLAB也具有数学表达式。但是和大多数编程语言不同,MATLAB中的运算操作尽量设计地接近于习惯,在有些情况下别的编程语言一次只能处理一个数据,MATLAB却允许快捷方便地对整个矩阵(数组)进行操作。MATLAB表达式采用熟悉的数学运算符和优先级,见表2-3,表中运算符的优先级从上到下依次升高。,24,2.5MATLAB常用的运算函数MATLAB提供了大量标准的基本数学函数,例如abs、sqrt、exp和sin等。对负数求平方根或对数不会提示错误,而是自动产生适当的复数结果。MATLAB还提供很多高级的数学函数,例如Bessel和gamma函数等。查看基本数学函数,可以在命令窗口输入helpelfun查看高级数学函数或矩阵函数,可输入helpspecfunhelpelmat,25,有些函数,例如sqrt和sin是内置(builtin)函数。内置函数是MATLAB内核(core)的一部分,所以运算效率很高,但采用的算法细节无法查看。另外一些函数,例如gamma和sinh,是以M文件的形式来执行的。内置函数和别的函数之间有些区别。例如,内置函数无法查看代码,别的函数可以查看代码,甚至在需要时可以修改代码。,26,2.6数组运算和矩阵运算(1)数组可以和一个标量(11的矩阵)进行加、减、乘、除运算,其结果将是此标量和数组中的每一个元素“相加”、“相减”、“相乘”、“相除”;而经典数学中矩阵和一个标量不能进行加、减运算,只允许矩阵和一个标量进行乘、除运算,进行相除运算时,标量必须是除数,矩阵为被除数。(2)一个标量与一个数组的乘运算和一个标量与一个矩阵的乘运算是相同的。,27,(3)执行数组与数组之间的运算时,参与运算的数组必须同维,运算所得结果数组也总是与原数组同维;而矩阵执行加、减、除运算时要求数组同维,执行乘法运算时只要求矩阵的内维相同。(4)两个数组相乘是对应元素相乘;两个矩阵相乘遵守数学中的规定。(5)两个数组的除运算和两个矩阵的除运算比较复杂。当两个同维数组相除时,运算为数组的相应元素相除,计算结果是和参与运算的数组同维的数组;当参与运算的数组有一个是标量时,运算是标,28,量和数组的每一个元素相除,计算结果是和参与运算的数组同维的数组;右除与左除的关系为A./B=B.A,其中A是被除数,B是除数。在MATLAB中,矩阵左除和右除的含义不同。矩阵右除定义为:BA=(A/B)。(6)数组的乘方和矩阵的乘方也比较复杂。数组乘方运算规则:矩阵的标量乘方A.p(即A为矩阵,p为标量),运算为矩阵每个元素的p次方,计算结果是与矩阵A同维的矩阵;标量的矩阵乘方p.A,表示以p为底,分别以A的元素为指数求幂值,计算结果是与矩阵A同维的矩阵。而矩阵的,29,乘方运算只有在矩阵为方阵时才有意义。(7)关系运算和逻辑运算仅对数组进行,详见2.7节的介绍。【例2-9】数组相乘与矩阵相乘。A=1,2;3,4;B=5,6;7,8;%生成矩阵A与BA.*B%数组A与数组B相乘ans=5122132%结果是数组对应元素的乘积A*B%矩阵A与矩阵B相乘ans=19224350%矩阵运算遵守线性代数运算规则,30,2.7关系运算与逻辑运算1.关系运算MATLAB提供了6种关系运算符,详见表2-4。关系运算符的运算法则如下。(1)当两个标量相比较时,直接比较两数的大小。若关系成立,关系表达式结果为1,否则为0(2)当一个标量与一个矩阵相比较时,则把标量与矩阵的每一个元素按标量关系运算规则逐个比较,并给出元素比较结果。最终关系运算的结果是一个维数与原矩阵相同的矩阵,它的元素由0或1组成。,31,(3)当参与比较的量是两个维数相同的矩阵时,比较是对两矩阵相同位置的元素按标量关系运算规则逐个进行,并给出元素比较结果。最终关系运算的结果是一个维数与原矩阵相同的矩阵,它的元素由0或1组成。例如,在MATLAB命令窗口输入A=1:9,r=5,AA=-3:3,.%建立一个一行7列的数组A,“.”的作用是输入完3条指令再执行运算L1=A,.%逻辑非的作用L2=A2|AA=A=表示创建了一个空数组A,接着输入B=ones(2,0)B=Emptymatrix:2-by-0表示创建了一个空数组B,该数组有2行,列方向是空的。下面用几个指令来对空数组B的属性进行检查。,40,class(B)%空数组的数据类别ans=doubleisnumeric(B)%判断是否是数值类数组ans=1isempty(B)%唯一可以正确判断数组是否是空的指令ans=1,41,接着输入whichB%B是什么Bisavariable.ndims(B)%数组B的维数ans=2size(B)%数组B的大小ans=20,42,创建另外一个空数组C=ones(0,2)C=Emptymatrix:0-by-2接着输入D=B*CD=0000说明D是一个2行2列的数组,而不是空数组,可见空数组运算不具有传递性。,43,空数组的作用在2.9节还会有所介绍,简要介绍一下上面叙述中提到的两个重要命令。(1)ndims():用于检查数组的维数,比如向量的维数为1,矩阵的维数为2。(2)size():用于检查数组各维的大小,还有一个命令length(),可以给出数组所有维的最大长度。,44,2.9数组操作函数和高维数组利用一些内置函数可以生成数组,另外还有一些数组操作函数,利用这些函数可以由比较小的数组构成比较大的数组或高维数组,常用的数组操作函数见表2-6。下面举两个例子看看这些函数的使用。例如,首先在命令窗口输入A=zeros(3,3);A(:)=1:9%产生一个3行3列的数组AA=147258369,45,继续输入diag(A)ans=159很显然是取A对角线上的元素。继续输入tril(A)ans=100250369结果为A主对角线的下三角阵。,46,继续输入fliplr(A)ans=741852963可以看到第1列与第3列交换了位置。还有几个指令的使用将在后面的高维数组举例说明。,47,2.高维数组,本节只以三维数组为例进行叙述,但所有方法也适用于三维以上的数组。创建一个三维数组的常用方法有4种。(1)直接利用“全下标”元素赋值法创建高维数组。(2)由函数ones()、zeros()、rand()、rands()直接创建标准高维数组。(3)由若干大小相同的低维数组合成高维数组。(4)借助cat()、repmat()、reshape()等函数构成高维数组。,48,例如,在命令窗口输入A(2,2,2)=1%直接利用“全下标”元素赋值法创建高维数组A(:,:,1)=0000A(:,:,2)=0001生成的数组A是一个222的数组。,49,接着输入B=ones(2,2,2);B(:)=1:8%由函数ones()直接创建标准高维数组并全元素赋值B(:,:,1)=1324B(:,:,2)=5768生成的数组B也是一个222的数组。,50,接着输入C=cat(2,A,B)%借助cat()把数组A、B在列方向上串接C(:,:,1)=00130024C(:,:,2)=00570168,51,已经知道由比较小的数组构成比较大的数组或高维数组,那么反过来,怎么把高维数组或比较大的数组变成比较小的数组呢?MATLAB设计了赋“空阵”的方法和函数squeeze()来完成这个工作。例如,在命令窗口输入如下命令。A=reshape(1:18,2,3,3)%创建一个233的数组AA(:,:,1)=135246,52,A(:,:,2)=791181012A(:,:,3)=131517141618size(A)%测量数组A的大小ans=233,53,继续输入A(:,2:3,:)=%对数组A的第2列、第3列赋“空阵”A(:,:,1)=12A(:,:,2)=78A(:,:,3)=1314可见数组A的第2列、第3列已消失。,54,继续输入size(A)%再次测量数组A的大小ans=213可见A已经变成了一个213的数组。继续输入A_1=squeeze(A)A_1=17132814,55,可见函数squeeze()可以撤销长度为1的“孤维”,使原三维数组A“降”为二维,但这种操作不会影响到数组A本身,只是把数组A“表面”上给降维了。如在命令窗口输入size(A),可以看到A仍是一个213的数组,继续输入A(:,1,:)=%对“孤维”赋“空”A=Emptyarray:2-by-0-by-3可见数组A变成了一个“空”数组。,56,继续输入size(A)ans=203可见这时A变为一个203的数组。继续输入ndims(A)ans=3可见A仍是一个三维数组,通过对“孤维”赋“空”不能实现降维。,57,2.10多项式及其运算,1.多项式的表达与创建MATLAB约定n次多项式用一个长度为n+1的系数行向量来表示,按降幂排列,缺少的幂次项系数为0。即多项式在MATLAB可以用向量表示。例如,多项式可以用来表示,其中的二次幂系数0不能缺少。,2.多项式的运算多项式的运算由四则运算符和运算函数组成,主要包括如下几种。(1)多项式加减运算。(2)多项式乘运算:利用函数C=conv(A,B)。(3)多项式除运算:利用函数Q,R=deconv(B,A)(4)多项式求导:利用函数polyder()。(5)多项式求值:利用函数polyval()或polyvalm()。(6)多项式求根:利用函数roots()。下面用几个例子简单叙述其中3种运算。,多项式加减运算MATLAB没有提供专门进行多项式加减运算的函数,事实上多项式的加减就是其所对应的系数向量的加减运算,因此有下面两种约定。a.对于次数相同的多项式,可以直接对其系数向量进行加减运算。b.如果两个多项式次数不同,则应该把低次多项式中系数不足的高次项用0补足,然后进行加减运算,例如,可以用表示,可以用表示,那么就可以用+=来表示,两个向量的和刚好是多项式之和的系数。多项式乘运算例如计算多项式和的乘积,只需要在命令窗口输入A=2,-1,0,3;%创建多项式AB=2,1;%创建多项式BC=conv(A,B)%求两个多项式的乘积C=%乘积结果仍是一个多项式40-163即乘积为。,多项式求值有两个函数polyval()或polyvalm(),大家要注意它们之间的区别。函数y=polyval(p,x)用来计算多项式p在x点的值,可能有两种取值。a.x是标量,直接把x代入计算即可。b.x是向量或矩阵,则采用数组运算(点运算)。例如,已知,求p(x)在x处的值,其中分别取x=2和22矩阵x=-1,2;-2,1。在命令窗口输入p=2,-1,0,3;%创建多项式px=2;polyval(p,x)%求x为标量2时多项式的值ans=15,继续在命令窗口输入x=-1,2;-2,1;polyval(p,x)%求x为22矩阵时多项式的值ans=015-174而函数Y=polyvalm(p,X)是以方阵X为自变量,计算多项式p的值,采用矩阵运算。例如,求多项式以22矩阵x=-1,2;-2,1为自变量的值,多项式p和矩阵X刚才已经创建,只需要继续输入,polyvalm(p,x)ans=12-12120可以看到两个函数的输入相同而运算结果不同,这主要是它们的运算规则不同。polyval(p,A)=2*A.*A.*A-A.*A+3*ones(size(A)polyvalm(p,A)=2*A*A*A-A*A+3*eye(size(A),
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!