matlab教程第3讲_第1页
matlab教程第3讲_第2页
matlab教程第3讲_第3页
matlab教程第3讲_第4页
matlab教程第3讲_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

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

文档简介

1、Matlab教程教程第第3讲讲字符串、元胞、架构数组n 字符串数组字符串数组的属性和标识字符串数组的属性和标识复杂字符串数组的创建复杂字符串数组的创建串转换函数和串操作函数串转换函数和串操作函数n 元胞数组元胞数组的创建元胞数组的创建元胞数组内容的显示元胞数组内容的显示元胞数组内容的提取元胞数组内容的提取元胞数组的扩充、收缩和重组元胞数组的扩充、收缩和重组 2 字符串、元胞、架构数组n 构架数组构架数组的创建构架数组的创建构架数组数据的获取和设置构架数组数据的获取和设置构架数组域的获取构架数组域的获取n 数据类型归纳3 2021-9-24Application of Matlab Langua

2、ge4 3.1 字符串字符串n 关于字符串关于字符串n MATLAB处理字符处理字符(Characters)与字符串与字符串(Strings)的的相关指令相关指令大部分都放在下列目大部分都放在下列目录录之中:之中: MATLAB根目录根目录toolboxmatlabstrfunn 其中的其中的strfun就是代表就是代表String Functions。若要若要查询与字符查询与字符和和字符串相关字符串相关的的指令指令,可在,可在 MATLAB 下下输输入:入: help strfun 或是或是 help strings 2021-9-24Application of Matlab Langua

3、ge5 3.1 字符串字符串的的概念概念n字符字符(Characters)可以)可以构成一个构成一个字符串字符串(Strings),或,或字符数组字符数组(character array)。 n一一个个字符串字符串是被是被视为一个视为一个行行向量向量(row vector)。 n字符串字符串中的每一中的每一个个字符字符(含(含空格空格),),以其以其 ASCII 码码的形式存放的形式存放于行于行向量中向量中,是是该字符串该字符串变量变量的一的一个个元素元素(element)。 2021-9-24Application of Matlab Language6 3.1 、字符串入门、字符串入门nM

4、atlab 用用单引号单引号来来界定界定一个一个字字符符串串。n可以使用可以使用方括号方括号“ ”直接连接直接连接多多个个字字符符串串变量,变量,得到一得到一个个新字新字符符串串变量。变量。n在在MATLAB中,字符串是作为字符数组来引入的;中,字符串是作为字符数组来引入的;str1 = I like MATLAB,; % 建立字串建立字串变量变量 str1str2 = JavaScript, and Perl!; % 建立字串建立字串变量变量str2str3 = str1 str2 % 直接连接直接连接str1及及str2,以建立,以建立str3str3 = I like MATLAB, J

5、avaScript, and Perl! 2021-9-24Application of Matlab Language7 3.1 、字符串、字符串n如要输入的字符串中有单引号如要输入的字符串中有单引号,则由两个连续则由两个连续的单引号来表示。的单引号来表示。n若要若要计算字符串变量计算字符串变量的的长度长度(即(即组成字符串组成字符串的的个数个数),可用),可用 length 指令指令。 n【例例3-2】含单引号字符串的输入含单引号字符串的输入sentence = Ive got a date!;length(sentence)% 计算计算字字字符串字符串sentence的的长度长度ans

6、= 163.1.1 3.1.1 字符串数组的属性和标识字符串数组的属性和标识1. 1. 创建串数组创建串数组 必须将待建字符放在“单引号对单引号对”中,当串中本身包含单引号时,每个单引号符用“连续的两个单引号连续的两个单引号”表示。2. 2. 串数组的大小串数组的大小 sizesize指令可获得串数组的大小。串中的每一个字符,包括中英文字符、空格、标点都算一个元素。3.1.1 3.1.1 字符串数组的属性和标识(续)字符串数组的属性和标识(续)3. 3. 串数组的元素标识串数组的元素标识 按从左至右的顺序依次用1、2、3、4 等标识元素在串中的位置。4. 4. 串数组的串数组的ASCIIASC

7、II码码 指令absabs和doubledouble可以显示串数组对应的ASCII码数值数组,指令charchar则可把ASCII码数值数组转换成串数组。3.1.1 3.1.1 字符串数组的属性和标识(续)字符串数组的属性和标识(续)5. 5. 字符串字符串ASCIIASCII码数组的操作码数组的操作 可以对ASCII码数组进行数值数组的各种运算。但其结果就变成一般数值向量的运算,而不再是字符串的运算。注意:注意:n必须在英文状态下输入必须在英文状态下输入“单引号对单引号对”。n将多个字符串变量直接用将多个字符串变量直接用“, ,”连接,可构成连接,可构成一个较长的新字符串变量。一个较长的新字

8、符串变量。例3.2 串数组基本操作string=this is an example!%输入字符串strings_1=string(end:-1:1)%倒序排列string得到s_1s_2=string(end:-2:1) %倒序排列string且每隔一个字符取一个元素%得到s_2%w=string=a& string vertcatCAT arguments dimensions are not consistent.演示3.1.2 3.1.2 复杂字符串数组的创建(续)复杂字符串数组的创建(续) 2. 2. 利用串操作函数创建多行串数组利用串操作函数创建多行串数组 利用专门的str2mat

9、str2mat、strvcatstrvcat和charchar函数可以构造出字符串数组,而不必考虑每行的字符数是否相等,总是按最长的设置,不足的末尾用空格补齐。3.1.2 3.1.2 复杂字符串数组的创建(续)复杂字符串数组的创建(续)2.利用串操作函数创建多行串数组利用串操作函数创建多行串数组 算例见下页:利用串操作函数创建多行串数组利用串操作函数创建多行串数组n区别:nstr2mat认为空串代表空行;nstrvcat省略空串。s=char(Hello, Nice to meet you!);s=str2mat(Hello, Nice to meet you!);s=strvcat(Hell

10、o, Nice to meet you!);s1=str2mat(Hello, ,Nice to meet you!);s2=strvcat(Hello, ,Nice to meet you!);s1,s2%s_s=size(s),s_s1=size(s1),s_s2%=size(s2)s1 =Hello, Nice to meet you!s2 =Hello, Nice to meet you!演示3.1.2 3.1.2 复杂字符串数组的创建(续)复杂字符串数组的创建(续)3. 3. 利用串转换函数产生数码字符串利用串转换函数产生数码字符串 常用的数组/字符串转换函数有int2str , i

11、nt2str , num2str , mat2strnum2str , mat2str 。n int2strint2str:把整数数组转换成字符串数组,非整数将被四舍五入后再转换;n num2strnum2str :把非整数数组转换成字符串数组,常用于图形中数据点的标识;n mat2strmat2str:把数值数组转换成字符串数组。 利用串转换函数产生数码字符串利用串转换函数产生数码字符串a=0.9576 0.8 2.151;4.0 5 7.8; %23数值数组a1=int2str(a); %取整数a2=num2str(a,2); %保持2位有效数字,转换为串a3=mat2str(a,2);

12、%保持2位有效数字,转换为一行串a,a1,a2,a3a = 0.9576 0.8000 2.1510 4.0000 5.0000 7.8000a1 =1 1 24 5 8a2 =0.96 0.8 2.2 4 5 7.8a3 =0.96 0.8 2.2;4 5 7.8演示n例3.3作出函数y=e-2tsin(3t)的图形,并标注最大值点clear%清除内存变量t = 0 : 0.01 : 10; %取自变量采样数组y =exp(-2*t).*sin(3*t); %计算函数值产生函数数组 y_max, i_max = max( y ); %找最大值元素位置t_text = t = , num2st

13、r( t(i_max) ) ; %生成最大值点的横坐标字符串y_text = y = , num2str( y_max ) ; %生成最大值点的纵坐标字符串max_text = char( Maxium, t_text, y_text ); %生成标志最大值点的字符串Title = exp(-2*t).*sin(3*t) ; %生成标志图名用的字符串figure,plot(t,zeros(size(t),k)%画纵坐标为0的基准线hold on %保持绘制的线不被清除演示3.1.3 3.1.3 串转换函数和串操作函数串转换函数和串操作函数1. 1. 字符串转换函数字符串转换函数(详见P76表3

14、.1-1) 见下页表2. 2. 字符串操作函数字符串操作函数(详见P77表3.1-2)nlengthlength:用来计算字符串的长度(即组成字符的个数)。nchar(s1,s2,char(s1,s2,) ):将串s1,s2,逐个写成行,形成多行数组。nclassclass或ischarischar:用来判断某一个变量是否为字符串。classclass函数返回charchar则表示为字符串,而ischar函数返回1表示为字符串。nstrcmp(s1,s2)strcmp(s1,s2):比较字符串s1和s2是否相同。返回值如果为1则相同,为0则不同。nfindstr(s1,s2)findstr(s

15、1,s2):寻找在某个长字符串s1中的子字符串s2,返回其起始位置。ndeblank(s )deblank(s ): 删除字符串尾部的空格。 指令 含义 指令 含义abs把串译成ASC码base2decbase、bin、hex与dec之间的转换。base:任意进制串bin:二进制串hex:十六进制串dec:十进制整数char任何类型转换成串bin2decdouble任意类型转换成双精度数值 hex2decfprintf格式化数据写道文件或屏幕 dec2basesprintf以控制格式把数值转换为串 dec2binsscanf在格式控制下把串转换成数 dec2hexsetstr把ASC码转译成串

16、int2str整数转换成串str2num串转换成数值mat2str数值矩阵转换成串hex2num十六进制数转换成浮点数num2str数值转换成串n1、字符串转换函数:n2.字符串操作函数str1=Hello ;str2=I like MATLAB %重复单引号来输入含有单引号的字符串 %length(str2) %字符串str2的长度 %x1=double(str1) %查看字符串str1的ASCII码%char(str1,str2) %形成两行字符%strcat(str1,!,str2,.) %形成一长串%strcmp(str1,str2) %比较两串是否相同%findstr(str2,li

17、ke) %寻找子串like的起始字符在主串中的下标%isletter(str2) %以逻辑1指示串中英文字母的位置str2 =I like MATLAB演示2.2.字符串操作函数(续)字符串操作函数(续)n 执行字符串执行字符串 如果需要直接“执行”某一字符串,可以使用evaleval命令,效果就如同直接在MATLAB命令窗口内输入此命令。 算例见下页:evaleval指令执行字符串指令执行字符串str3=a=2*5eval(str3) %执行字符串 str3 =a=2*5a = 10演示2.2.字符串操作函数(续)字符串操作函数(续)n 显示字符串显示字符串 字符串可以直接使用disp命令显

18、示出来,即使后面加分号(;)也显示。算例见下页所示:dispdisp指令显示字符串指令显示字符串disp(请输入2*2的矩阵a)str1=Hello , str2=I like MATLABdisp(char(str1,str2);请输入2*2的矩阵astr1 =Hellostr2 =I like MATLABHello I like MATLAB演示3.2 3.2 元胞数组元胞数组特点:特点:(1)元胞数组的基本组成单元是元胞元胞数组的基本组成单元是元胞(cell)(cell),元胞在数组中以下标元胞在数组中以下标 来进行区分来进行区分;(2)元胞可以是任何类型、任意大小的数组元胞可以是任何

19、类型、任意大小的数组(如:数值数组、字符 串数组、符号对象等);(3)一个元胞数组中各个元胞可以是不同类型的内容一个元胞数组中各个元胞可以是不同类型的内容; 元胞数组的维数不受限制,可以采用单下标或全下标寻址;元胞数组的维数不受限制,可以采用单下标或全下标寻址;注意: 元胞和元胞里的内容是两个不同范畴的东西,分别通过“元胞外标识(Cell Indexing)”和”元胞内编址(Content Addressing)”来寻访。“外标识的元胞元素”用圆括号对(),而“编址元胞元素内涵”用花括号对,如A(2,3)表示元胞数组A第2行第3列的元胞,A2,3则表示元胞数组A第2行第3列的元胞中的内容。3.

20、2.1 3.2.1 元胞数组的创建元胞数组的创建1. 1. 直接使用花括号直接使用花括号创建创建 算例见下页所示:n直接使用花括号直接使用花括号创建元胞数组创建元胞数组 n创建的元胞数组中的元胞A(1,1)是字符串,A(1,2)是数组,A(2,1)是数组,而A(2,2)为一个元胞数组。clearA=This is the first Cell.,1 2;3 4;eye(3),Tom,JaneA = 1x23 char 2x2 double 3x3 double 1x2 cell 演示3.2.1 3.2.1 元胞数组的创建(续)元胞数组的创建(续)2.2.由各元胞创建外标识元胞元素赋值法由各元胞

21、创建外标识元胞元素赋值法算例见下页所示:算例见下页所示:n由各元胞创建元胞数组由各元胞创建元胞数组B(1,1)=This is the second Cell.;B(1,2)=5+3*i;B(1,3)=1 2;3 4; 5 6;B %显示元胞数组 B = 1x24 char 5.0000 + 3.0000i 3x2 double演示3.2.1 3.2.1 元胞数组的创建(续)元胞数组的创建(续)3.3.由各元胞内容创建由各元胞内容创建 编址元胞元素内涵编址元胞元素内涵的直接赋值的直接赋值算例见下页所示:算例见下页所示:n由各元胞内容创建元胞数组由各元胞内容创建元胞数组C1,1=This is

22、the third Cell.;C2,1=magic(4)%生成21的元胞数组 C = This is the third Cell. 4x4 double演示3.2.2 3.2.2 元胞数组的内容显示元胞数组的内容显示 在MATALB命令窗口中输入元胞数组的名称,并不直接显示出元胞数组的各元胞元素的内容值,而是显示各元胞元素的数据类型和结构 ,单元素的元胞除外。1.1.使用使用celldispcelldisp命令显示元胞数组的内容命令显示元胞数组的内容算例见下页所示:算例见下页所示:使用使用celldispcelldisp命令显示元胞数组的内容命令显示元胞数组的内容n表示元表示元胞数组的元胞

23、数组的元胞元素内容,胞元素内容,nA2,21表示第表示第二行第二列二行第二列的元胞元素的元胞元素中存放的元中存放的元胞数组的第胞数组的第一个元胞元一个元胞元素的内容。素的内容。clear;A=This is the first Cell.,1 2;3 4;eye(3),Tom,Jane;C1,1=This is the third Cell.;C2,1=magic(4);celldisp(A), celldisp(C) A1,1 = This is the first Cell. A2,1 = 1 0 0 0 1 0 0 0 1 A1,2 = 1 2 3 4 A2,21 = Tom A2,22

24、 = Jane 演示3.2.2 3.2.2 元胞数组的内容显示(续)元胞数组的内容显示(续)2.2.使用使用cellplotcellplot命令以图形显示元胞数组命令以图形显示元胞数组 的内容的内容 算例见下页所示:n用用cellplotcellplot命令以图形显示元胞数组的内容命令以图形显示元胞数组的内容clear;A=This is the first Cell.,1 2;3 4;eye(3),Tom,Jane;figure,cellplot(A),%clf演示3.2.3 3.2.3 元胞数组的内容获取元胞数组的内容获取 1. 1. 取元胞数组的元素内容取元胞数组的元素内容 算例见下页所

25、示:算例见下页所示:注意:注意:x1x1是数组,是数组,x2x2是标量。是标量。n取元胞数组的元素内容取元胞数组的元素内容A=This is the first Cell.,1 2;3 4;eye(3),Tom,Jane; %x1=A1,2 %用花括号寻访取A(1,2) 元胞元素的内容x2=A1,2(2,2) %取A(1,2) 元胞元素的数组第二行第二列内容x2 = 4演示3.2.3 3.2.3 元胞数组的内容获取(续)元胞数组的内容获取(续)2. 2. 取元胞数组的元素取元胞数组的元素算例见下页所示:算例见下页所示:3. 3. 使用使用dealdeal函数取多个元胞元素的内容函数取多个元胞元

26、素的内容 算例见下页所示:算例见下页所示:n取元胞数组的元素取元胞数组的元素x3=A(1,2) %用圆括号寻访得到的是元胞 x3 = 2x2 double演示n 使用使用dealdeal函数取多个元胞元素的内容函数取多个元胞元素的内容x4,x5,x6=deal(A2,3,4) %单下标寻址取A的三个元胞内容 x4 = 1 0 0 0 1 0 0 0 1x5 = 1 2 3 4x6 = Tom Jane演示n 例3.4 元胞数组的基本应用C = char(这是, 元胞数组 ); %两行的字符串数组R = reshape( 1:9,3,3 ); %33 的数值数组S = sym( sin(-3*t

27、)*exp(-t) ); %符号表达式A( 1,1 ) = C ; %对元胞数组 A 进行赋值A 2,1 = S; %注意 和 () 的区别A 2,2 = R; A %显示元胞数组 A 的元胞celldisp( A ) %显示元胞数组 A 的元胞中的内容class( A(2,1) ) %元胞的类型A = 2x4 char 1x1 sym 3x3 double A1,1 = 这是 元胞数组 A2,1 = -sin(3 t) exp(-t) A1,2 = A2,2 = 1 4 7 2 5 8演示 例3.5 元胞数组的扩充、收缩和重组clearload exm03_04 %载入数据文件B = cel

28、l( 2 ); %创建空的 22 元胞数组B 1,1 = Another cell array; %对元胞数组进行赋值B( :,2 ) = num2str(R) ; 1+2i %对第二列元胞赋值,注意前后大小一致%元胞数组的重组%AB = A B %将 A, B 作为两列排列得到 24 的元胞数组%A_B = A ; B %将 A, B 作为两行排列得到 4*2 的元胞数组%cellplot( A_B , legend )%元胞数组的形象结构图B = Another cell array 3x7 char 1.0000 + 2.0000i演示3.3 3.3 构架数组构架数组特点:特点:n构架数

29、组的基本组成是构架构架数组的基本组成是构架(Structure)(Structure),以下标区,以下标区分各个构架;分各个构架;n构架必须划分成构架必须划分成“域域”后才能使用,每一个构架都后才能使用,每一个构架都包含多个域包含多个域(Fields)(Fields) ;n构架不能直接存放数据,数据必须存放在构架下面构架不能直接存放数据,数据必须存放在构架下面的的“域域”中中;n构架的域可以存放任意类型、任意大小的数组构架的域可以存放任意类型、任意大小的数组(数值数组、字符串数组、符号对象、元胞等);n不同构架的同名域中可以存放不同类型的内容不同构架的同名域中可以存放不同类型的内容;n构架数组

30、可以是任意维的,可以利用单下标或全下构架数组可以是任意维的,可以利用单下标或全下标寻址。标寻址。3.3.1 3.3.1 构架数组的创建构架数组的创建1.1.直接创建法直接创建法直接对域赋值算例见下页所示:算例见下页所示: 3.3.1 3.3.1 构架数组的创建构架数组的创建-直接创建法直接创建法ps = 1x2 struct array with fields: name color position演示clearps(1).name= 曲线1 ;ps(1).color=red ;ps(1).position=0,0,300,300 ;ps(2).name=曲线2;ps(2).color=bl

31、ue;ps(2).position=100,100,300,300 ;ps %ps为12的构架数组,有三个域%ps(1) %显示构架 %注:ps是构架数组,ps(1)和ps(2)是构架,%name、color和position是域。 3.3.1 3.3.1 构架数组的创建(续)构架数组的创建(续)2. 2. 利用利用structstruct函数创建函数创建算例见下页所示:算例见下页所示: 3.3.1 3.3.1 构架数组的创建构架数组的创建-利用利用structstruct函数创建函数创建ps(1)=struct(name,曲线1,color,red,position,0,0,300,300)

32、;ps(2)=struct(name,曲线2,color,blue,position,100,100,300,300)ps = 1x2 struct array with fields: name color position演示3.3.2 3.3.2 构架数组数据的获取和设置构架数组数据的获取和设置1.1.直接获取直接获取 算例见下页所示:算例见下页所示: 构架数组数据的获取直接获取构架数组数据的获取直接获取 x1=ps(1) %获取一个构架%x2=ps(1) .position %获取构架ps(1)中一个域position的全部内容%x3= ps(1) .position(1,3) %获取

33、构架ps(1) position域中第1行第3列的%元素内容x1 = name: 曲线1 color: red position: 0 0 300 300演示3.3.2 3.3.2 构架数组数据的获取和设置(续)构架数组数据的获取和设置(续)2. 2. 用用getfieldgetfield获取构架数组的数据获取构架数组的数据算例见下页所示:算例见下页所示: 用用getfieldgetfield获取构架数组的数据获取构架数组的数据x4=getfield(ps,1,color) %获取构架ps(1)中一个域color的全部内容%x5=getfield(ps,1, color,1) %获取构架ps(

34、1) color域中第一个元素的内%容x4 =red演示3.3.2 3.3.2 构架数组数据的获取和设置(续)构架数组数据的获取和设置(续)3. . 用用setfieldsetfield设置构架数组的数据设置构架数组的数据算例见下页所示:算例见下页所示: 用用setfieldsetfield设置构架数组的数据设置构架数组的数据ps=setfield(ps,1, color, green) %对ps(1)中color域的内容进行设置ps(1)演示 3.3.3 3.3.3 构架数组域的获取构架数组域的获取%1)使用fieldnames获取构架数组的所有域x6=fieldnames(ps)%2)获取

35、构架数组域的数据%使用合并相同域的数据并排成水平向量 %all_x= %使用cat将其变成多维数组 %cat(1,ps.position) %沿第一维排列%cat(2,ps.position) %沿第二维排列x6 = name color position演示例3.6已知2输入2输出的LTI系统的传递函数,利用表示该传递函数的构架数组来练习构架数组的基本操作。传递函数为:n 例3.6构架数组的基本操作%1.创建代表2输入2输出系统的传递函数的构架%数组clearnum = 3,2 ; 4 1,1 ; %分子系数构成的元胞数组den = 1,3,2,1,1,1 ; 1 2 2 1,

36、1 0 ; %分母系数构成的元胞数组ss = tf( num , den ); %利用控制工具箱函数产生传递函数矩阵SST = struct( ss ) %将传递函数矩阵转换成构架数组%2.获取构架数组的域名FN = fieldnames( SST ) %获取域名,以元胞数组的形式保存class( FN )%获取构架数组域中的内容ff = SST.den %获取 SST 的 den 域中的所有内容,为 22 %的元胞数组SST = Variable: s lti: 1x1 ltiFN = Variable ltians =cell? Reference to non-existent field den.演示n 例3.7 其它命令cleardept(5).No = 5 %生成 15 的构架数组,只有No域%dept(2).teacher=5 %任一个构架增加 teacher 域,整个构架数组%都增加 te

温馨提示

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

评论

0/150

提交评论