MATLAB程序设计电子教案第2章(2).ppt_第1页
MATLAB程序设计电子教案第2章(2).ppt_第2页
MATLAB程序设计电子教案第2章(2).ppt_第3页
MATLAB程序设计电子教案第2章(2).ppt_第4页
MATLAB程序设计电子教案第2章(2).ppt_第5页
已阅读5页,还剩69页未读 继续免费阅读

下载本文档

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

文档简介

第2章 MATLAB 运算基础(2),MALAB 7.X程序设计,2/74,2.4 稀疏数组,2.4.1 数组元素的存储 数组元素有完全存储方式和稀疏存储方式两种存储方式。,MALAB 7.X程序设计,3/74,2.4.2稀疏数组的建立,1 转换函数,转换函数sparse的格式为: A=sparse(S) 功能:将矩阵S转化为稀疏存储方式的矩阵A。当矩阵S是稀疏存储方式时,则函数调用相当于A=S。,MALAB 7.X程序设计,4/74,sparse(m,n) 功能:生成一个mn的所有元素都是0的稀疏矩阵。,sparse(u,v,S) 功能:建立一个max(u)行、max(v)列并以S为稀疏元素的稀疏矩阵,其中u,v,S是3个等长的向量,S是要建立的稀疏矩阵的非0元素,u(i)、v(i)分别是S(i)的行和列下标。,MALAB 7.X程序设计,5/74,转换函数full的格式为: full(A) 功能:返回和稀疏存储矩阵A对应的完全存储方式矩阵。,MALAB 7.X程序设计,6/74,例2-28 演示sparse和full的功能。,u=1:4;v=3:6; S=0.1 0.2 0.3 0.4; spa=sparse(u,v,S) a=full(spa),MALAB 7.X程序设计,7/74,2 生成函数,稀疏矩阵的生成函数: spconvert,spdiags,speye spconvert函数的格式为: B=spconvert(A) 功能:将矩阵A所描述的一个稀疏矩阵转化为一个稀疏存储矩阵B 。,MALAB 7.X程序设计,8/74,例2-29 演示spconvert的功能。,A=1 2 3 ;3 4 5;6 7 8; B=spconvert(A) %生成实数数组 A=1 2 3 4;3 4 5 6 ;6 7 8 9; B=spconvert(A) %生成复数数组,MALAB 7.X程序设计,9/74,spdiags的格式为: A=spdiags(B,d,m,n) 功能:返回带状稀疏矩阵A。 参数m,n为原带状矩阵的行数与列数。B为rp阶矩阵,这里r=min(m,n),p为原带状矩阵所有非零对角线的条数,矩阵B的第i列即为原带状矩阵的第i条非零对角线, d为长度为p的向量。,MALAB 7.X程序设计,10/74,例2-30 演示spdiags的功能。,B=0.1 0 0;0 0.2 0;0 0 0.3; m=3;n=4; d=1 2 ; A=spdiags(B,d,m,n),MALAB 7.X程序设计,11/74,函数eye,rand和 randn产生完全存储方式的矩阵,对应的稀疏矩阵函数是speye,sprand和sprandn。,MALAB 7.X程序设计,12/74,例2-31 分析下列语句的功能。,spa=speye(4,4) %建立44的稀疏存储单位矩阵 spa(2,1)=-2 %增加元素spa(2,1) spa(2,2)=0 %删除元素spa(2,2),MALAB 7.X程序设计,13/74,2.5 矩阵和数组的运算,矩阵运算规则是按照矩阵作为运算要素定义的, 数组运算是按照矩阵元素作为运算要素定义的。 标量运算是矩阵和数组的运算的特例。,MALAB 7.X程序设计,14/74,2.5.1 矩阵和数组的算术运算,1 矩阵和数组的加减运算 两个矩阵必须同型时才可以进行加减运算。如有一个是标量,则该标量与矩阵的每个元素进行加减运算。 数组的加减运算法则与矩阵的加减运算法则相同。,MALAB 7.X程序设计,15/74,例2-32 设 求 A2B。,方法1: A=4 -3 1;2 0 5;B=1 2 0;-1 0 3; A-2*B 方法2: A=4 -3 1;2 0 5;B=1 2 0;-1 0 3; b=uminus(2*B) %,返回2*B的相反数 A+b,MALAB 7.X程序设计,16/74,2 矩阵和数组的乘法运算,矩阵的乘法运算符为*,定义为: 设A=(aij)ms,B=(bij)sn,则A与B的乘积 CAB=(cij)mn是 mn矩阵,其中cij( i= 1,2, , m ;j =1,2, ,n) 等于A的第i行与B的第j列对应元素的乘积之和。 数组的乘法运算符为.*,两个矩阵必须同型时才可以进行数组乘法运算。 运算规则为:矩阵A和B中的对应元素相乘。 如果参加运算的矩阵其中有一个是标量时,矩阵和数组的乘法运算均为标量与矩阵的每个元素进行乘法运算。,MALAB 7.X程序设计,17/74,例2-33 求乘积 AB 和 BA。,A=1 0 3;2 1 0; B=4 1;-1 1;2 0; A*B, B*A,MALAB 7.X程序设计,18/74,例2-34 求 (AB)T和BTAT(T为转置运 算)。,A=1 -1 2;2 0 1; B=2 -1 0;1 1 3;4 2 1; (A*B) B*A,MALAB 7.X程序设计,19/74,3 矩阵和数组的除法运算,矩阵除法运算的运算符为和/,分别表示左除和右除。 矩阵除法的定义为: AB=A-1B A/B=AB-1 其中A-1和B-1是矩阵A和B的逆,矩阵B的逆也可用函数inv求得。,MALAB 7.X程序设计,20/74,除法运算的运算符为.和./,分别数组为数组的左除和右除,表示数组的相应元素相除。两个矩阵必须同型时才可以进行数组除法运算。,定义为: 设A=(aij)mn,B=(bij)mn, 则数组的右除为 C=(cij)mn= (aij/ bij )mn, 数组的左除为 C=(cij)mn= (bij/ aij )mn。,MALAB 7.X程序设计,21/74,例2-35 求解方程组,A=2 2 -1 1;4 3 -1 2;8 3 -3 4;3 3 -2 -2; b=4 6 12 6; X=Ab %等价语句为 X=inv(A)*b,MALAB 7.X程序设计,22/74,2.5.2 矩阵和数组的乘方运算,矩阵乘方运算的运算符为,运算表达式为AB,矩阵乘方运算的含义是:AB表示方阵A自乘B次。 数组乘方运算的运算符为.,运算表达式为A.B,其中A和B都可以是矩阵或标量。,MALAB 7.X程序设计,23/74,数组乘方运算有下列形式:,当A为矩阵,B为正整数时,则将aij自乘B次; 当A为矩阵,B也为矩阵时,A和B矩阵必须同型,则将aij自乘bij次。 当A为正整数,B为矩阵时,将Abij构成新矩阵的第i行第j列元素。 其中aij和bij分别表示矩阵A和B的第i行第j列元素。,MALAB 7.X程序设计,24/74,2.5.3矩阵和数组的数学函数,常用的数学函数有三角函数、指数函数和整值函数等。 需要注意的是: MATLAB 6.5以前的版本三角函数的自变量和反三角函数的返回值为弧度; MATLAB 7.0版本中提供了三角函数的自变量和反三角函数的返回值分别为角度和弧度的两类函数。,MALAB 7.X程序设计,25/74,例2-36 求30。、60。和90。的正弦、 余弦、正切和余切函数值。,x=30:30:90; sind(x),cosd(x),tand(x),cotd(x) %三角函数的自变量为角度值,MALAB 7.X程序设计,26/74,例2-37 求0.1,0.2,0.3,0.4,0.5,0.6 的反正弦、反余弦和反正切值。,x=0.1:0.1:0.6; asin(x),acos(x),atan(x) %返回值为弧度 asind(x),acosd(x),atand(x) %返回值为角度,MALAB 7.X程序设计,27/74,例2-38 求1到10的自然对数和常用 对数。,x=1:10; log(x) %返回值为自然对数 log10(x) %返回值为常用对数 如果求2为底的对数呢? log10(x)/log10(2),MALAB 7.X程序设计,28/74,2.6 字符串,2.6.1字符串的定义,MATLAB将字符串当作一个行向量,每个元素对应一个字符,一个字符占两个字节,并且每一字符(包括空格)以其ASCII码的形式存放,其标识方法和数值向量相同。,MALAB 7.X程序设计,29/74,例2-39 建立任意的两个字符串,并查看字 符串占用的字节信息。,s1=Northeast Forest Uiversity %赋值方式建立字符串s1 s2=Haerbin Heilongjiang %赋值方式建立字符串s2 whos %查看字符串占用的字节信息,MALAB 7.X程序设计,30/74,常用的字符串函数,length 计算字符串的长度(即组成字符的个数) class 判断某一个变量是否为字符串,返回char则表示为字符串 findstr 寻找在某个长字符串中的子字符串,返回其起始位置 deblank 删除字符串尾部的空格 eval 以表达式方式执行字符串 disp 显示字符串的内容,MALAB 7.X程序设计,31/74,2.6.2 字符串的连接和替换,strcat(S1,S2,S3,.) 功能:返回S1,S2,S3的连接字符串,常用的字符串的连接和替换函数:,strvcat(T1,T2,T3,) 功能:返回T1,T2,T3,的垂直连接字符串,strmatch(S1,S2) 功能:在逐行搜索字符串s2,给出以s1开头的那些行的行号,strrep(S1,S2,S3) 功能:把字符串s1的所有出现s2的地方替换为s3,strtok (S) 功能:查找字符串S的第一个间隔符(空格符、指表符、回车符)前的内容,MALAB 7.X程序设计,32/74,例2-40 分析下列语句的执行结果。,test=This is a test!; position=findstr(test,is) array=strvcat(maxarray,min value,max value); result_1=strmatch(max,array) result_2=strrep(test,test,pest) token,remainder=strtok(This is a test!),MALAB 7.X程序设计,33/74,2.6.3字符串比较函数,strcmp(S1,S2) 功能:比较字符串是否相等。如果相同则返回1,否则为0。,常用的字符串比较函数:,strcmpi(S1,S2) 功能:在忽略大小写的情况下,比较字符串是否相等。如果相同则返回1,否则为0。,strncmp(S1,S2,N) 功能:比较两个字符串的前n个字符是否相等。如果相同则返回1,否则为0。,strncmpi(S1,S2,N) 功能:在忽略大小写的情况下,比较字符串的前n个字符是否相等。如果相同则返回1,否则为0。,MALAB 7.X程序设计,34/74,例2-41 分析下列语句的执行结果。,str1=hello; str2=Hello; str3=help; c1=strcmp(str1,str2) c2=strcmpi(str1,str2) c3=strncmp(str1,str3,2) c4=strncmpi(str1,str3,2),MALAB 7.X程序设计,35/74,2.6.4字符串转换函数,upper(A) 功能:把字符串A中的任一小写字母转换为相应的大写字母,常用的字符串转换函数:,lower(A) 功能:把字符串A中的任一大写字母转换为相应的小写字母,double(X) 功能:转换字符串X为ASCII码,char(X) 功能:将ASCII码X转换为字符串,MALAB 7.X程序设计,36/74,int2str(X) 功能:将整数X转换为字符串,num2str(X) 功能:将数值X转换成字符串,mat2str(MAT) 功能:将数值矩阵MAT转换为可执行的形式,MALAB 7.X程序设计,37/74,例2-42 分析下列语句的功能。,x=5317;y=int2str(x) p=num2str(pi,7) p=num2str(pi,%10.5e) a=1 2 3;4 5 6 ; b=mat2str(a) str=sprintf(The value of pi=%8.6f.,pi),MALAB 7.X程序设计,38/74,2.7 元胞数组,2.7.1 元胞数组的建立 元胞数组:一个数组里存放各种不同类型的数据。元胞数组中的基本组成是元胞,每一个元胞是用来存放各种不同类型的数据的单元。 如果元胞中存放的数据为元胞数组,则为元胞数组的嵌套使用。,MALAB 7.X程序设计,39/74,1 赋值语句,赋值语句的右边为用符号标记的不同类型的数据。,例2-43 建立元胞数组,并查看元素的信息。,a=This is the first example., hadamard(2);ones(3),North;East,MALAB 7.X程序设计,40/74,查看a的各个元素的信息: a1,1 a1,2 a2,1 a2,2,MALAB 7.X程序设计,41/74,例2-44 用为各元胞元素赋值的方法创建元 胞数组。,b(1,1)=This is the second example.; b(1,2)=hilb(3); b(2,1)=zeros(2); b(2,2)=South;West; b % 查看b的内容,MALAB 7.X程序设计,42/74,2 由各元胞元素赋值创建,创建元胞数组的函数为: cell(N) 创建空的NN的元胞数组 cell(M,N) 或 cell (M,N) 创建空的M N的元胞数组,MALAB 7.X程序设计,43/74,例2-45 由各元胞元素赋值创建元胞。,c=cell(2); c1,1=(This is the third example.); c1,2=compan(1 0 3); c2,1=3+4*i -5;-10*i 3-4*i; c2,2=; %元胞数组的第四个元素为空矩阵 C % 查看c 的内容,MALAB 7.X程序设计,44/74,显示元胞数组的内容的函数:,celldisp(C) 功能:显示元胞数组C的所有元素的内容,celldisp,cellplot和cellfun:,cellplot(C) 功能:以嵌套的格子的形式显示元胞数组C的所有元素的结构,d=cellfun(fun, c) 功能:返回判断元胞数组c 的元素数据类型和基本信息的数组d,其中fun为isreal,isempty, islogical,length,ndims和prodofsize。,MALAB 7.X程序设计,45/74,2.7.2 转换函数,M=cell2mat(C) 功能:元胞数组转换为单精度矩阵,其中C为多维元胞数组,M为转换后得到的单精度矩阵。要求输入的元胞数组元素必须是同类型的数据。,元胞数组与其他数组的转换函数: cell2mat,mat2cell和num2cell。,C=mat2cell(X,M,N) 功能:矩阵分解为元胞数组。其中X为多维元胞数组,C为转换后得到的矩阵。,C=num2cell(A) 功能:转换数值数组为元胞数组。其中A为数值数组,C为转换得到的元胞数组。,MALAB 7.X程序设计,46/74,例2-46 元胞数组与其他数组的转换。,x=1 2 3 4;5; 9 6 7 8; 10 11 2; cell2mat(x) %转换数值数组为单精度矩阵,MALAB 7.X程序设计,47/74,X = zeros(3,4)+5;C = mat2cell(X,1 2,1 3) %矩阵分解为元胞数组 A=1 2 3 4; 5 6 7 8; 9 10 11 12; C=num2cell(A) %转换数值数组为元胞数组,MALAB 7.X程序设计,48/74,2.7.3 元胞数组的使用,1 直接引用 元胞数组的元素的引用可通过指出数组名称直接引用。 元胞数组中可以引用的元素为元胞数组的结构、元胞数组的内容、元胞数组的部分元素。,MALAB 7.X程序设计,49/74,例2-47 演示元胞数组的直接引用方法。,a=This is the forth example.,magic(3);ones(3),North;East a(1,2) % 查看a(1,2)的结构 a1,2 %查看a1,2元胞的内容 a1,2(1) %引用a1,2元胞的第1个元素 a1,2(1 2) %引用a1,2元胞的第1、2个元素,MALAB 7.X程序设计,50/74,2 扩展元胞数组,例 2-48 演示元胞数组的扩展方法。 a3,3=5 %扩展a为33的数组,a(3,3)为元胞,内容为5,MALAB 7.X程序设计,51/74,3 删除元胞数组,例2-49 演示元胞数组的删除方法。 a3,3= %删除a的第三行、第三列元素 a(3,:)= %删除a的第三列元素,MALAB 7.X程序设计,52/74,2.8 构架数组,2.8.1 构架数组的建立,构架数组的基本组成是域,每一个域是用来存放各种不同类型的数据的单元。 构架数组的建立也有三种方法: 赋值语句、创建函数和转换函数。,MALAB 7.X程序设计,53/74,1 赋值语句,例2-50 使用赋值语句依次为各个域赋值的方法建立构架数组,存储两名学生的名字、学号、性别、班级信息。,=Wang Ming; s.number=19990101; s.sex=man; s.class=199901;,MALAB 7.X程序设计,54/74,如查看构架数组的内容,语句为: s 如查看构架数组的某一个域内容,语句为: ,MALAB 7.X程序设计,55/74,s(2).name=Zhang Le; s(2).number=19990201; s(2).sex=man; 构架数组的第二个元素可以被通过增加下标实现。 如查看构架数组的各个域名,语句为: s,MALAB 7.X程序设计,56/74,可通过下面的语句查看s的内容: s(1), s(2),MALAB 7.X程序设计,57/74,2 创建函数,使用struct函数可以建立构架数组,格式为: S = struct (field1,VALUES1,field2,VALUES2,.) 功能:创建构架数组S,其中 field1的值赋为VALUES1, field2的值赋为VALUES2,MALAB 7.X程序设计,58/74,例 2-51 应用struct函数可以创建例2-50的构架数组。,s=struct(name,Wang Ming,number,19990101, class, 199901,sex,man),MALAB 7.X程序设计,59/74,3 转换函数,元胞数组转换为构架数组的函数为cell2struct, 格式为: S = cell2struct(C,FIELDS,DIM) 功能:元胞数组C转换为构架数组S。其中FIELDS为字符串数组或元胞数组,DIM为元胞数组的维数。,MALAB 7.X程序设计,60/74,例2-52 应用cell2struct函数可以创建同 上的构架数组。,c=Zhang Ming,19990102,femal,199901; f=name,number,sex,class; s=cell2struct(c,f,2),MALAB 7.X程序设计,61/74,2.8.2域的增加和删除,1 获取域名 构架数组创建后可通过函数fieldnames获取构架数组的域, 格式为: NAMES = fieldnames(S) 功能:返回构架数组S的域名构成的元胞数组NAMES。,MALAB 7.X程序设计,62/74,例2-53 给出构架数组s的全部域名。,NAMES = fieldnames(s),MALAB 7.X程序设计,63/74,2 增加和删除域,构架数组建立后,允许增加和删除域。 构架数组的域的删除可通过函数rmfield实现,格式为: S = rmfield (S,field) 功能:从构架数组S中删除域field。,MALAB 7.X程序设计,64/74,例2-54 演示通过赋值语句增加域的方法。在已建立的构架数组s的基础上,增加课程成绩域exams(三门功课),并删除s的域sex。,s(2).exams=90 82 88 ; % 增加s的域exams,并通过赋值语句为s(2) 赋值 s(1) % 查看s(1,1)的详细信息 s(2) % 查看s(1,2)的详细信息 s2=rmfield(s,sex) %删除s的域sex,MALAB 7.X程序设计,65/74,2.8.3 构架数组元素的引用,构架数组的元素的引用可通过指出数组名称、下标、域名直接引用。,例 2-55 演示构架数组元素的引用方法。 s(1).number s(2).number %引用number元素 s(2).exams%引用exams元素,并求其平均值,MALAB 7.X程序设计,66/74,averge=(s(2).exams(1)+s(2).exams(2)+s(2).exams(3)/3 %求平均值 s(2).aver=averge %增加aver域,并赋值为平均值 这时s成为1x2 构架数组,并有域name、number、class、exams和aver。,MALAB 7.X程序设计,67/74,2.8.4 getfield和 setfield函数,函数getfield 的格式为: F = getfield (S,i,j,field,k) 功能:获取构架数组的指定的域的域值。其中S是构架数组名,i,j用来指定元素构架的下标,field是指定的域名,必须是字符串,k用来指定域中数组的下标。,MALAB 7.X程序设计,68/74,函数setfield的格式为: S=setfield(S,field,V) S=SETFIELD(S,i,j,field,k,V) 功能:设置构架数组的指定的域的域值,其中S是构架数组名,i,j用来指定构架数组元素的下标,field是指定的域名,必须是字符

温馨提示

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

评论

0/150

提交评论