您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 北航《精通matlab65》教材电子版 3
1第三章字符串、元胞和构架数组MATLAB6.x版的内建数据类型(Built-indatatype)就有5种以上,此外还有许多其他专门设计的类(Class),如符号类、内联函数类、控制工具包中的线性时不变模型类、神经网络类等。就程序设计而言,MATLAB6.x版采用了面向对象编程技术。数据和编程的改变使用户能更简捷而自然地解决复杂的计算问题(如符号计算问题、多变量控制系统问题、神经网络问题)。本章内容根据MATLAB6.5编写,但绝大部分内容适用于其他MATLAB6.x版本。第二章介绍了数值数组(NumericArray),这是读者比较熟悉的数据类型。本章将集中讲述另外三类数据:字符串数组(CharacterStringArray)、元胞数组(Cellarray)和构架数组(Structurearray)。它们之间的基本差别见表3-1。表3-1四种数据类型基本构成比较表数组类型基本组分组分内涵基本组分占用字节数数值数组元素双精度实数标量或双精度复数标量816字符串数组元素字符2元胞数组元胞可以存放任何类型、任何大小的数据。不定构架数组构架只有挂接在构架上的“域”才能存放数据。数据可以是任何类型、任何大小。不定3.1字符串数组3.1.1字符串入门【例3.1.1-1】先请读者实际操作本例,以体会数值量与字符串的区别。cleara=12345.6789class(a)a_s=size(a)a=1.2346e+004ans=doublea_s=11b='S'class(b)b_s=size(b)b=Sans=charb_s=11whosNameSizeBytesClassa1x18doublearray2a_s1x216doublearrayans1x48chararrayb1x12chararrayb_s1x216doublearrayGrandtotalis10elementsusing50bytes3.1.2串数组的属性和标识【例3.1.2-1】本例演示:串的基本属性、标识和简单操作。(1)a='Thisisanexample.'a=Thisisanexample.(2)size(a)ans=119(3)a14=a(1:4)ra=a(end:-1:1)a14=Thisra=.elpmaxenasisihT(4)ascii_a=double(a)ascii_a=Columns1through128410410511532105115329711032101Columns13through191209710911210810146char(ascii_a)ans=Thisisanexample.(5)w=find(a='a'&a='z');ascii_a(w)=ascii_a(w)-32;char(ascii_a)ans=THISISANEXAMPLE.(6)A='这是一个算例。';A_s=size(A)A56=A([56])ASCII_A=double(A)A_s=17A56=算例ASCII_A=Columns1through6547545191153947473505219549405Column7413793char(ASCII_A)ans=这是一个算例。(7)b='Example''3.1.2-1'''b=Example'3.1.2-1'(8)ab=[a(1:7),'',b,'.']ab=ThisisExample'3.1.2-1'.3.1.3复杂串数组的创建3.1.3.1多行串数组的直接创建【例3.1.3.1-1】多行串数组的直接输入示例。clearS=['Thisstringarray''hasmultiplerows.']S=Thisstringarrayhasmultiplerows.size(S)ans=2183.1.3.2利用串操作函数创建多行串数组【例3.1.3.2-1】演示:用专门函数char,str2mat,strvcat创建多行串数组示例。S1=char('Thisstringarray','hastworows.')S1=Thisstringarrayhastworows.S2=str2mat('这','字符','串数组','','由4行组成')S2=这字符串数组由4行组成S3=strvcat('这','字符','串数组','','由4行组成')S3=这字符串数组由4行组成size(S3)ans=5543.1.3.3转换函数产生数码字符串【例3.1.3.3-1】最常用的数组/字符串转换函数int2str,num2str,mat2str示例。(1)A=eye(2,4);A_str1=int2str(A)A_str1=10000100(2)rand('state',0)B=rand(2,4);B3=num2str(B,3)B3=0.950.6070.8910.4560.2310.4860.7620.0185(3)B_str=mat2str(B,4)B_str=[0.95010.60680.89130.4565;0.23110.4860.76210.0185]Expression=['exp(-',B_str,')'];eval(Expression)ans=0.38670.54510.41010.63350.79370.61510.46670.9817【例3.1.3.3-2】综合例题:在MATLAB计算生成的图形上标出图名和最大值点坐标。cleara=2;w=3;t=0:0.01:10;y=exp(-a*t).*sin(w*t);[y_max,i_max]=max(y);t_text=['t=',num2str(t(i_max))];%7y_text=['y=',num2str(y_max)];%8max_text=char('maximum',t_text,y_text);%9%tit=['y=exp(-',num2str(a),'t)*sin(',num2str(w),'t)'];%11plot(t,zeros(size(t)),'k')holdonplot(t,y,'b')plot(t(i_max),y_max,'r.','MarkerSize',20)text(t(i_max)+0.3,y_max+0.05,max_text)%16title(tit),xlabel('t'),ylabel('y'),holdoff50246810-0.100.10.20.30.40.50.6maximumt=0.33y=0.4321y=exp(-2t)*sin(3t)ty图3.1-13.1.3.4利用元胞数组创建复杂字符串【例3.1.3.4-1】元胞数组在存放和操作字符串上的应用。a='MATLAB6.x';b='includesnewdatatypes:';c1='◆Multidimensionalarray';c2='◆User-definabledatastructure';c3='◆Cellarrays';c4='◆Characterarray';c5='◆Functionhandle';c=char(c1,c2,c3,c4,c5);C={a;b;c};%5disp([C{1:2}])%6disp('')%disp(C{3})%8MATLAB6.xincludesnewdatatypes:◆Multidimensionalarray◆User-definabledatastructure◆Cellarrays◆Characterarray◆Functionhandle3.1.4串转换函数【例3.1.4-1】fprintf,sprintf,sscanf的用法示例。rand('state',0);a=rand(2,2);s1=num2str(a)s_s=sprintf('%.10e\n',a)s1=0.950130.606840.231140.48598s_s=9.5012928515e-0012.3113851357e-0016.0684258354e-0014.8598246871e-001fprintf('%.5g\\',a)0.95013\0.23114\0.60684\0.48598\s_sscan=sscanf(s_s,'%f',[3,2])s_sscan=0.95010.486060.231100.606803.1.5串操作函数3.2元胞数组3.2.1元胞数组的创建和显示3.2.1.1元胞标识寻访和内容编址寻访的不同3.2.1.2元胞数组的创建和显示【例3.2.1.2-1】本例演示:)22(元胞数组的创建。C_str=char('这是','元胞数组创建算例1');R=reshape(1:9,3,3);Cn=[1+2i];S_sym=sym('sin(-3*t)*exp(-t)');(1)直接创建法之一A(1,1)={C_str};A(1,2)={R};A(2,1)={Cn};A(2,2)={S_sym};AA=[2x10char][3x3double][1.0000+2.0000i][1x1sym](2)直接创建法之二B{1,1}=C_str;B{1,2}=R;B{2,1}=Cn;B{2,2}=S_sym;celldisp(B)B{1,1}=这是元胞数组创建算例1B{2,1}=1.0000+2.0000iB{1,2}=147258369B{2,2}=sin(-3*t)*exp(-t)3.2.2元胞数组的扩充、收缩和重组【例3.2.2-1】元胞数组的扩充。(1)C=cell(2);C(:,1)={char('Another','textstring');10:-1:1}C=[2x11char][][1x10double][](2)AC=[AC]7A_C=[A;C]AC=[2x10char][3x3double][2x11char][][1.0000+2.0000i][1x1sym][1x10double][]A_C=[2x10char][3x3double][1.0000+2.0000i][1x1sym][2x11char][][1x10double][]【例3.2.2-2】cellplot能用图形形象化地表示元胞数组的内容。(A_C取自上例)cellplot(A_C,'legend')doublecharsparsestructureother1+2i图3.2-1【例3.2.2-3】元胞数组的收缩和重组。(1)A_C(3,:)=[]A_C=[2x10char][3x3double][1.0000+2.0000i][1x1sym][1x10double][](2)R_A_C=reshape(A_C,2,3)R_A_C=[2x10char][1x10double][1x1sym][1.0000+2.0000i][3x3double][]3.2.3元胞数组内容的调取【例3.2.3-1】元胞数组内容的调取示例。(1)f1=R_A_C(1,3)class(f1)f1=[1x1sym]ans=cell(2)f2=R_A_C{1,3}class(f2)8f2=sin(-3*t)*exp(-t)ans=sym(3)f3=R_A_C{1,1}(:,[1256])f3=这是元胞创建(4)[f4,f5,f6]=deal(R_A_C{[1,3,4]})f4=这是元胞数组创建算例1f5=10987654321f6=1472583693.2.4元胞数组转换函数【例3.2.4-1】常用元胞数组转换函示例。(1)num2cell把数值数组转换成元胞数组rand('state',0);A=rand(2,3,2)C1=num2cell(A)A(:,:,1)=0.95010.60680.89130.23110.48600.7621A(:,:,2)=0.45650.82140.61540.01850.44470.7919C1(:,:,1)=[0.9501][0.6068][0.89
本文标题:北航《精通matlab65》教材电子版 3
链接地址:https://www.777doc.com/doc-70383 .html