资源描述
2007年3月,1,第二章 MATLAB语言基础,2.1 基本概念 2.2 向量运算 2.3 矩阵运算 2.4 数组运算 2.5 字符串运算,2007年3月,2,本章要求: 了解MATLAB的数据类型,理解向量、矩阵、数组、函数和表达式等基本概念,掌握向量、矩阵和数组的基本运算法则和运算函数的使用。,2007年3月,3,1. MATLAB数据类型,2.1 基本概念,2007年3月,4,2.1 基本概念,2. 常量与变量 特殊常量表,2007年3月,5,变量命名遵守如下规则: 变量名必须以字母开头,且只能由字母、数字或者下划线三类符号组成,不能含有空格和标点符号(如( ) ,。% )等。 变量名区分字母的大小写。例如,“a”和“A”是不同的变量。 变量名不能超过63个字符,第63个字符后的字符被忽略,对于MATLAB6.5版以前的变量名不能超过31个字符。 关键字(如if、while等)不能作为变量名。 最好不要用表2.1中的特殊常量符号作变量名。 常见的错误命名如f(x),y,y等。,2.1 基本概念,2007年3月,6,3.标量、向量、矩阵与数组 各自的特点及相互间的关系 : (1)一维数组的数学原型是向量 ,二维数组的数学原型是矩阵 。在MATLAB中,数组的用法与一般高级语言不同,它不借助于循环,而是直接采用运算符,它有自己独立的运算符和运算法则 。 (2) MATLAB将矩阵引入作为基本运算量。 (3)向量是一个数学量,它可视为矩阵的特例。 (4)标量的提法也是一个数学概念 ,可把它当成11阶的矩阵 。 (5)二维数组和矩阵其实是数据结构形式相同的两种运算量。二维数组和矩阵的表示、建立、存储根本没有区别,区别只在它们的运算符和运算法则不同。 (6)数组的维和向量的维是两个完全不同的概念,2.1 基本概念,2007年3月,7,4.字符串 字符串用单引号来标示。 如:S=I HAVE A DREAM. 字符串实际可视为一个字符数组 。,2.1 基本概念,2007年3月,8,5.运算符,MATLAB运算符可分为三大类: 算术运算符:矩阵算术运算符 、数组算术运算符 关系运算符 逻辑运算符,2007年3月,9,2007年3月,10,2007年3月,11,2007年3月,12,2007年3月,13,2007年3月,14,6.命令、函数、表达式和语句,命令 : 在MATLAB中,命令与函数都组织在函数库里,有一个专门的函数库general就是用来存放通用命令的。 函数 : 函数最一般的引用格式是: 函数名(参数1,参数2,) 表达式 : 例如:AB1 1 1 (2)单下标方式: A(3:6)=-1 1 1 -1 (3)全元素方式:将B矩阵的所有元素全部赋值给A矩阵,即A(:)=B,不要求A、B同阶,只要求元素个数相等。,二、矩阵元素表示及相关操作,2007年3月,22,3. 矩阵元素的删除 在MATLAB中,可以用空矩阵(用表示)将矩阵中的单个元素、某行、某列、某矩阵子块及整个矩阵中的元素删除。 例: A(2,:)=%删除A矩阵的第2行,“:”可表示所有行或列,二、矩阵元素表示及相关操作,2007年3月,23,三、矩阵的创建,矩阵表示的约定 : (1)矩阵的所有元素必须放在方括号()内; (2)每行的元素之间需用逗号或空格隔开; (3)矩阵的行与行之间用分号或回车键分隔; (4)元素可以是数值或表达式。,2007年3月,24,1. 直接输入法 例: x=27;y=3; A=1 2 3;4 5 6;B=2,3,4;7,8,9;12,2*6+1,14; C=3 4 5 7 8 x/y 10 11 12;,三、矩阵的创建,2007年3月,25,2. 抽取法:抽取法是从大矩阵中抽取出需要的小矩阵(或子矩阵)。 (1)用全下标方式 例: A=1 2 3 4;5 6 7 8;9 10 11 12;13 14 15 16 A = 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 B=A(1:3,2:3) B = 2 3 6 7 10 11,三、矩阵的创建,2007年3月,26,(2)用单下标方式 例: A=1 2 3 4;5 6 7 8;9 10 11 12;13 14 15 16 A = 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 B=A(4:6;3 5 7;12:14) B = 13 2 6 9 2 10 15 4 8,2007年3月,27,3. 拼接法,例: A=1 2 3;4 5 6;7 8 9,B=9 8;7 6;5 4 A = 1 2 3 4 5 6 7 8 9 B = 9 8 7 6 5 4 E=A B;B A E = 1 2 3 9 8 4 5 6 7 6 7 8 9 5 4 9 8 1 2 3 7 6 4 5 6 5 4 7 8 9,2007年3月,28,4. 函数法,2007年3月,29,2007年3月,30,例: A=ones(3,4),B=eye(3,4),C=magic(3) A = 1 1 1 1 1 1 1 1 1 1 1 1 B = 1 0 0 0 0 1 0 0 0 0 1 0 C = 8 1 6 3 5 7 4 9 2,2007年3月,31,5. 拼接函数和变形函数法,拼接函数: cat函数的使用格式是:cat(n,A1,A2,A3,),n=1时,表示沿行方向拼接;n=2,表示沿列方向拼接 repmat函数的使用格式是:repmat(A,m,n),m和n分别是沿行和列方向重复拼接矩阵A的次数,2007年3月,32,例: A1=1 2 3;9 8 7;4 5 6,A2=A1. A1 = 1 2 3 9 8 7 4 5 6 A2 = 1 9 4 2 8 5 3 7 6 cat(1,A1,A2,A1) %沿行向拼接 ans = 1 2 3 9 8 7 4 5 6 1 9 4 2 8 5 3 7 6 1 2 3 9 8 7 4 5 6,2007年3月,33,用变形函数生成矩阵,reshape函数的使用格式是:reshape(A,m,n),m和n分别是变形后新矩阵的行列数,2007年3月,34,例: A=linspace(2,18,9) A = 2 4 6 8 10 12 14 16 18 B=reshape(A,3,3) B = 2 8 14 4 10 16 6 12 18,2007年3月,35,6. 加载法,所谓加载法是指将已经存放在外存中的.mat文件读入MATLAB工作空间中。这一方法的前提是:必须在外存中事先已保存了该.mat文件且数据文件中的内容是所需的矩阵。,2007年3月,36,例: load sl2_19%从外存中加载事先保存在可搜索路径中的数据文件sl2_19.mat who%询问加载的矩阵名称,参见1.8节表1.8的命令 Your variables are: A A%显示加载的矩阵内容 A = 4 5 6 7 1 2 3 4 9 8 7 6,2007年3月,37,7. M文件法,M文件法和加载法其实十分相似,都是将事先保存在外存中的矩阵读入内存工作空间中,不同点在于加载法读入的是数据文件(.mat),而M文件法读入的是内容仅为矩阵的.m文件 。,2007年3月,38,四、矩阵的代数运算,1. 求矩阵行列式的值 求矩阵行列式的值由函数det(A)实现 。 例: A=3 2 4;1 -1 5;2 13,D1=det(A) A = 3 2 4 1 -1 5 2 -1 3 D1 = 24,2007年3月,39,2. 矩阵加减、数乘与乘法 矩阵的加减法、数乘和乘法可用表2.2介绍的运算符来实现。 表2-2,2007年3月,40,3. 求方阵的逆矩阵 求一个n阶方阵的逆矩阵远比线性代数中介绍的方法来得简单,只需调用函数inv(A)即可实现 。 例:求A矩阵的逆矩阵。 A=1 0 1;2 1 2;0 4 6 A = 1 0 1 2 1 2 0 4 6 format rat;A1=inv(A) A1 = -1/3 2/3 -1/6 -2 1 0 4/3 -2/3 1/6,2007年3月,41,4. 矩阵的除法 左除即AB=inv(A)*B 右除即A/B=A*inv(B) 例:求线性方程组的解 x1 + 4x2 - 7x3 + 6x4 = 0 2x2 + x3 + x4 =-8 x2 + x3 + 3x4 =-2 x1 + x3 - x4 = 1 方程可化为AXB ,其中A=1 4 7 6;0 2 1 1;0 1 1 3;1 0 1 1 , X=x1;x2;x3;x4 , B0;-8;-2;1 ,X=B/A=B*inv(A),2007年3月,42,5. 求矩阵的秩 由函数rank(A)完成 例: B=1 3 -9 3;0 1 -3 4;-2 -3 9 6,rb=rank(B) B = 1 3 -9 3 0 1 -3 4 -2 -3 9 6 rb = 2,2007年3月,43,6. 求方阵的特征值与特征向量,有两个函数可用: 一是X,eig(A) 另一是X,eigs(A) 例:求矩阵A的特征值和特征向量。 A=1 -3 3;3 -5 3;6 -6 4, X,Lamda=eig(A),2007年3月,44,7. 矩阵的乘幂与开方,矩阵的乘方有自己的运算符() 例: A=1 -3 3;3 -5 3;6 -6 4; A3 ans = 28 -36 36 36 -44 36 72 -72 64,2007年3月,45,8. 矩阵的指数与对数,矩阵指数运算的函数:expm( )、expm1( )、expm2( )和expm3( )等,其中最常用的是expm(A); 而对数运算函数则是logm(A) 例: A=1 -1 1;2 -4 1;1 -5 3 A = 1 -1 1 2 -4 1 1 -5 3 Ae=expm(A) Ae = 1.3719 -3.7025 4.4810 0.3987 -2.3495 2.9241 -2.5254 -7.6138 9.5555 Ael=logm(Ae),2007年3月,46,9. 矩阵转置,用函数transpose(Z)实现 。 不论是实矩阵还是复矩阵都只实现转置而不做共轭变换。,2007年3月,47,2.4 数组运算,一、多维数组元素的存储次序 以一个mnl的3维数组A为例,考虑到它是由多个mn的二维数组(表)叠放而成的,如果用符号i表示每个二维数组(表)的行下标,用符号j表示每个二维数组(表)的列下标,另外再用符号k 表示A的另一维(称为页的)下标,那么矩阵A中第i行、第j列、第k 页的元素就可表示为A(i,j,k )。,2007年3月,48,2007年3月,49,二、多维数组的创建,1. 下标赋值法 例:创建一个2页的三维数组 2. 工具阵函数法 例:用zeros、ones、rand和randn函数生成多维数组 3. 拼接和变形函数法 例:用cat和repmat函数创建3维数组,2007年3月,50,三、数组的代数运算,1. 数组的加减、数乘与乘法 数组加减运算的运算符与矩阵相同 2. 数组的除法 为了与矩阵运算相对应,数组的除法运算也分左、右除来定义(./ ,.),2007年3月,51,3. 数组的乘幂与开方 数组的幂运算符是. 开方运算需借助开方函数 :sqrt(A) 4. 数组的指数与对数 指数函数exp( ) 对数函数log( ),2007年3月,52,例: 求A数组的指数和对数。 A=1 2 3;4 5 6 A = 1 2 3 4 5 6 Ae=exp(A),Al=log(A) Ae = 2.7183 7.3891 20.0855 54.5982 148.4132 403.4288 Al = 0 0.6931 1.0986 1.3863 1.6094 1.7918,2007年3月,53,5. 数组或矩阵的单纯转置 运算符. 例:对复矩阵A做单纯转置运算。 a=1 2 3;4 5 6;b=2 3 4;5 6 7; A=a+i*b A = 1.0000 + 2.0000i 2.0000 + 3.0000i 3.0000 + 4.0000i 4.0000 + 5.0000i 5.0000 + 6.0000i 6.0000 + 7.0000i B=A. B = 1.0000 + 2.0000i 4.0000 + 5.0000i 2.0000 + 3.0000i 5.0000 + 6.0000i 3.0000 + 4.0000i 6.0000 + 7.0000i,2007年3月,54,四、数组的关系与逻辑运算,1. 数组的关系运算 例:求3阶魔方矩阵中所有能被3整除的元素,并在其位置上标1。 a=magic(3); p=mod(a,3)=0,2007年3月,55,2. 数组的逻辑运算 ( length(Sa) ans = 49 size(Sa) ans = 1 49,2007年3月,65,2. 字符串与一维数值数组的相互转换 例: S1=I am nobody; As1=abs(S1) As1 = 73 32 97 109 32 110 111 98 111 100 121 As2=double(S1) As2 = 73 32 97 109 32 110 111 98 111 100 121 char(As2) ans = I am nobody,2007年3月,66,3. 比较字符串 strcmp(S1,S2) 当S1与S2完全相同时,返回值为1,否则返回值为0。 例: strcmp( )的用法。 S1=I am nobody; S2=I am nobody.; strcmp(S1,S2) ans = 0 strcmp(S1,S1) ans = 1,2007年3月,67,4. 查找字符串 findstr(S,s)是从某个长字符串S中查找子字符串s的函数 5. 显示字符串 是一个原样输出其中内容的函数,它经常在程序中做提示说明用,2007年3月,68,三、二维字符数组,二维字符数组其实就是由字符串纵向排列构成的数组 。 例: S1=路修远以多艰兮,; S2=腾众车使径侍。; S3=路不周以左转兮,; S4=指西海以为期 !; S=S1;S2, ;S3;S4, %此法要求每行字符数相同,不够时要补齐空格 S = 路修远以多艰兮, 腾众车使径侍。 路不周以左转兮, 指西海以为期!,
展开阅读全文