1、1,2,本章目标,掌握矩阵、向量、数组和多项式的构造和运算方法 能够使用常用的几种函数进行一般的数值问题求解 掌握用matlab语言进行基本符号运算的方法。,3,主要内容,2.1 矩阵 (创建矩阵、修改矩阵) 2.2 矩阵运算 2.3 矩阵函数分析 2.4 结构数据和单元数据 2.5 向量 2.6 数组 2.7 多项式 (多项式运算、求解线性方程组),4,主要内容,2.8 数值运算与符号运算(符号定义符号运算的基本方法) 2.9 符号变量和符号表达式 (符号函数的定义) 2.10 符号表示式的运算 2.11 微积分 (微分方程的数值解) 2.12 方程求解 (符号运算在求极限、泰勒展开、微分、
2、积分等运算中的应用。),5,2.1.1 矩阵的构造,通过直接输入矩阵的元素构造矩阵: 用中括号 把所有矩阵元素括起来 同一行的不同数据元素之间用空格或逗号间隔 用分号(;)指定一行结束 可分成几行进行输入,用回车符代替分号 数据元素可以是表达式,系统将自动计算结果,6,2.1.1 矩阵的构造,矩阵的建立: 1直接输入法 最简单的建立矩阵的方法是从键盘直接输入矩阵的元素。具体方法如下:将矩阵的元素用方括号括起来,按矩阵行的顺序输入各元素,同一行的各元素之间用空格或逗号分隔,不同行的元素之间用分号分隔。,7,例:输入矩阵A、B的值,A=1 2 3 4; 5 6 7 8; 9 10 11 12; 1
3、3 14 15 16 B=1, sqrt(25), 9, 132, 6, 10, 7*2 3+sin(pi), 7, 11, 154, abs(-8), 12, 16,A=,B=,1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16,1 5 9 13 2 6 10 14 3 7 11 15 4 8 12 16,8,2.1.1 矩阵的构造,矩阵的建立: 2利用M文件建立矩阵 对于比较大且比较复杂的矩阵,可以为它专门建立一个M文件。下面通过一个简单例子来说明如何利用M文件创建矩阵。,9,例2-2:利用M文件建立MYMAT矩阵,(1) 启动有关编辑程序或MATLAB文本编辑器
4、,并输入待建矩阵: (2) 把输入的内容以纯文本方式存盘(设文件名为mymatrix.m)。 (3) 在MATLAB命令窗口中输入mymatrix,即运行该M文件,就会自动建立一个名为MYMAT的矩阵,可供以后使用。,10,2.1.1 矩阵的构造,矩阵的建立: 3利用冒号表达式建立一个向量 冒号表达式可以产生一个行向量,一般格式是: e1:e2:e3 其中e1为初始值,e2为步长,e3为终止值。 在MATLAB中,还可以用linspace函数产生行向量。其调用格式为: linspace(a,b,n) 其中a和b是生成向量的第一个和最后一个元素,n是元素总数。 显然,linspace(a,b,n
5、)与a:(b-a)/(n-1):b等价。 4建立大矩阵 大矩阵可由方括号中的小矩阵或向量建立起来。,11,2.1.2 矩阵下标与子矩阵提取,A(m, n) 提取第m行,第n列元素 A(:, n) 提取第n列元素 A(m, :) 提取第m行元素 A(m1:m2, n1:n2) 提取第m1行到第m2行和第n1列到第n2 列的所有元素 A(m:end, n) 提取从第m行到最末行和第n列的子块 A(:) 得到一个长列矢量,该矢量的元素按矩阵的列进行排列,12,例: 修改矩阵A中元素的数值,A=1 2 3 4; 5 6 7 8; 9 10 11 12; 13 14 15 16; A(1,1)=0; A
6、(2,2)=A(1,2)+A(2,1); A(4,4)=cos(0); 则矩阵变为: A =,13,例: 修改矩阵A中元素的数值,A=1 2 3 4; 5 6 7 8; 9 10 11 12; 13 14 15 16; A(1,1)=0; A(2,2)=A(1,2)+A(2,1); A(4,4)=cos(0); 则矩阵变为: A =0 2 3 45 7 7 89 10 11 1213 14 15 1,14,2.1.3 矩阵拆分,(1) 利用冒号表达式获得子矩阵 A(:,j)表示取A矩阵的第j列全部元素;A(i,:)表示A矩阵第i行的全部元素;A(i,j)表示取A矩阵第i行、第j列的元素。 A(
7、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表示某一维的末尾元素下标。,15,(2) 利用空矩阵删除矩阵的元素 在MATLAB中,定义 为空矩阵。给变量X赋空矩阵的语句为X= 。注意,X= 与clear X不同,clear是将X从工作空间中删除,而空矩阵则存在于工作空间中,只是维数为0。和零矩阵也不同。,2.1.3 矩阵拆分,16,2.1.4 特殊矩阵,1通用的特殊矩阵
8、常用的产生通用特殊矩阵的函数有: zeros:产生全0矩阵(零矩阵)。 ones:产生全1矩阵(幺矩阵)。 eye:产生单位矩阵。 rand:产生01间均匀分布的随机矩阵。 randn:产生均值为0,方差为1的标准正态分布随机矩阵。,17,例2-3 分别建立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阶矩阵A zeros(size(A) %产生一个与矩阵A同样大小的
9、零矩阵,2.1.4 特殊矩阵,18,例2-4 建立随机矩阵: (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的二维矩阵。,2.1.4 特殊矩阵,19,2用于专门学科的特殊矩阵 (1) 魔方矩阵 魔方矩阵有一个有趣的性质,其每行、每列及两条对角线上的元素和都相等。对于n阶魔方阵,其元素由1,2,3,n共n个整数组成。MATLAB
10、提供了求魔方矩阵的函数magic(n),其功能是生成一个n阶魔方阵。magic(5),2.1.4 特殊矩阵,20,例2-5 将101125等25个数填入一个5行5列的表格中,使其每行每列及对角线的和均为565。 M=100+magic(5),2.1.4 特殊矩阵,21,例2-5 将101125等25个数填入一个5行5列的表格中,使其每行每列及对角线的和均为565。 M=100+magic(5)元素与矩阵加,2.1.4 特殊矩阵,22,(2) 范得蒙矩阵 范得蒙(Vandermonde)矩阵最后一列全为1,倒数第二列为一个指定的向量,其他各列是其后列与倒数第二列的点乘积。可以用一个指定向量生成一
11、个范得蒙矩阵。在MATLAB中,函数vander(V)生成以向量V为基础向量的范得蒙矩阵。例如,A=vander(1;2;3;5)即可得到上述范得蒙矩阵。,2.1.4 特殊矩阵,23,(3) 希尔伯特矩阵 在MATLAB中,生成希尔伯特矩阵的函数是hilb(n)。 使用一般方法求逆会因为原始数据的微小扰动而产生不可靠的计算结果。MATLAB中,有一个专门求希尔伯特矩阵的逆的函数invhilb(n),其功能是求n阶的希尔伯特矩阵的逆矩阵。,2.1.4 特殊矩阵,24,例2-6 求4阶希尔伯特矩阵及其逆矩阵。 命令如下: format rat %以有理形式输出 H=hilb(4) H=invhil
12、b(4),2.1.4 特殊矩阵,25,(4) 托普利兹矩阵 托普利兹(Toeplitz)矩阵除第一行第一列外,其他每个元素都与左上角的元素相同。生成托普利兹矩阵的函数是toeplitz(x,y),它生成一个以x为第一列,y为第一行的托普利兹矩阵。这里x, y均为向量,两者不必等长。toeplitz(x)用向量x生成一个对称的托普利兹矩阵。例如 T=toeplitz(1:6),2.1.4 特殊矩阵,26,(5) 伴随矩阵 MATLAB生成伴随矩阵的函数是compan(p),其中p是一个多项式的系数向量,高次幂系数排在前,低次幂排在后。例如,为了求多项式的x3-7x+6的伴随矩阵,可使用命令: p
13、=1,0,-7,6; compan(p),2.1.4 特殊矩阵,27,(6) 帕斯卡矩阵 我们知道,二次项(x+y)n展开后的系数随n的增大组成一个三角形表,称为杨辉三角形。由杨辉三角形表组成的矩阵称为帕斯卡(Pascal)矩阵。函数pascal(n)生成一个n阶帕斯卡矩阵。,2.1.4 特殊矩阵,28,例2-7 求(x+y)5的展开式。 在MATLAB命令窗口,输入命令: pascal(6) 矩阵次对角线上的元素1,5,10,10,5,1即为展开式的系数。,2.1.4 特殊矩阵,29,2.2 MATLAB矩阵运算,2.2. 1 算术运算 2.2. 2 关系运算 2.2. 3 逻辑运算,30,
14、2.2.1 矩阵的算术运算,1矩阵的加减运算:(加)、(减) 2矩阵乘法:*(乘) 3矩阵除法:/ (右除)、 (左除) 4矩阵的乘方:(乘方) 5矩阵转置: (转置运算符),31,2.2.1 矩阵的算术运算,(1) 矩阵加减运算 假定有两个矩阵A和B,则可以由A+B和A-B实现矩阵的加减运算。运算规则是:若A和B矩阵的维数相同,则可以执行矩阵的加减运算,A和B矩阵的相应元素相加减。如果A与B的维数不相同,则MATLAB将给出错误信息,提示用户两个矩阵的维数不匹配。,32,2.2.1 矩阵的算术运算,(2) 矩阵乘法 假定有两个矩阵A和B,若A为mn矩阵,B为np矩阵,则C=A*B为mp矩阵。
15、,33,2.2.1 矩阵的算术运算,(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。,34,2.2.1 矩阵的算术运算,(4) 矩阵的乘方 一个矩
16、阵的乘方运算可以表示成Ax,要求A为方阵,x为标量。,35,2.2.1 矩阵的算术运算,点运算 在MATLAB中,有一种特殊的运算,因为其运算符是在有关算术运算符前面加点,所以叫点运算。点运算符有.*、./、.和.。两矩阵进行点运算是指它们的对应元素进行相关运算,要求两矩阵的维数相同。,36,2.2.2 矩阵的关系运算,关系运算符:MATLAB提供了6种关系运算符:(大于)、=(大于或等于)、=(等于)、=(不等于)。它们的含义不难理解,但要注意其书写方法与数学中的不等式符号不尽相同。 关系运算符的运算法则: 关系运算将对两个矩阵的对应元素进行比较。,37,2.2.2 矩阵的关系运算,关系运算
17、符的运算法则为: (1) 当两个比较量是标量时,直接比较两数的大小。若关系成立,关系表达式结果为1,否则为0。 (2) 当参与比较的量是两个维数相同的矩阵时,比较是对两矩阵相同位置的元素按标量关系运算规则逐个进行,并给出元素比较结果。最终的关系运算的结果是一个维数与原矩阵相同的矩阵,它的元素由0或1组成。,38,2.2.2 矩阵的关系运算,(3) 当参与比较的一个是标量,而另一个是矩阵时,则把标量与矩阵的每一个元素按标量关系运算规则逐个比较,并给出元素比较结果。最终的关系运算的结果是一个维数与原矩阵相同的矩阵,它的元素由0或1组成。,39,2.2.2 矩阵的关系运算,例2-8 产生5阶随机方阵
18、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是进行等于(= =)比较的结果矩阵。,40,2.2.3 矩阵的逻辑运算,逻辑运算 MATLAB提供了3种逻辑运算符:&(与)、|(或)和(非)。 逻辑运算的运算法则为: (1) 在逻辑运算中,确认非零元素为真,用1表示,零元素为假,用0表示。 (2) 设参与逻辑运算的是两个
19、标量a和b,那么, a&b a,b全为非零时,运算结果为1,否则为0。 a|b a,b中只要有一个非零,运算结果为1。 a 当a是零时,运算结果为1;当a非零时,运算结果为0。,41,2.2.3 矩阵的逻辑运算,(3) 若参与逻辑运算的是两个同维矩阵,那么运算将对矩阵相同位置上的元素按标量规则逐个进行。最终运算结果是一个与原矩阵同维的矩阵,其元素由1或0组成。(4) 若参与逻辑运算的一个是标量,一个是矩阵,那么运算将在标量与矩阵中的每个元素之间按标量规则逐个进行。最终运算结果是一个与矩阵同维的矩阵,其元素由1或0组成。,42,2.2.3 矩阵的逻辑运算,(5) 逻辑非是单目运算符,也服从矩阵运
20、算规则。(6) 在算术、关系、逻辑运算中,算术运算优先级最高,逻辑运算优先级最低。,43,2.2.3 矩阵的逻辑运算,例2-9 建立矩阵A,然后找出大于4的元素的位置。 (1) 建立矩阵A。 A=4, -65, -54, 0, 6; 56, 0, 67, -45, 0 (2) 找出大于4的元素的位置。 find(A4),44,2.2.3 矩阵的逻辑运算,MATLAB提供了一些逻辑函数,45,2. 3 矩阵函数分析,46,2. 3 矩阵函数分析,2.3 矩阵分析 2.3.1 对角阵与三角阵 1对角阵 只有对角线上有非0元素的矩阵称为对角矩阵,对角线上的元素相等的对角矩阵称为数量矩阵,对角线上的元
21、素都为1的对角矩阵称为单位矩阵。,47,2. 3 矩阵函数分析,提取矩阵的对角线元素 设A为mn矩阵,diag(A)函数用于提取矩阵A主对角线元素,产生一个具有min(m,n)个元素的列向量。 diag(A)函数还有一种形式diag(A,k),其功能是提取第k条对角线的元素。构造对角矩阵 设V为具有m个元素的向量,diag(V)将产生一个mm对角矩阵,其主对角线元素即为向量V的元素。 diag(V)函数也有另一种形式diag(V,k),其功能是产生一个nn(n=m+)对角阵,其第k条对角线的元素即为向量V的元素。,48,2. 3 矩阵函数分析,例2-10 先建立55矩阵A,然后将A的第一行元素
22、乘以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的每行乘以一个指定常数,49,2. 3 矩阵函数分析,2三角阵 三角阵又进一步分为上三角阵和下三角阵,所谓上三角阵,即矩阵的对角线以下的元素全为0的一种矩阵,而下三角阵则是对角线以上的元素全为0的一种矩阵。,50,2. 3 矩阵函数分析,(1) 上三角矩阵 求矩阵A的上三角阵的MATLAB函数是triu(A)。 triu(A)函数也
23、有另一种形式triu(A,k),其功能是求矩阵A的第k条对角线以上的元素。例如,提取矩阵A的第2条对角线以上的元素,形成新的矩阵B。 (2) 下三角矩阵 在MATLAB中,提取矩阵A的下三角矩阵的函数是tril(A)和tril(A,k),其用法与提取上三角矩阵的函数triu(A)和triu(A,k)完全相同。,51,2. 3 矩阵函数分析,2.3.2 矩阵的转置与旋转 1矩阵的转置 转置运算符是单撇号()。 2矩阵的旋转 利用函数rot90(A,k)将矩阵A旋转90的k倍,当k为1时可省略。,52,2. 3 矩阵函数分析,3矩阵的左右翻转 对矩阵实施左右翻转是将原矩阵的第一列和最后一列调换,第
24、二列和倒数第二列调换,依次类推。MATLAB对矩阵A实施左右翻转的函数是fliplr(A)。 4矩阵的上下翻转 MATLAB对矩阵A实施上下翻转的函数是flipud(A)。,53,2. 3 矩阵函数分析,2.3.3 矩阵的逆与伪逆 1矩阵的逆 对于一个方阵A,如果存在一个与其同阶的方阵B,使得: AB=BA=I (I为单位矩阵) 则称B为A的逆矩阵,当然,A也是B的逆矩阵。 求一个矩阵的逆是一件非常烦琐的工作,容易出错,但在MATLAB中,求一个矩阵的逆非常容易。求方阵A的逆矩阵可调用函数inv(A)。 例2-11 用求逆矩阵的方法解线性方程组 Ax=b 。 其解为: x=A-1b,54,2.
25、 3 矩阵函数分析,2矩阵的伪逆 如果矩阵A不是一个方阵,或者A是一个非满秩的方阵时,矩阵A没有逆矩阵,但可以找到一个与A的转置矩阵A同型的矩阵B,使得: ABA=A BAB=B 此时称矩阵B为矩阵A的伪逆,也称为广义逆矩阵。在MATLAB中,求一个矩阵伪逆的函数是pinv(A)。,55,3 求逆矩阵, X=1 2 3 0; 5 6 0 8; 9 0 11 12; 0 14 15 16; Y=inv(X) Y =0.2299 0.0908 0.0351 -0.07170.1940 0.0798 -0.0659 0.00950.1274 -0.0835 0.0322 0.0176-0.2892
26、0.0084 0.0275 0.0377,56,3 求逆矩阵,Y*X %矩阵与其逆阵相乘结果是单位矩阵 ans =1.0000 0 0 00 1.0000 0 00 0 1.0000 00 0 0 1.0000 X*Y %矩阵的逆阵是唯一的 ans =1.0000 0 0 00 1.0000 0 00 0 1.0000 00 0 0 1.0000,57,2. 3 矩阵函数分析,2.3.4 方阵的行列式 把一个方阵看作一个行列式,并对其按行列式的规则求值,这个值就称为矩阵所对应的行列式的值。在MATLAB中,求方阵A所对应的行列式的值的函数是det(A)。,58,1 求矩阵的行列式的值, X=1
27、 2 3 0; 5 6 0 8; 9 0 11 12;0 14 15 16; det(X) ans =-5464,59,2. 3 矩阵函数分析,2.3.5 矩阵的秩与迹 1矩阵的秩 矩阵线性无关的行数与列数称为矩阵的秩。在MATLAB中,求矩阵秩的函数是rank(A)。 2矩阵的迹 矩阵的迹等于矩阵的对角线元素之和,也等于矩阵的特征值之和。在MATLAB中,求矩阵的迹的函数是trace(A)。,60,2 求矩阵的秩, X=1, 2, 3; 2, 3 -5; 4 7 1; rank(X) ans =2,61,2. 3 矩阵函数分析,2.3.6 向量和矩阵的范数 矩阵或向量的范数用来度量矩阵或向量
28、在某种意义下的长度。范数有多种方法定义,其定义不同,范数值也就不同。,62,2. 3 矩阵函数分析,1向量的3种常用范数及其计算函数 在MATLAB中,求向量范数的函数为: (1) norm(V)或norm(V,2):计算向量V的2范数。 (2) norm(V,1):计算向量V的1范数。 (3) norm(V,inf):计算向量V的范数。,63,2. 3 矩阵函数分析,2矩阵的范数及其计算函数 MATLAB提供了求3种矩阵范数的函数,其函数调用格式与求向量的范数的函数完全相同。 2.4.7 矩阵的条件数 在MATLAB中,计算矩阵A的3种条件数的函数是: (1) cond(A,1) 计算A的1
29、范数下的条件数。 (2) cond(A)或cond(A,2) 计算A的2范数数下的条件数。 (3) cond(A,inf) 计算A的 范数下的条件数。,64,2. 3 矩阵函数分析,2.3.8 矩阵的特征值与特征向量 在MATLAB中,计算矩阵A的特征值和特征向量的函数是eig(A),常用的调用格式有3种: (1) E=eig(A):求矩阵A的全部特征值,构成向量E。 (2) V,D=eig(A):求矩阵A的全部特征值,构成对角阵D,并求A的特征向量构成V的列向量。,65,2. 3 矩阵函数分析,(3) V,D=eig(A,nobalance):与第2种格式类似,但第2种格式中先对A作相似变换
30、后求矩阵A的特征值和特征向量,而格式3直接求矩阵A的特征值和特征向量。,66,2. 3 矩阵函数分析,例2-12 用求特征值的方法解方程。 3x5-7x4+5x2+2x-18=0 p= 3, -7, 0, 5, 2, -18 ; A=compan(p); %A的伴随矩阵 x1=eig(A) %求A的特征值 x2=roots(p) %直接求多项式p的零点,67,4 求特征值和特征向量, X= -2 1 1; 0 2 0; -4 1 3 ; V D=eig(X) V=-0.7071 -0.2425 0.3015 0 0 0.9045-0.7071 -0.9701 0.3015 D=-1 0 00
31、2 00 0 2,68,5 矩阵分解, A=2 -1 3; 1 2 1; 2 4 3; L, U=lu(A) %三角分解 L =1.0000 0 00.5000 0.5000 1.00001.0000 1.0000 0 U =2.0000 -1.0000 3.00000 5.0000 00 0 -0.5000,69,6 求解线形方程组,例题 求下列线性方程式的根,2X1 + X2 - X3= 5 3X1 - 2X2 + 2X3= 5 5X1 - 3X2 - X3= 16,70,2. 3 矩阵函数分析,2.3.9 矩阵的超越函数 1矩阵平方根sqrtm sqrtm(A)计算矩阵A的平方根。 2矩
32、阵对数logm logm(A)计算矩阵A的自然对数。此函数输入参数的条件与输出结果间的关系和函数sqrtm(A)完全一样,71,2. 3 矩阵函数分析,3矩阵指数expm、expm1、expm2、expm3 expm(A)、expm1(A)、expm2(A)、expm3(A)的功能都求矩阵指数eA。 4普通矩阵函数funm funm(A,fun)用来计算直接作用于矩阵A的由fun指定的超越函数值。当fun取sqrt时,funm(A,sqrt)可以计算矩阵A的平方根,与sqrtm(A)的计算结果一样。,72,2. 3 矩阵函数分析,2.3.10 字符串 在MATLAB中,字符串是用单撇号括起来的
33、字符序列。 MATLAB将字符串当作一个行向量,每个元素对应一个字符,其标识方法和数值向量相同。也可以建立多行字符串矩阵。,73,2. 3 矩阵函数分析,字符串是以ASCII码形式存储的。abs和double函数都可以用来获取字符串矩阵所对应的ASCII码数值矩阵。相反,char函数可以把ASCII码矩阵转换为字符串矩阵。,74,2. 3 矩阵函数分析,例2-13 建立一个字符串向量,然后对该向量做如下处理: (1) 取第15个字符组成的子字符串。 (2) 将字符串倒过来重新排列。 (3) 将字符串中的小写字母变成相应的大写字母,其余字符不变。 (4) 统计字符串中小写字母的个数。,75,2.
34、 3 矩阵函数分析,命令如下: ch=ABc123d4e56Fg9; subch=ch(1:5) %取子字符串 revch=ch(end:-1:1) %将字符串倒排 k=find(ch=a %将小写字母变成相应的大写字母 char(ch) length(k) %统计小写字母的个数,76,2. 3 矩阵函数分析,与字符串有关的另一个重要函数是eval,其调用格式为: eval(t) 其中t为字符串。它的作用是把字符串的内容作为对应的MATLAB语句来执行。,77,2. 4 结构数据和单元数据,2.4.1 结构数据 1结构矩阵的建立与引用 结构矩阵的元素可以是不同的数据类型,它能将一组具有不同属性
35、的数据纳入到一个统一的变量名下进行管理。建立一个结构矩阵可采用给结构成员赋值的办法。具体格式为:结构矩阵名.成员名=表达式 其中表达式应理解为矩阵表达式。,78,2结构成员的修改 可以根据需要增加或删除结构的成员。例如要给结构矩阵a增加一个成员x4,可给a中任意一个元素增加成员x4: a(1).x4=410075; 但其他成员均为空矩阵,可以使用赋值语句给它赋确定的值。 要删除结构的成员,则可以使用rmfield函数来完成。例如,删除成员x4: a=rmfield(a,x4); 3关于结构的函数 除了一般的结构数据的操作外,MATLAB还提供了部分函数来进行结构矩阵的操作。,2. 4 结构数据
36、和单元数据,79,2.4.2 单元数据 1单元矩阵的建立与引用 建立单元矩阵和一般矩阵相似,只是矩阵元素用大括号括起来。 可以用带有大括号下标的形式引用单元矩阵元素。例如b3,3。单元矩阵的元素可以是结构或单元数据。 可以使用celldisp函数来显示整个单元矩阵,如celldisp(b)。还可以删除单元矩阵中的某个元素。2关于单元的函数 MATLAB还提供了部分函数用于单元的操作。,2. 4 结构数据和单元数据,80,2.4.3 稀疏矩阵 1 矩阵存储方式 MATLAB的矩阵有两种存储方式:完全存储方式和稀疏存储方式。 a完全存储方式 完全存储方式是将矩阵的全部元素按列存储。以前讲到的矩阵的
37、存储方式都是按这个方式存储的,此存储方式对稀疏矩阵也适用。,2. 4 结构数据和单元数据,81,b稀疏存储方式 稀疏存储方式仅存储矩阵所有的非零元素的值及其位置,即行号和列号。在MATLAB中,稀疏存储方式也是按列存储的。 注意,在讲稀疏矩阵时,有两个不同的概念,一是指矩阵的0元素较多,该矩阵是一个具有稀疏特征的矩阵,二是指采用稀疏方式存储的矩阵。,2. 4 结构数据和单元数据,82,2.4.4 稀疏存储方式的产生 1将完全存储方式转化为稀疏存储方式 函数A=sparse(S)将矩阵S转化为稀疏存储方式的矩阵A。当矩阵S是稀疏存储方式时,则函数调用相当于A=S。 sparse函数还有其他一些调
38、用格式: sparse(m,n):生成一个mn的所有元素都是0的稀疏矩阵。 sparse(u,v,S):u,v,S是3个等长的向量。S是要建立的稀疏矩阵的非0元素,u(i)、v(i)分别是S(i)的行和列下标,该函数建立一个max(u)行、max(v)列并以S为稀疏元素的稀疏矩阵。 此外,还有一些和稀疏矩阵操作有关的函数。例如 u,v,S=find(A):返回矩阵A中非0元素的下标和元素。这里产生的u,v,S可作为sparse(u,v,S)的参数。 full(A):返回和稀疏存储矩阵A对应的完全存储方式矩阵。,2. 4 结构数据和单元数据,83,2产生稀疏存储矩阵 只把要建立的稀疏矩阵的非0元
39、素及其所在行和列的位置表示出来后由MATLAB自己产生其稀疏存储,这需要使用spconvert函数。调用格式为: B=spconvert(A) 其中A为一个m3或m4的矩阵,其每行表示一个非0元素,m是非0元素的个数,A每个元素的意义是: (i,1) 第i个非0元素所在的行。 (i,2) 第i个非0元素所在的列。 (i,3) 第i个非0元素值的实部。 (i,4) 第i个非0元素值的虚部,若矩阵的全部元素都是实数,则无须第四列。 该函数将A所描述的一个稀疏矩阵转化为一个稀疏存储矩阵。,2. 4 结构数据和单元数据,84,例2-15 根据表示稀疏矩阵的矩阵A,产生一个稀疏存储方式矩阵B。 命令如下
40、: A=2, 2, 1; 3, 1, -1; 4, 3, 3; 5, 3, 8; 6, 6, 12; B=spconvert( A ),2. 4 结构数据和单元数据,85,3带状稀疏存储矩阵 用spdiags函数产生带状稀疏矩阵的稀疏存储,调用格式是: A=spdiags(B, d, m, n) 其中,参数m,n为原带状矩阵的行数与列数。B为rp阶矩阵,这里r=min(m,n),p为原带状矩阵所有非零对角线的条数,矩阵B的第i列即为原带状矩阵的第i条非零对角线。,2. 4 结构数据和单元数据,86,4单位矩阵的稀疏存储 单位矩阵只有对角线元素为1,其他元素都为0,是一种具有稀疏特征的矩阵。函数
41、eye产生一个完全存储方式的单位矩阵。MATLAB还有一个产生稀疏存储方式的单位矩阵的函数,这就是speye。函数speye(m,n)返回一个mn的稀疏存储单位矩阵。,2. 4 结构数据和单元数据,87,2.5 向量,向量是矢量运算的基础 行向量 列向量,88,2.5.1 向量的构造,1逐个输入 a=1 3 9 10 15 16 %采用空格或逗号分隔构成行向量 b=1; 3; 9; 10; 15; 16 %采用分号隔开构成列向量 2利用冒号表达式“:”生成向量 x=1:2:9 %初值=1,终值=9,步长=2 z=1:5 %初值=1,终值=5,默认步长=1 3利用函数生成向量 x=linspac
42、e(1, 9, 5) %初值=1,终值=9,元素数目=5,89,2.5.2 向量的运算,1加减与数加减 2点积:dot函数 3叉积:cross函数例 a=1 2 3a+1,90,2.5.2 向量的运算,2点积:dot函数。是指两个向量在其中某一个向量方向上的投影的乘积,通常可用来引申定义向量的模。 3叉积:cross函数。叉积:表示过两相交向量的交点的垂直于两向量所在在平面的向量。注意:dot函数与.*的区别cross函数与*的区别,91,2.5.2 向量的运算,例 a = 1 2 3 ; b = 4 5 6 ; c = dot(a, b) d = cross(a, b) c =32 d =-
43、3 6 -3,92,2.6 数组,数组运算方式是一种元素对元素的运算(不按照线性代数的规则) ;除了加、减法与矩阵相同以外,乘、除、幂的数组运算符都是通过在标准的运算符前面加一个圆点来生成。,93,2.6.1 创建简单的数组,访问一个元素:x(i)表示访问数组x的第i个元素. 访问一块元素:x(a :b :c)表示访问数组x的从第a个元素开始,以步长为b到第c个元素(但不超过c),b可以为负数,b缺省时为1. 直接使用元素编址序号. x(a b c d) 表示提取数组x的第a、b、c、d个元素构成一个新的数组x(a) x(b) x(c) x(d).,94,2.6.2 数组的方向,前面例子中的数
44、组都是一行数列,是行方向分布的. 称之为行向量. 数组也可以是列向量,它的数组操作和运算与行向量是一样的,唯一的区别是结果以列形式显示。 产生列向量有两种方法:直接产生 例 c=1;2;3;4转置产生 例 b=1 2 3 4; c=b 说明:以空格或逗号分隔的元素指定的是不同列的元素,而以分号分隔的元素指定了不同行的元素.,95,2.6.3 数组标量与数组的运算,数组对标量的加、减、乘、除、乘方是数组的每个元素对该标量施加相应的加、减、乘、除、乘方运算. 设:a=a1,a2,an, c为标量 则:a+c=a1+c,a2+c,an+ca.*c=a*c=a1*c,a2*c,an*ca./c= a/
45、c=a1/c,a2/c,an/c(右除)a.c= c/a1,c/a2,c/an (左除)a.c= a1c,a2c,ancc.a= ca1,ca2,can,96,2.6.3 数组与数组的运算,当两个数组有相同维数时,加、减、乘、除、幂运算可按元素对元素方式进行的,不同大小或维数的数组是不能进行运算的. 设:a=a1,a2,an, b=b1,b2,bn 则:a+b= a1+b1,a2+b2,an+bna.*b= a1*b1,a2*b2,an*bna./b= a1/b1,a2/b2,an/bna.b=b1/a1,b2/a2,bn/ana.b=a1b1,a2b2,anbn,97,数组运算, x= 1
46、2 3; 4 5 6; 7 8 9 ; y= 9 8 7; 6 5 4; 3 2 1 ; x+y %数组和矩阵的加法规则相同 ans =10 10 1010 10 1010 10 10 x.*y %数组乘法:对应元素相乘 ans =9 16 2124 25 2421 16 9 x*y %矩阵乘法:按照线性代数理论进行 ans =30 24 1884 69 54138 114 90,98,多维数组维间处理的函数,1reshape 2size 3ndims 4cat 5permute 6ipermute 7shiftdim 8squeeze,99,2.7 多项式,多项式是形如P(x) = a0xn
47、+a1xn-1+an-1x+an的式子。 在MATLAB中,多项式用行向量表示:P= a0 a1 an-1 an,100,2.7.1 多项式的生成与表达,例:已知向量A=1 -34 -80 0 0,用此向量构造一多项式并显示结果。(x-1)(x+34)(x+80)(x-0)(x-0)PA=poly(A) PAX=poly2str(PA,X)X5 + 113 X4 + 2606 X3 - 2720 X2,101,2.7.2 多项式的运算,1. 多项式的算术运算 参加加减运算的多项式应该具有相同的阶次。 多项式乘法采用conv函数,除法由deconv函数完成。 2. 求根 求多项式的根采用roots函数。 3. 求值 函数polyval可以将某个特定数值代入多项式 函数polyvalm可以求出当多项式中的未知数为方阵时的值。 4. 求导 使用polyder函数对多项式求导。,