ch2Matlab矩阵的生成与运算.ppt_第1页
ch2Matlab矩阵的生成与运算.ppt_第2页
ch2Matlab矩阵的生成与运算.ppt_第3页
ch2Matlab矩阵的生成与运算.ppt_第4页
ch2Matlab矩阵的生成与运算.ppt_第5页
已阅读5页,还剩64页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Matlab矩阵的生成与运算 安徽工业大学数理学院 侯为根 【例例1-11-1】表示矩阵表示矩阵 一、一、MATLABMATLAB矩阵的生成矩阵的生成 1、直接输入法 将矩阵的元素用方括号括起来,按矩阵行的顺序 输入各元素,同一行的各元素之间用空格或逗号 分隔,不同行的元素之间用分号分隔。 A=1,2,3;4,5,6;7,8,0 A=1,2,3;4 5,6;7,8 0 【例1-2】 试输入复数矩阵 需要避免的语句 B=1+9*i,2+8*i,3+7*j; 4+6*j 5+5*i,6+4*i;7+3*i,8+2*i,i B=1 +9*i,2+8*i,3+7*j; 4+6*j 5+5*i,6+4*i;7+3*i,8+2*i,i 2、利用M文件建立矩阵 对于比较大且比较复杂的矩阵,可以为它专门建 立一个M文件。 【例1-3】利用M文件建立mymat矩阵。 (1) 启动有关编辑程序或MATLAB文本编辑器, 并输入待建矩阵. (2) 把输入的内容以纯文本方式存盘(设文件名为 mymat.m)。 (3) 运行该M文件,就会自动建立一个名为mymat 的矩阵,可供以后使用。 A=4 10 1 6 2;8 2 9 4 7; 7 5 7 1 5;0 3 4 5 4;23 13 13 0 3 3、利用MATLAB函数建立矩阵 几个产生特殊矩阵的函数:zeros、ones、 eye 、rand、randn、pascal、 magic(n)、 vander(V)、 hilb(n) 、 toeplitz(x,y)、 compan(P) 。 这几个函数的调用格式相似,下面以产生零矩阵 的zeros函数为例进行说明。其调用格式是: zeros(m) 产生mm零矩阵 zeros(m,n) 产生mn零矩阵。 zeros(size(A) 产生与矩阵A同样大小的零矩阵 相关的函数有:length(A)给出行数和列数中的较 大者,即length(A)=max(size(A);ndims(A)给出 A的维数。 指令说说 明 zeros(m,n)产产生阶为阶为 mn, 元素全为为0的矩阵阵 ones(m,n)产产生阶为阶为 mn, 元素全为为1的矩阵阵 eye(n)产产生阶为阶为 nn的单单位阵阵 pascal(m,n)产产生阶为阶为 mn 的 Pascal 矩阵阵 vander(m,n) 产产生阶为阶为 mn 的 Vandermonde 矩阵 阵 hilb(n)产产生阶为阶为 nn 的 Hilbert 矩阵阵 rand(m,n)产产生 0,1均匀分布的随机数矩阵阵,其阶为阶为 mn randn(m,n)产产生=0, =1的正态态分布随机数矩阵阵,其阶为阶为 mn magic(n)产产生阶为阶为 nn的魔方阵阵 diag(v)产产生以向量v为对为对 角元素的对对角阵阵 【例1-4】 分别建立33、32和与矩阵A同样大小的 零矩阵。 (1) 建立一个33零矩阵:zeros(3) (2) 建立一个32零矩阵:zeros(3,2) (3) 建立与矩阵A同样大小零矩阵:zeros(size(A) 此外,常用的函数还有reshape(A,m,n),它在矩阵 总元素保持不变的前提下,将矩阵A重新排成mn 的二维矩阵。 【例1-5】 将4阶魔方阵形变为2行8列的矩阵 reshaps(magic(4),2,8) hilb(n)指令可以产生nn的 Hilbert 矩阵 Hilbert矩阵 Hilbert 矩阵的特性: 当矩阵变大时,其矩阵会接近奇 异(即矩阵的行列式会接近于0),Hilbert矩阵常被 用来评估各种逆矩阵计算方法的稳定性。 【例1-6】 计算6阶hilbert矩阵的行列式 det(hilb(6) x1 = rand(10000, 1); x2 = randn(10000, 1); subplot(2,1,1); hist(x1, 40); title(均匀分布); subplot(2,1,2); hist(x2, 40); title(高斯分布); set(findobj(gcf, type, patch),EdgeColor, w); % 改边线为白色 【例1-7】产生10000个均匀均匀与正态分布的随机数 产生随机数矩阵指令rand 和 randn 4、建立大矩阵 大矩阵可由方括号中的小矩阵建立起来。 A=1 2 3;4 5 6;7 8 0; 5 5、冒号表达式、冒号表达式 冒号表达式的一般格式:v=s1:s2:s3 还可以用linspace函数产生行向量:linspace(a,b,n) linspace(a,b,n)与a:(b-a)/(n-1):b等价 C=A,eye(size(A);ones(size(A),A A=A;1 2 3;1;2;3;4; 【例1-8】使用小矩阵构造大矩阵 【例1-9】 用不同的步距生成 (0,p) 间向量 V1=0:0.2:pi V3=0:-1:pi V2=0:pi V4=pi:-1:0 V5=0:0.2:pi,pi V7=0:pi/100:pi V6=linspace(0,pi,100) 二、对矩阵元素的操作 矩阵A中,位于第i行、第j列的元素可表示为 A(i,j) Fi与j即是此元素的下标(Subscript) 或索引(Index) MATLAB中所有矩阵的内部表示法都是以列为 主的一维向量 FA(i,j)和A(i+(j-1)*m)是完全一样的 m为矩阵A的列数 1、矩阵的索引或下标 我们可以使用一维或二维下标来存取矩阵 A=4 10 1 6 2;8 2 9 4 7; 7 5 7 1 5;0 3 4 5 4;23 13 13 0 3 2 、矩阵元素 MATLAB允许用户对一个矩阵的单个元素进行 赋值和操作。例如 A(3,2)=200 也可以采用矩阵元素的序号来引用矩阵元素。 矩阵元素按列编号,先第一列,再第二列,依 次类推。 以mn矩阵A为例,矩阵元素A(i,j)的序号为:(j -1) *m+i。其相互转换关系也可利用sub2ind和 ind2sub函数求得。 3. 3. 子矩阵提取子矩阵提取 (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表示某一维的末尾元素下 标。 【例例2-12-1】子矩阵提取子矩阵提取 提取矩阵提取矩阵A A 全部奇数行,所有列全部奇数行,所有列 将矩阵将矩阵A A 左右翻转左右翻转 提取矩阵提取矩阵A A的的 3,2,1 3,2,1 行、行、2,3,4 2,3,4 列构成子矩阵列构成子矩阵 将矩阵将矩阵A A 2,4 2,4列全变为列全变为1 1 B1=A(1:2:end,:) B3=A(:,end:-1:1) B2=A(3,2,1,2:4) A(:,2,4)=ones(4,2) 4、利用空矩阵删除矩阵的元素 在MATLAB中,定义 为空矩阵。给变量X赋 空矩阵的语句为X= 。 【注意】X= 与clear X不同,clear是将X从工作空间 中删除,而空矩阵则存在于工作空间,只 是维数为0。 将某些元素从矩阵中删除,采用将其置为空矩阵的 方法就是一种有效的方法。 【例2-2】将矩阵将矩阵A A 2,4 2,4行删去行删去 A(2,3,:= 5 5 矩阵翻转矩阵翻转 左右翻转左右翻转: : 上下翻转上下翻转: : 旋转旋转 9090 o o : : 如何旋转如何旋转180180 o o ? fliplr(A ) ) flipud(A) rot90(A) rot90(rot90(A) A=1 2 3 4;5 6 7 8;9 10 11 12 A1=diag(A) A2=diag(A,1) A3=diag(A,-1) B1=diag(A1,1) B2=diag(A3,1) 6 选取对角元素 7 选取上下)三角元阵 c1=tril(A) c2=tril(A,1) c3=tril(A,-1) d1=triu(A) d2=triu(A,1) D3=triu(A,-1) 1、直接创建稀疏矩阵 例: S=sparse(i,j,s,m,n) 其中i 和j 分别是矩阵非零元素的行和列指标向量 ,s 是非零元素值向量,m,n 分别是矩阵的行数 和列数。 S2=sparse(1 2 2 3 4 4,3 1 3 4 2 3,. 5 3 3 1 4 3,4,4) 稀疏矩阵的输入与生成 2、从文件中创建稀疏矩阵 例:设文本文件 T.txt 中有三列内容,第一列是一 些行下标,第二列是列下标,第三列是非零元素值 。 1 3 5 2 1 3 2 3 3 3 4 1 4 2 4 4 3 3 利用load和spconvert函数可以从包含一系列下 标和非零元素的文本文件中输入稀疏矩阵。 load T.txt S=spconvert(T) 3、稀疏带状矩阵的创建 例: S=spdiags(B,d,m,n) 其中m 和n 分别是矩阵的行数和列数;d是长度为 p的整数向量,它指定矩阵S的对角线位置;B是 全元素矩阵,用来给定S对角线位置上的元素, 行数为min(m,n),列数为p 。 B=rand(4,2); S3=spdiags(B,0 1,4,4) 4、满矩阵与稀疏矩阵之间的转化 例: S=sparse(A) A=full(S) A=0 0 5 0; 3 0 3 0 ; 0 0 0 1; 0 4 3 0 S=sparse(A) whos 1. 数学运算 2. 逻辑运算 三、 Matlab基本运算 3. 比较运算 4. 位运算符 5. 集合运算符 一、数学运算 MATLAB的基本算术运算有: (加)、(减)、*(乘)、/(右除)、(左除)、(乘 方)、共轭转置()正号(+),负号(-) 【注意】运算是在矩阵意义下进行的,单个数据 的算术运算只是一种特例。 2. 点运算 点运算符有.*、./、.和.。两矩阵进行点运算是 指它们的对应元素进行相关运算,要求两矩阵的 维参数相同。 1. 基本算术运算 1.转置(.),幂次(.).共轭转置(),矩阵幂次( ) 2.正号(+),负号(-) 3.乘法(.*),元素右除(./),元素左除(.),矩阵乘 法(*),矩阵右除(/),矩阵左除() 4.加法(+),减法(-) 5.冒号(:)(例如: x = 1:2:5 等) 数学运算符之优先级: 同一类的运算符均具有相同的优先度(Priority),因此 在计算上,是由左至右依次完成 矩阵的数学运算 矩阵的加减与一般标量(Scalar)的加减类似 相加或相减的矩阵必需具有相同的维度 A = 12 34 56 20; B = 1 3 2 4; C = A + B C1= A-B 例1: 加减法运算 矩阵与纯量可以直接进行加减,MATLAB 会直接将 加减应用到每一个元素 A=1 2 3 2 1 + 5 矩阵的加减法运算 矩阵的乘法与除法 标量对矩阵的乘或除,可比照一般写法 A = 1 2 3; 4 4 2; C = A/3 B = 2*A 欲进行矩阵相乘,必需确认第一个矩阵的列数( Column Dimension) 必需等于第二个矩阵的行 数(Row Dimension) 例2:矩阵的乘法 A = 1; 2; B = 3, 4, 5; C = A*B 矩阵除法 若A为非奇异方阵,则X=A-1B 若A为非奇异方阵,则X=BA-1 矩阵左除:AX = B,求 X MATLAB 求解:X=AB 最小二乘解 矩阵右除:XA = B,求 X MATLAB求解:X=B/A最小二乘解 注:若A为非奇异方阵,则A-1在Matlab中为 inv(A) 矩阵的次方运算 矩阵的次方运算,可由“”来达成,但矩阵必需是方 阵,其次方运算才有意义 A = magic(3); B = A2 例3: 复数矩阵z,其“共轭转置”矩阵(Conjugate Transpose)可表示成矩阵z 转置和共轭转置矩阵 i = sqrt(-1);% 单位虚数 z = 1+i, 2; 3, 1+2i; w = z % 共轭转置(注意z后面的单引号) 例4: 矩阵共轭转置 i = sqrt(-1);% 单位虚数 z = 1+i, 2; 3, 1+2i; w = z.% 单纯转置(注意z后面的句点及单引号 ) 想得到任何矩阵z的转置(Transpose),则可表 示成矩阵矩阵z. 例5:矩阵的转置 若z为实数,则z和z.的结果是一样的 2、点运算 矩阵对应元素的直接运算 例如 A =1 2 3;4 5 6;7 8 0 B = A.A 3MATLAB数组运算函数 1. 规则:设X=(xij)mn,则 f (X)=(f (xij)mn sin cos tan cot sec csc asin acos atan acot asec acsc 2. 常用数学函数 三角与反 三角函数 exp log log10 sqrt pow2 ceil fix floor round rem sign abs angle conj imag real 指数与对数 复变函数 取整函数 cart2sph cart2pol pol2cart sph2pol 坐标转换 注:若要对函数进行矩阵运算,方法为: funm(X,f) 4 4、 MATLABMATLAB矩阵运算函数矩阵运算函数 size(A) %矩阵的大小 inv(A) %矩阵的逆 det(A) %矩阵的行列式 rank(A) %矩阵的秩 rref(A) %矩阵列的极大无关组 orth(A) %矩阵化为正交阵 trace(A) %矩阵的迹 chol(A) %三角分解,A=L*LT lu(A) %A对称,A=L*U U,S,V=svd(A) %A=U*S*V qr(A) %A=q*r(q正交阵,r三角阵) norm(A,1|2|p|inf|fro) %矩阵的模 cond(A) %矩阵的条件数 4 4、 MATLABMATLAB矩阵运算函数矩阵运算函数 eig(A) %A*x=*x V,D=eig(A) %A*V=V*D eig(A,B) %A*x=*B*x V,D=eig(A,B) %A*V=B*V*D 例:设A=pascal(4),B=magic(4),并使用下列函 数进行计算 向量的p-norm 一个向量a的p-norm可以定义为 p=2 时,此即为向量 a 的长度,或称欧氏长度 (Euclidean Length) 欲求一向量的p-norm,可使用norm指令norm(x,p) a = 3 4; x = norm(a, 1) % x = 7 y = norm(a, 2) % y = 5 z = norm(a, inf) 注意: 矩阵A的p-norm可以定义如下: 例9: normMatrix norm 指令亦可用于计算矩阵的 p-norm A = 1 2 3; 4 5 6; 7 8 9; norm(A, 2) Cholesky分解是将一个对称的正定矩阵分解为一个 上三角矩阵和其转置的乘积。 X=pascal(5) R=chol(X) C=R*R LU分解是将原正方 (square) 矩阵分解成一个上三角 形矩阵 或是排列(permuted) 的上三角形矩阵 和一 个 下三角形矩阵,这样的分解法又称为三角分解。 命令格式为: L,U=lu(A) L,U,P=lu(A) 例如: B=1 3 2; -2 -6 1; 2 5 7 L,U=lu(B) L*U L,U,P=lu(B) P*L*U QR分解法是将矩阵分解成一个正规正交矩阵与上 三角形矩阵,矩阵A不必为正方矩阵。 A=1 3 2 5; -2 -6 1 6; 2 5 7 2 Q,R=qr(A) Q*Q Q*R 奇异值分解 (sigular value decomposition,SVD) 是另一种 正交矩阵分解法;SVD是最可靠的分解法,但是它比 QR 分解法要花上近十倍的计算时间。 U,S,V=svd(A),其中U和V代表二个相互正交矩阵, 而S代表一对角矩阵。 和QR分解法相同者, 原矩阵A 不必为正方矩阵。 A=1,2;3,1 S,V,D=svd(A) 矩阵的比较运算 , =, 5 ab a=b 关系运算符的用法: 关系运算符的用法 A=1 2 3; 4 5 6;7 8,0 b=A5 A(b) 3、同维矩阵间比较;返回0-1矩阵 2、矩阵与一数比较返回0-1矩阵 例2:给出矩阵A中大与5的元素值 例3: 接上例,设B=magic(3) B=magic(3); BA find指令 : 可传回非零元素索引,显示一维索引或下标 元素索引 index=find(A5) 可以将关系运算符返回的0-1矩阵,来进行矩阵的 索(Indexing)求出在A矩阵中,满足AijBij的 元素 x = 0 1 2; 0 0 3 index = find(x) x(index) x(index)则是非零元素所形成的向量 要找出满足某条件的二维索引或下标 2维索引 idx1,idx2=find(x5) idx1和idx2分别是符合条件之矩阵元素的列索 引(Row Index)及行索引(Column Index) 例:如何找出介于7和11的元素? x = magic(5) x(find(72*pi).*y; %消去负半波 q=(xpi/3 %消去负半波 p=sin(pi/3); y2=(y=p)*p+(y=a); end whos x* x3,x4,x5,x6 都是在for-loop中产生的变量,分别代表 维度为33、44、55、66的魔方阵 class 或 ischar 指令: 判断某一个变量是否为字符串 字符串的判断字符串的判断 chinese=今日事,今日毕 out1=class(chinese) %out1的值是“char”,代表chinese是字符串变量 x = chinese+1; out2 = ischar(x) %out2的值是0,代表x不是一个字符串变量 2 2、一个变量来储存多个字符串、一个变量来储存多个字符串 第一种方法是使用二维字符数组(Two Dimensional Character Arrays) 必须先确认每个字符串(即每一行)的长度一样,否则 就必须在短字符串结尾补上空格符 departments=ee ;cs ;econ %注意空格符的使用 用用char char 指令储存多个字符串指令储存多个字符串 departments=char(ee,cs,econ) %注意“()”及“,”的使用 得到结果和前例一样得到结果和前例一样; ; 从二维字符数组抽取出字符串时,切记要使用 deblank 指令来移除尾部的空格符 departments = char(ee,cs,econ) dept1 = departments(1,:) % (1,:)代表第一行的元素 dept2 = deblank(dept1) % 使用 deblank 指令来移除尾部的空格符 len1 = length(dept1) % 显示变量 dept1 的长度=4 len2 = length(dept2) % 显示变量 dept2 的长度=2 例如:例如: 3 3、字符串的比较、寻找、代换、分解与结合、字符串的比较、寻找、代换、分解与结合 str1 = today; str2 = tomorrow; str3 = today; out1 = strcmp(str1, str2) % 比较两字符串 str1 和 str2 = 0 out2 = strcmp(str1, str3) % 比较两字符串 str1 和 str3 = 1 strcmp(s1,s2): 比较串比较串s1s1和和s2,s2,相等返回相等返回1,1,否则为否则为0 0 例如:例如: 字符串的比较和寻找字符串的比较和寻找 strncmp(s1,s2):

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论