《基本运算》PPT课件.ppt
第二讲 MATLAB的基本运算,matlab 具有出色的数值计算能力,占据世界上数值计算软件的主导地位,数据类型,MATLAB 7.3定义了15种基本的数据类型,包括整型、浮点型、字符型和逻辑型等,用户甚至可以定义自己的数据类型。,矩阵和数组,MATLAB提供了不同类型的数据MATLAB专门以矩阵作为基本的运算单位MATLAB提供了关于数组和矩阵不同的运算方法MATLAB提供了一种计算机高级编程语言M语言,在M语言中最常用的数据类型表现手段和形式就是变量和常量M语言的基本处理单位是数值矩阵或者数值向量有关概念变量和常量数组向量矩阵,常数和变量,1.常数2.变量MATLAB的变量命名规则如下:变量名区分字母的大小写。例如,“a”和“A”是不同的变量。变量名不能超过63个字符,第63个字符后的字符被忽略。变量名必须以字母开头,变量名的组成可以是任意字母、数字或者下划线,但不能含有空格和标点符号(如,。%等)。关键字(如if、while等)不能作为变量名。,变量和常量变量:程序运行过程中需要改变数值的量每一个变量都具有一个名字变量在内存中占据一定的空间变量必须以字母开头,后面可以是字母、数字或者下划线的组合MATLAB仅识别前面N个字符,在不同的操作系统下可以识别的字符个数不同常量:在程序运行的过程中不需要改变数值的量常量具有名字在M语言中不存在常量的定义,只在MATLAB中提供一些常用的常数作为常量,MATLAB的常量,数组是有序数据的集合数组的每一个成员(元素)都属于同一种数据类型,它们使用同一个数组名称和不同的下标来唯一确定数组中的成员(元素)。在MATLAB中元胞数组比较特殊,数组中的元素可以是不同的数据类型。,向量从编程语言的角度上看,向量其实就是一维数组从数学的角度上看,向量就是1N或者N1的矩阵,即行向量或列向量 b1,1 b2,1 B=b3,1 和B=b1,1 b1,2 b1,3 b1,n bn,1,矩阵是用一对圆括号或方括号括起来,符合一定规则的数学对象 b11 b12 b13 B=b21 b22 b23 b31 b32 b33对于编程语言,矩阵就是二维的数组,创建向量,1.在命令窗口逐个输入元素 例1:X=1 3 pi 3+5i 2.利用冒号运算符创建向量X=J:INC:KJ为向量的第一个元素,K为向量的最后一个元素,INC为向量元素递增的步长J、INC、K之间必须用“:”间隔若忽略INC,则默认的递增步长为1INC可以为正数,也可以为负数 例2:X=1:10 例3:X=1:0.01:1.1,创建向量(续),3.定数线性采样法:在设定的“总点数”下,均匀采 样生成向量(一维“行”数组)使用函数linspace 和logspacelinspace是用来创建线性间隔向量的函数linspace 的基本语法 X=linespace(X1,X2,n)X1为向量的第一个元素,X2为向量的最后一个元素,n为向量具有的元素个数,函数将根据n的数值平均计算元素之间的间隔,间隔计算公式为若在表达式中忽略参数n,则系统默认地将向量设置为100个元素,创建向量(续),例4 使用linspace函数创建向量X=linspace(1,2,5)X=1.0000 1.2500 1.5000 1.7500 2.0000,创建向量(续),logspace是用来创建对数空间的向量logspace 的基本语法 X=logspace(X1,X2,n)该函数创建的向量第一个元素值为10X1,而最后一个元素的数值为10X2,n为向量的元素个数,元素彼此之间的间隔按照对数空间的间隔设置若在表达式中忽略参数n,则系统默认地将向量设置为50个元素,创建向量(续),例5 使用logspace函数创建向量X=logspace(1,3,3)X=10 100 1000,创建向量(续),创建列向量使用分号作为元素与元素之间的间隔使用转置运算符“”例6:A=1;2;3;4;5;6或A=(1:6),创建矩阵,矩阵的元素可以为任意MATLAB数据类型的数值或对象创建矩阵的方法直接输入法使用数组编辑器,直接输入法,规则:整个矩阵的元素必须用 括住同一行的矩阵元素之间必须用逗号或空格分隔在 内矩阵的行与行之间必须用分号分隔,也可以在需要分行的地方用回车键间隔矩阵元素可以是任何MATLAB表达式,可以是实数,也可以是复数,复数用i,j 输入 例2-7:A=1,2,3;4,5,6;7,8,9 X=2 pi/2;sqrt(3)3+5i,逗号和分号的作用逗号和分号可作为指令间的分隔符,MATLAB允许多条语句在同一行出现。分号如果出现在指令后,屏幕上将不显示结果。只要是赋过值的变量,不管是否在屏幕上显示过,都会存储在工作空间中,以后可随时显示或调用。变量名尽可能不要重复,否则会覆盖。,直接输入法(续),例8:A=1,2,3;4,5,6;7,8,9,X=2 pi/2;sqrt(3)3+5iA=1 2 3 4 5 6 7 8 9X=2.0000 1.5708 1.7321 3.0000+5.0000i A=1,2,3;4,5,6;7,8,9;X=2 pi/2;sqrt(3)3+5iX=2.0000 1.5708 1.7321 3.0000+5.0000i,直接输入法(续),冒号的作用 用于生成等间隔的向量,默认间隔为1。例9:y=1:3;4:6;7:9,直接输入法(续),数组编辑器,调用数组编辑器的方法选择工作空间浏览器中的变量,然后单击工作栏中的按钮在工作空间浏览器中直接双击变量选择工作空间浏览器中的变量,然后单击快捷菜单命令Open在MATLAB命令行窗口中键入指令“openvar 变量名”数组编辑器仅能编辑、修改向量或矩阵,对于多维数组,数组编辑器只能察看数组的内容,不能修改多维数组的元素,数组编辑器(续),利用数组编辑器完成矩阵的编辑步骤在命令行窗口中创建一个新的变量,为其赋任意数值 如:A=1打开数组编辑器,在数组编辑器中加载相应的变量在数组编辑器的工具栏中,修改矩阵的行数和列数,双击任意元素修改矩阵的元素值,矩阵的修改,直接修改在命令行窗口中,可用键找到所要修改的矩阵,用键移动到要修改的矩阵元素上即可修改。在数组编辑器中,可用、键找到所要修改的矩阵元素进行修改。指令修改:用A(,)=来修改。例10:A=1 2 0;3 0 5;7 8 9 A=1 2 0 3 0 5 7 8 9A(3,3)=0 A=1 2 0 3 0 5 7 8 0,矩阵元素的访问,访问矩阵的元素需要使用矩阵元素的索引使用矩阵元素的行列全下标形式A(*,*)使用全下标形式访问矩阵元素的方法简单、直接,同线性代数的矩阵元素的概念一一 对应使用矩阵元素的单下标形式A(*)矩阵元素的单下标是矩阵元素在内存中存储 的序列号,一般地,同一个矩阵的元素在连 续的内存单元中(元素的排列以列元素优先),矩阵元素的访问(续),A(1:4,5)A(:,5)A(:,end)A(17:20),A(2:4,2:3)A(2 3 4,2 3),A(1,2)A(5),例13 A=,矩阵元素的访问(续),使用索引访问矩阵元素的方法,在索引矩阵或数组的元素时,若直接用冒号运算符且不给任何的参数,则表示选择该行或列,或维中的所有元素,矩阵元素的访问(续),例:用不同的方法访问矩阵的元素A=1:25A=reshape(A,5,5)A=1 6 11 16 21 2 7 12 17 22 3 8 13 18 23 4 9 14 19 24 5 10 15 20 25A(3,1)或A(3)ans=3 A(3,:)ans=3 8 13 18 23,A(end,:)ans=5 10 15 20 25I=1 3 5;J=2 4;A(I,J)A(1 3 5,2 4)ans=6 16 8 18 10 20,A(:,4)ans=16 17 18 19 20,矩阵的基本运算函数基本数学运算规则数组的运算运算函数运算指令,矩阵生成函数,例14 矩阵生成函数示例 A=zeros(3)A=0 0 0 0 0 0 0 0 0 A=ones(3)A=1 1 1 1 1 1 1 1 1,矩阵生成函数(续),A=eye(3)A=1 0 0 0 1 0 0 0 1 A=rand(3)A=0.9501 0.4860 0.4565 0.2311 0.8913 0.0185 0.6068 0.7621 0.8214,A=randn(3)A=-0.4326 0.2877 1.1892-1.6656-1.1465-0.0376 0.1253 1.1909 0.3273,例14 矩阵生成函数示例 A=magic(3)A=8 1 6 3 5 7(15)4 9 2 A=magic(4)A=16 2 3 13 5 11 10 8(34)9 7 6 12 4 14 15 1,矩阵生成函数(续),基本矩阵运算,1.矩阵加、减运算(AB、AB)规则:相加、减的两矩阵必须有相同的行和列,两矩阵对应元素相加减。MATLAB允许参与运算的两矩阵之一是标量,标量与矩阵的所有元素分别进行加减操作。例:A=1 2 3;4 5 6 B=3 4 5;7 8 9 C=3 A+B=4 6 8;11 13 15 A+C=4 5 6;7 8 9 B+C=6 7 8;10 11 12,基本矩阵运算(续),2.矩阵乘运算 A*B:A矩阵的列数必须等于B矩阵的行数。s*A 或 A*s:标量可与任何矩阵相乘,标量s分别与矩阵A每个元素相乘。例:A=1 2 3;4 5 6;7 8 0;B=1;2;3;C=A*B C=14 32 23 D=-1;0;2;F=pi*D F=-3.1416 0 6.2832,基本矩阵运算(续),3.矩阵除运算及线性方程组的解 在线性代数中没有矩阵的除运算,只有矩阵逆的运算,在MATLAB中有两种矩阵除运算。A/B 矩阵右除,相当于 Ainv(B)AB 矩阵左除,相当于 inv(A)B 因此,x=AB 是线性方程组Ax=B的解。例:求解方程组 3x1+x2-x3=3.6 x1+2x2+4x3=2.1-x1+4x2+5x3=-1.4 A=3 1-1;1 2 4;-1 4 5;B=3.6;2.1;-1.4;x=AB x=1.4818-0.4606 0.3848,基本矩阵运算(续),4.矩阵乘方 An A自乘n次幂 例a=1,2,3;4,5,6;7,8,9;a2 ans=30 36 42 66 81 96 102 126 150,基本矩阵运算(续),数组运算指元素对元素的算术运算,与通常意义上的由符号表示的线性代数矩阵运算不同。1.数组加减(+,-)运算规则:相加、减的两数组必须有相同的行和列,两数组对应元素相加减。MATLAB允许参与运算的两数组之一是标量,标量与数组的所有元素分别进行加减操作 A+B A-B,基本数组(元素群)运算,与矩阵加减运算等效,数组之一也可为标量。,2.数组乘()运算AB A,B两数组必须有相同的行和列,两数组相应元素相乘。sA 或 As 标量与数组相乘,标量s分别与数组A每个元素相乘,与 sA 或 As 相同。例16:A=1 2 3;4 5 6;7 8 9;B=2 4 6;1 3 5;7 9 10;A.*B ans=2 8 18 4 15 30 49 72 90,基本数组(元素群)运算(续),A=1 2 3;4 5 6;7 8 9;B=2 4 6;1 3 5;7 9 10;A*Bans=25 37 46 55 85 109 85 133 172,3.数组除(/,)运算C=A./B 数组右除 C(i,j)=A(i,j)/B(i,j)C=A.B 数组左除 C(i,j)=B(i,j)/A(i,j)A./B=B.AA./s=s.A A的元素分别被标量s除s./A=A.s 标量s分别被A的元素除例:A=1 2 3;B=4 5 6;C1=A./B C1=0.2500 0.4000 0.5000 C2=B.A C2=0.2500 0.4000 0.5000 C3=A.B C3=4.0000 2.5000 2.0000,基本数组(元素群)运算(续),A=1 2 3;B=4 5 6;A/Bans=0.4156 ABans=0 0 0 0 0 0 1.3333 1.6667 2.0000,4.数组乘方(.)A.n A的每个元素自乘n次A.p 对A各元素分别求非整数幂p.A 以p为底,分别以A的元素为指数求幂值C=A.B 元素对元素的幂C(i,j)=A(i,j).B(i,j)例:A=1 2 3;B=4 5 6;X=A.2 X=1.00 4.00 9.00 Y=A.0.5 Y=1.0000 1.4142 1.7321,基本数组(元素群)运算(续),C=3.B Y=81.00 243.00 729.00 34 35 36Z=A.B Z=1.00 32.00 729.00 14 25 36,5.数组转置(.)例:A=1 3 5;2 4 6 A=1 3 5 2 4 6 A ans=1 2 3 4 5 6 A.ans=1 2 3 4 5 6,基本数组(元素群)运算(续),结论:对于实数矩阵,矩阵转置和数组转置的计算结果是一致的。,例:A=A*i A=0+1.0000i 0+3.0000i 0+5.0000i 0+2.0000i 0+4.0000i 0+6.0000i A ans=0-1.0000i 0-2.0000i 0-3.0000i 0-4.0000i 0-5.0000i 0-6.0000i A.ans=0+1.0000i 0+2.0000i 0+3.0000i 0+4.0000i 0+5.0000i 0+6.0000i,基本数组(元素群)运算(续),结论:对于复数矩阵,矩阵转置和数组转置的计算结果不一致。矩阵转置运算共轭转置 数组转置运算非共轭转置,函数的主要类别三角函数指数运算函数复数运算函数圆整和求余函数函数在处理参数时,是按照数组运算的规则进行的,基本数学函数,三角函数,基本数学函数(续),指数运算函数,基本数学函数(续),复数运算函数,基本数学函数(续),圆整和求余函数,基本数学函数(续),用于矩阵(数组)操作的常用函数,矩阵(数组)操作函数,例18:reshape函数使用示例 A=1:8A=1 2 3 4 5 6 7 8 B=reshape(A,2,4)B=1 3 5 7 2 4 6 8 C=reshape(A,3,3)?Error using=reshapeTo RESHAPE the number of elements must not change.,矩阵(数组)操作函数(续),不能改变矩阵包含元素的个数,将矩阵A改成2行4列,也可写成 B=reshape(1:8,2,4),例19:对称交换函数使用示例B=1 3 5 7 2 4 6 8 fliplr(B)ans=7 5 3 1 8 6 4 2 flipud(B)ans=2 4 6 8 1 3 5 7,矩阵(数组)操作函数(续),flipdim函数的第二个参数必须是大于0的整数:参数为1时,效果和flipud函数一致参数为2时,效果和fliplr函数一致,flipdim(B,1)ans=2 4 6 8 1 3 5 7 flipdim(B,2)ans=7 5 3 1 8 6 4 2,例20:repmat使用示例 A=pascal(2)A=1 1 1 2 repmat(A,2,3)ans=1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2,矩阵(数组)操作函数(续),repmat函数的基本语法为:repmat(A,M,N)作用是将指定的矩阵A复制MN次,其中M对应的是行,N对应的是列。,创建复杂矩阵使用MATLAB提供的矩阵扩展方法完成相应矩阵的构造假设矩阵A为三阶方阵,B为二阶方阵,由A和B组合构成五阶方阵C=A O;O B,其中O为相应的零矩阵,矩阵(数组)操作函数(续),例2-21:A=reshape(1:9,3,3);B=1 2;3 4;O=zeros(length(A),length(B)O=0 0 0 0 0 0 C=A O;O BC=1 4 7 0 0 2 5 8 0 0 3 6 9 0 0 0 0 0 1 2 0 0 0 3 4,矩阵(数组)操作函数(续),E=1 2 3;4 5 6E=1 2 3 4 5 6 length(E)ans=3 F=1 2 3;4 5 6;7 8 9;4 2 7F=1 2 3 4 5 6 7 8 9 4 2 7 length(F)ans=4,提问:A=reshape(1:9,3,3);B=1 2;3 4;C=1 2 0 0 0 3 4 0 0 0 0 0 1 4 7 0 0 2 5 8 0 0 3 6 9 O=zeros(length(B),length(A)O=0 0 0 0 0 0 C=B O;O A,矩阵(数组)操作函数(续),O=zeros(length(A),length(B)O=0 0 0 0 0 0 C=B O;O A,创建复杂矩阵利用不同的矩阵运算,通过矩阵合并运算符“”将不同的矩阵组合在一起构成大矩阵 A=1 2;3 4;B=A,A*2;tril(A),triu(A);A*3,A*4B=1 2 2 4 3 4 6 8 1 0 1 2 3 4 0 4 3 6 4 8 9 12 12 16,矩阵(数组)操作函数(续),稀疏矩阵,矩阵的存储方式:1.全元素(Full)存储 完全矩阵2.稀疏(Sparse)存储稀疏矩阵稀疏矩阵存在的必要性:对大多数元素数值为0的矩阵,若采用满阵方式表示,则0元素将占用相当的存储空间。稀疏矩阵的特点:只存储“非零元素”值(按列)和“非零元素”的位置,对大多数元素数值为0的矩阵,创建稀疏矩阵稀疏矩阵建立指令 sparse1、B=sparse(A)例23.A=2 0 0 0;0 0 0 1;0 4 0 0 A=2 0 0 0 0 0 0 1 0 4 0 0 B=sparse(A)B=(1,1)2(3,2)4(2,4)1,一、稀疏矩阵的建立,C=1 2 3 4;5 6 7 8;3 7 2 9;C=1 2 3 4 5 6 7 8 3 7 2 9 B+Cans=3 2 3 4 5 6 7 9 3 11 2 9,2、S=sparse(ir,jc,data,m,n)“三元组”表示法 ir 非零元素所在的行序号 jc 非零元素所在的列序号 data 非零元素的数值 m 矩阵的行 n 矩阵的列,稀疏矩阵的建立(续),向量,标量,例24.15 0 0 22 0-15 0 11 3 0 0 0 S=0 0 0-6 0 0 0 0 0 0 0 0 91 0 0 0 0 0 0 0 28 0 0 0 data=15 91 11 3 28 22-6-15;ir=1 5 2 2 6 1 3 1;jc=1 1 2 3 3 4 4 6;S=sparse(ir,jc,data,6,6)S=(1,1)15(5,1)91(2,2)11(2,3)3(6,3)28(1,4)22(3,4)-6(1,6)-15,稀疏矩阵的建立(续),full(S)ans=15 0 0 22 0-15 0 11 3 0 0 0 0 0 0-6 0 0 0 0 0 0 0 0 91 0 0 0 0 0 0 0 28 0 0 0,例25 S=sparse(1 3 2,1 2 4,2 4 1,3,4)S=(1,1)2(3,2)4(2,4)1 full(S)ans=2 0 0 0 0 0 0 1 0 4 0 0,稀疏矩阵的建立(续),在MATLAB命令行窗口中键入指令help sparfun,可以得到稀疏矩阵运算函数列表,稀疏矩阵的建立(续),稀疏矩阵的常用函数,1、speye(创建单位稀疏矩阵)speye(m,n)在行、列相同位置上的元素值为“1”,其余位置上的元素值为“0”speye(m)是speye(m,m)的简写。在对角线上的元素值为“1”,其余位置上的元素值为“0”例26:A=speye(3,4)A=(1,1)1(2,2)1(3,3)1 full(A)ans=1 0 0 0 0 1 0 0 0 0 1 0,稀疏矩阵的建立(续),B=speye(3,3)B=(1,1)1(2,2)1(3,3)1 full(B)ans=1 0 0 0 1 0 0 0 1,C=speye(3)C=(1,1)1(2,2)1(3,3)1 full(C)ans=1 0 0 0 1 0 0 0 1,2、find(获取矩阵非零元素的索引向量)find(A)例27:S=sparse(1 3 2,1 2 4,2 4 1,3,4)S=(1,1)2(3,2)4(2,4)1 find(S)ans=1 6 11,稀疏矩阵的建立(续),full(S)ans=2 0 0 0 0 0 0 1 0 4 0 0,3、nonzeros(获取矩阵的非零元素向量)nonzeros(A)例27:S=sparse(1 3 2,1 2 4,2 4 1,3,4)S=(1,1)2(3,2)4(2,4)1 nonzeros(S)ans=2 4 1,稀疏矩阵的建立(续),full(S)ans=2 0 0 0 0 0 0 1 0 4 0 0,4、nnz(获取矩阵的非零元素的个数)nnz(A)例28:S=sparse(1 3 2,1 2 4,2 4 1,3,4)S=(1,1)2(3,2)4(2,4)1 nnz(S)ans=3,稀疏矩阵的建立(续),full(S)ans=2 0 0 0 0 0 0 1 0 4 0 0,5、nzmax(获取矩阵的各个向量的最大长度)nzmax(A)例29:S=sparse(1 3 2,1 2 4,2 4 1,3,4)S=(1,1)2(3,2)4(2,4)1 nzmax(S)ans=3,稀疏矩阵的建立(续),full(S)ans=2 0 0 0 0 0 0 1 0 4 0 0,6、spones(将稀疏矩阵中的非零元素用数字1代替)spones(A)例30:S=sparse(1 3 2,1 2 4,2 4 1,3,4)S=(1,1)2(3,2)4(2,4)1 A=spones(S)A=(1,1)1(3,2)1(2,4)1 full(A)ans=1 0 0 0 0 0 0 1 0 1 0 0,稀疏矩阵的建立(续),full(S)ans=2 0 0 0 0 0 0 1 0 4 0 0,7、issparse(判断输入参数是否为稀疏矩阵)issparse(A):是,则ans为“1”否,则ans为“0”例31:S=sparse(1 3 2,1 2 4,2 4 1,3,4)S=(1,1)2(3,2)4(2,4)1 issparse(S)ans=1 A=1 2 3;4 5 6;issparse(A)ans=0,稀疏矩阵的建立(续),稀疏矩阵和普通矩阵(满阵)之间可以直接进行运算,运算结果是满阵例32:A=2 0 0 0;0 0 0 1;0 4 0 0;S=sparse(A)S=(1,1)2(3,2)4(2,4)1 A+S ans=4 0 0 0 0 0 0 2 0 8 0 0,二、稀疏矩阵的运算,稀疏矩阵和稀疏矩阵之间进行运算,运算结果是稀疏矩阵例33 B=0 0 3 0;1 0 0 0;0 5 0 0;T=sparse(B)T=(2,1)1(3,2)5(1,3)3 S+T ans=(1,1)2(2,1)1(3,2)9(1,3)3(2,4)1,稀疏矩阵的运算(续),full(S+T)ans=2 0 3 0 1 0 0 1 0 9 0 0 A+Bans=2 0 3 0 1 0 0 1 0 9 0 0,字符串创建字符串,字符串由多个字符组成,是1n的字符数组;每一个字符都是字符数组的一个元素,以ASCII码的形式存放并区分大小,而显示的形式则是可读的字符。创建字符串 s1=matlab 7.3s1=matlab 7.3,(1)直接赋值用单引号()括起字符来直接赋值创建字符串。使用两个单引号()输入字符串中的单引号 s3=显示matlabs3=显示matlab(2)多个字符串组合 str2=s1;s2,;s3str2=matlab 7.3字符串 显示matlab 2.字符数组的存储空间MATLAB在存储字符串时,每一个字符以ASCII码的形式存放,占用两个字节。,字符串函数,1.字符串合并strcat函数用于将字符串水平连接合并成一个新字符串,合并的同时会将字符串尾的空格删除。语法格式如下:strcat(s1,s2,)%将s1,s2合并成一个长字符串char(s1,s2,)%将s1,s2合并成一个字符数组strvcat(s1,s2,)%将s1,s2合并成一个字符数组,2.字符串与数值的转换abs将字符串转换为ASCII码数值str2num将字符串转换为数值str2double将元胞字符串数组转换为数值3.字符串的其他操作MATLAB 7.3还可以对字符串进行比较、查找、运行等操作。,例2-19 使用字符串函数进行运算。str=a+b,c+d,str=a+b,c+d,str1=strrep(str1,*2)%将,用*2替换str1=a+b*2 a=5 b=2 eval(str1)%执行字符串str1ans=9 str2=upper(str2)%将字符串转换为大写字母str2=C+D,日期和时间 日期时间的表示格式,MATLAB 7.3以三种格式表示:日期字符串、连续的日期数值和日期向量,不同的日期格式可以相互转换。1.日期格式(1)日期字符串日期字符串是最常用的,有多种输出格式。例,“2007年1月1日”可以表示为:01-Jan-2007 08:50:10、01-Jan-2007、01/01/2007、等。(2)连续的日期数值733043(3)日期向量 year month day hour minute second,日期时间函数,1.获取系统时间date:按照日期字符串格式获取当前系统时间;now:按照连续的日期数值格式获取当前系统时间;clock:按照日期向量格式获取当前系统时间。2.提取日期时间信息分别使用year、month、day、hour、minute、second函数。3.日期时间的显示格式日期时间的显示可以使用datestr函数显示为字符串的样式。datestr函数的格式如下:datestr(d,f)%将日期按指定格式显示,4.计时函数(1)cputime方法cputime是返回MATLAB启动以来的CPU时间:程序执行的时间程序代码执行结束后的cputime在程序代码执行前的cputime(2)tic/toc方法tic在程序代码开始用于启动的一个计时器;toc放在程序代码的最后,用于终止计时器的运行,并返回计时时间就是程序运行时间。(3)etime方法etime方法使用etime函数来获得程序运行时间,etime函数的命令格式如下:etime(t1,t0)%返回t1-t0的值,结构体和元胞数组元胞数组,元胞数组是常规数值数组的扩展,其基本元素是元胞,每一个元胞可以看成是一个单元(Cell),用来存放各种不同类型不同尺寸的数据,如矩阵、多维数组、字符串、元胞数组和结构体。元胞数组可以是一维、二维或多维,使用花括号()表示,每一个元胞以下标区分,下标的编码方式也与矩阵相同,分为单下标方式和全下标方式。,1.创建元胞数组(1)直接创建 A=cell1,1 2;3 4;1 2,matlab,0:1:5 A(1,1)=cell1;A(1,2)=1 2;3 4;A(2,1)=1 2,matlab;A(2,2)=0:1:5 A1,1=cell1;A1,2=1 2;3 4;A2,1=1 2,matlab;A2,2=0:1:5,例2-22 使用cell函数创建元胞数组。A=cell(2,2)%创建空的元胞数组 A1,1=cell1(2)使用cell函数创建cell函数创建元胞数组的语法格式:A=cell(m,n)%创建mn元胞数组,关系运算和逻辑运算 逻辑运算,MATLAB 7.3中逻辑型(logical)数据只有“1”和“0”,分别表示true和false两种状态,逻辑型变量只占1个字节。函数logical可以用来将数值型转换为逻辑型,任何非零的数值都转换为逻辑1,数值0转换为逻辑0。,关系运算,MATLAB 7.3常用的关系操作符有、=、=(等于)、=(不等于)。关系运算规则:如果比较的两个变量都是标量,则结果为1(true)或0(false);如果比较的两个变量都是数组,则必须尺寸大小相同,结果也是同样大小的数组;如果比较的是一个数组和一个标量,则把数组的每个元素分别与标量比较,结果为与数组大小相同的数组。,逻辑运算,1.元素的逻辑运算元素的逻辑运算是将数组中的元素一一进行逻辑运算,常用的逻辑运算符:&(与)、|(或)、(非)和xor(异或)。在逻辑运算中,非0元素表示true,0元素表示false。2.先决逻辑运算先决逻辑运算符有:&(先决与)和|(先决或)。3.位逻辑运算位逻辑运算函数有:bitand(位与)、bitor(位或)、bitcmp(位非)和bitxor(位异或)。,练习,运算符优先级,各类运算符的优先级为:括号算术运算符关系运算符逻辑运算符各符号优先顺序为:括号()转置.幂.一元加减+-逻辑非 乘*.*除/./.加减+-冒号:关系运算=元素逻辑运算与&元素逻辑运算或|先决逻辑运算与&先决逻辑运算或|,matlab语言把多项式表达成一个行向量,该向量中的元素是按多项式降幂排列的。f(x)=anxn+an-1xn-1+a0 可用行向量 p=an an-1 a1 a0表示poly 产生特征多项式系数向量特征多项式一定是n+1维的特征多项式第一个元素一定是1,多项式运算,例:a=1 2 3;4 5 6;7 8 0;p=poly(a)p=1.00-6.00-72.00-27.00 p是多项式p(x)=x3-6x2-72x-27的matlab描述方法,我们可用:p1=poly2str(p,x)函数文件,显示数学多项式的形式p1=x3-6 x2-72 x-27,2.roots 求多项式的根,a=1 2 3;4 5 6;7 8 0;p=poly(a)p=1.00-6.00-72.00-27.00r=roots(p)r=12.12-5.73 显然 r是矩阵a的特征值-0.39,当然我们可用poly令其返回多项式形式p2=poly(r)p2=1.00-6.00-72.00-27.00matlab规定多项式系数向量用行向量表示,一组根用列向量表示。,3.conv,convs多项式乘运算,例:a(x)=x2+2x+3;b(x)=4x2+5x+6;c=(x2+2x+3)(4x2+5x+6)a=1 2 3;b=4 5 6;c=conv(a,b)=conv(1 2 3,4 5 6)c=4.00 13.00 28.00 27.00 18.00p=poly2str(c,x)p=4 x4+13 x3+28 x2+27 x+18,4.deconv多项式除运算,a=1 2 3;c=4.00 13.00 28.00 27.00 18.00d=deconv(c,a)d=4.00 5.00 6.00,5.多项式微分,matlab提供了polyder函数多项式的微分。命令格式:polyder(p):求p的微分polyder(a,b):求多项式a,b乘积的微分p,q=polyder(a,b):求多项式a,b商的微分例:a=1 2 3 4 5;poly2str(a,x)ans=x4+2 x3+3 x2+4 x+5b=polyder(a)b=4 6 6 4poly2str(b,x)ans=4 x3+6 x2+6 x+4,代数方程组求解,matlab中有两种除运算左除和右除。对于方程ax+b,a 为anm矩阵,有三种情况:当n=m时,此方程成为“恰定”方程 当nm时,此方程成为“超定”方程 当nm时,此方程成为“欠定”方程 matlab定义的除运算可以很方便地解上述三种方程,1.恰定方程组的解,方程ax+b(a为非奇异)x=a-1 b 矩阵逆两种解:x=inv(a)b 采用求逆运算解方程 x=ab 采用左除运算解方程,方程ax=ba=1 2;2 3;b=8;13;x=inv(a)*b x=ab x=x=2.00 2.00 3.00 3.00,=,a x=b,例:x1+2x2=8 2x1+3x2=13,2.超定方程组的解,方程 ax=b,mn时此时不存在唯一解。方程解(a a)x=a b x=(a a)-1 a b 求逆法 x=ab matlab用最小二乘法找一 个准确地基本解。,例:x1+2x2=1 2x1+3x2=2 3x1+4x2=3a=1 2;2 3;3 4;b=1;2;3;解1 x=ab 解2 x=inv(aa)a b x=x=1.00 1.00 0 0.00,=,a x=b,3.欠定方程组的解,当方程数少于未知量个数时,即不定情况,有无穷多个解存在。matlab可求出两个解:用除法求的解x是具有最多零元素的解是具有最小长度或范数的解,这个解是基于伪逆pinv求得的。,x1+2x2+3x3=1 2x1+3x2+4x3=2a=1 2 3;2 3 4;b=1;2;x=ab x=pinv(a)b x=x=1.00 0.83 0 0.33 0-0.17,a x=b,编程基础,MATLAB的工作模式指令驱动模式通常MATLAB以指令驱动模式工作,即在MATLABM命令行窗口下用户输入单行指令时,MATLAB立即处理这条指令,并显示结果,这就是MATLAB命令行方式。命令行方式程序可读性差,而且不能存储,当处理复杂问题和大量数据时很不方便。M文件模式将MATLAB语句构成的程序存储成以m为扩展名的文件,然后再执行该程序文件,这种工作模式称为程序文件模式。程序文件不能在指令窗口下建立,因为指令窗口只允许一次执行一行上的一个或几个语句。,MATLAB通过M语言来实现完整的编写应用程序的能力 M语言 M语言是一种解释性语言,利用该语言编写的代码 仅能被MATLAB接受,被MATLAB解释、执行。M语言文件可以分为脚本文件和函数文件 一个M语言文件就是由若干MATLAB的命令组合在一 起构成的。M语言文件是标准的纯文本格式的文件,其文件扩 展名为.m。使用M文件可以将一组MATLAB命令组合起来,通过 一个简单的指令就可以执行这些命令。,MATLAB提供了meditor编辑器编辑M文件 在MATLAB命令行窗口中键入指令edit,则可启动 meditor编辑器 edit,通过“File”菜单中的“New”子菜单下的“M-file”命令来启 动meditor编辑器,直接单击MATLAB用户界面工具栏上的新建按钮 来启动meditor编辑器,M文件有两类独立的M文件 脚本(Scripts)可调用M文件 函数(Functions),M脚本文件,包含MATLAB语言代码的文件称为 M文件,其扩展名为.m。脚本文件就是由一系列的MATLAB指令和命令组成的纯文本格式的M文件。脚本文件没有输入参数,也没有输出参数。执行脚本文件时,文件中的指令或者命令按照出现在脚本文件中的顺序依次执行。,M脚本文件(续),脚本文件示例%注释行%M文件示例%“flower petal”%以下为代码行%计算theta=-pi:0.01:pi;rho(1,:)=2*sin(5*theta).2;rho(2,:)=cos(10*theta).3;rho(3,:)=sin(theta).2;rho(4,:)=5*cos(3.5*theta).3;for k=1:4%图形输出 subplot(2,2,k)polar(theta,rho(k,:)enddisp(程序运行结束!),在脚本文件中,主要由注释行 和代码行组成 M文件的注释行需要使用%定义符注释定义符仅能影响一行代码 M文件的代码行是一些简 单的MATLAB指令或命令 命令可以完成相应的计算处理数据、绘制图形结果的操作 可以在脚本文件中调用其他的函数完成复杂的数学运算,M脚本文件(续),在M