北航《精通matlab65》教材电子版3.docx

上传人:大张伟 文档编号:11659265 上传时间:2021-08-28 格式:DOCX 页数:21 大小:72.10KB
返回 下载 相关 举报
北航《精通matlab65》教材电子版3.docx_第1页
第1页 / 共21页
北航《精通matlab65》教材电子版3.docx_第2页
第2页 / 共21页
北航《精通matlab65》教材电子版3.docx_第3页
第3页 / 共21页
北航《精通matlab65》教材电子版3.docx_第4页
第4页 / 共21页
北航《精通matlab65》教材电子版3.docx_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《北航《精通matlab65》教材电子版3.docx》由会员分享,可在线阅读,更多相关《北航《精通matlab65》教材电子版3.docx(21页珍藏版)》请在三一文库上搜索。

1、第三章字符串.元胞和构架数组MATLAB 6.x版的内建数据类型(Built-in data type僦有5种以上,此外还有许多其他 专门设计的类 (Class),如符号类.内联函数类、控制工具包中的线性时不变模型类.神经网络类等。就程序设讣而言,MATLAB 6.x版采用了面向对象编程技术。数据和编程的改变使用声能更简捷而自然地解决复杂的计算问题(如符号计算 问题、多变量控制系统问题、神经网络问题)。本章内容根据MATLAB6.5编写,但绝大部分内容适用于其他 MATLAB6.X 版本。第二章介绍了数值数组(Numeric Army),这是读者比较熟悉的数据类型。本章将集中讲述另外三类数据:

2、 字符串数组(Character String Array)、元胞数组(Cell array)和构 架数组(Stmcture array) 它们之间的基本 差别见表3。表3四种数据类型基本构成比较表数组类型基本组分组分内涵基本组分占用字节数数值数组teM双精度实数标量或双精度复数标816字符串数组百字符2元胞数组元胞可以存放任何类型、任何大 小的 数据。不泄构架数组构架只有挂接在构架上的“域”才能 存放数据。数据可以是 任何类 型、任何大小。不定3.1 字符串数组3.1.1 字符串入门【例3.1.1-1 先请读者实际操作本例,以体会数值疑与字符串的区别。 cleara=12345.6789cl

3、ass(a)a s=size(a) a =1.2346e+004ans = doublea-I1b=S-class(b)b s=size(b)bu=sans =charb_s =1 1whosNameSizeBytes ClassIxi8 double array16 double array8 char array2 char array16 double array50 bytes1x2ans b1x4b1x11x2Grand total is 10 elements using3 _L 2串数组的属性和标识【例3.1.2-1本例演示:串的基本属性、标识和简单操作。(Da=1 This i

4、s an example a =This is an example (2)size(a) ans =119(3) al4=a(l:4) ra=a(end:-l:l) al4 = Thisra = elpmaxe na si sihTColumns 1 through84104105121153210511532Columns 13 through191209710311210810146(4)ascii a=double(a) ascii_a =97110101char(ascii a)ans =This is an example (5)w=find(a=1 a ,&a=1z,); asc

5、ii a(w)=ascii a(w)-32; char(ascii a) ans =THIS IS AN EXAMPLE-(6)这是一个算例。-;A s=size(A)A56=A(5 61)ASCH A=double(A)A s =1 7A5 6 =算例ASC11_A =Columns 1 through 6 54754Column 7413795191153947473505219549405char(ASCHAA)ans =这是个算例。(7)b=* Example 1 3 1 - 2-1 b =Example (3. 1- 2-11(8)ab=a(l:7) , 4ab =This is E

6、xample 3 1 - 2-113.L3复杂串数组的创建3.1.3.1 多行串数组的直接创建【例3.1.3.1-1多行串数组的直接输入示例。 clearS=|* This string array 11 has multipie rows - f|s =This string arrayhas multiple rov/s size(S) ans =2 183.13.2利用串操作函数创建多行串数组【例3.1.321 演示:用专门函数char, str2mat , strvcat创建多行串数组示例Sl=char。This string array 1 , 1 has two rows ) 51

7、 =This siring array has two rov;s S2=str2mat (这J字符 J串数组 z i z1由4行组成)52 =这字符 串数组由4行组成S3=strvcat (这,厂字符-J串数组J八J由4行组成r ) 53 =这字符 串数组由4行组成size (S3) ans =3.13.3转换函数产生数码字符串【例3.3.3-1 最常用的数组/字符串转换函数int2str, nuni2str, mat2str示例。 (1)A=eye(2,4);A_strl=int2str (A)A-strl =0000 100(2)rand(! state 1 z 0)B=rand(2,4

8、);B3=num2str(B z 3)B3 =0.950.6070.8910.4560.2310.4860.7620.0185(3)B_str=mat2str(B.4)B-str =10.3501 0.6068 0.8913 0.4565;0.2311 0.486 0.7621 0.0185Expression=* exp(- zB str1) ,;eval(Expression) ans =0.38670.54510.41010.63350.79370.61510.46670.9817【例3.133-2综合例题:在MATLAB讣算生成的图形上标出图名和最大值点坐标。a=2;w=3;t=0:0

9、.01:10;y=exp(-a*t)- *sin(w*t);|y maxri max=max(y);znum2str(t(i_max);,y= Jnum2str (y_max);max lext=oharCmaximum,l textzy text); % - 一 一tit=1 y=exp(-1 znum2str(a)f1 t)*sin(1 znum2str( w)11)11;plot(t.zeros(size(t)Jk,) hold onplot(tzyz 0)plol(t(Lmax),Y_max, 5. 1 , 1 MarkerSize1 z 20) text(t(i_max)+0 3,y

10、_max+0 - 05,max_texl) % title(tit) z xlabel(1 1 *) rylabeKy1) zhold off% % %图33 3.4利用元胞数组创建复杂字符串【例334- 1 元胞数组在存放和操作字符串上的应用。a= MATLAB 6.x;b= * includes new data types: 1 ;cl二Multidimensional array 1 ;c2= User-def inable data structure 1 ; c3= 1 Cell arrays ; c4= 1 character array 1 ; c5= 1 Function h

11、andle c=char(cl,c2.c3,c4,c5);C=a;b;c) ; disp(Cl:2) disp(I)disp(C3)MATLAB 6- M includes% %nev; data types:Multidimensional arrayUser-definable data structure . Cell arrayscharacter arrayFunction handle3.1.4串转换函数【例 3.1.4-1 fprintf, sprintf, sscanf 的用法示例。 rand(! state1 z 0) ;a=rand(2 /2); sl=num2str(a)

12、s s=sprintf( % - 10en z a) sT =0- 950130- 606840.231140.48598s_s =975012328515e-0012- 3113851357e-0016- 0684258354e-0014- 853824687le-001fprintf(! % , 5g ra)0.950130.231140.60684X0.48598s sscan=sscanf(s sZ%!1 r 3 z 2) s_sscan =一 0.95010.48600.23110- 60683.1.5串操作函数3.2元胞数组3.2.1 元胞数组的创建和显示3.2.1.1 元胞标识寻

13、访和内容编址寻访的不同3.2.1.2 元胞数组的创建和显示【例3.2.121本例演示:(2x2)元胞数组的创建。C_str=char (这是,J元胞数组创建算例1D ;R=reshape( 1:9 z 3 3);Cn=l+2i-S_sym=symC sin(-3*t)*exp(-t);(1)直接创建法之一A(lzl)=C_str) ;A(lz2)=R) ;A(2 rI)=Cn) ;A (2,2) = S_sym); A A =2x10 char3x3 double1- 0000+ 2- OOOOiJ1x1 sym J(2)直接创建法之二Blzl|=C_str;Blr 2)=R;B2 Z1 =C

14、n;B2 z2)=S_sym; celldisp(B) 3M= 这是元胞数组创建算例1B2,1=1.0000 + 2.0000iS1,2=1472 583 6932,2=sin (-3*t) *e:-:p (-t)3.2.2元胞数组的扩充、收缩和重组【例3.2.2-1元胞数组的扩充。(DC=cell(2);C (: zl)=char(1 Another 1 J text string1) C =|2xll char|11x10 double(2)AC=ACJAC=A;C| AC = 2x10 char 3x3 double 1x1 sym 2x11 char 1.0000+ 2.0000i1x

15、10 double|a r* - 2x10 char 3x3 double1,0000+2.0000i1x1 sym2x11 char1x10 double【例3.2.2-21 cellplot能用图形形彖化地表示元胞数组的内容。 cellplot(A_C, 1 legend*)(A_C取自上例)图321【例3.223】元胞数组的收缩和重组。(DA_C(3 八)=A_C =|2xl0 char 1,0000+2- 0000i)1x10 double3x3 double |lxl sym 11(2)R_A_C=reshape (A_C ,2,3) RAC 2x10 char1.0000+ 2-

16、OOOOi11x10 double 3x3 double1x1 sym11323元胞数组内容的调取【例3.2.3-1元胞数组内容的调取示例。(1) n=R_A_C(lz3) class (fl) fl =11x1 symans =cell(2) f2=R_A_Clz3)c!ass(f2)f2 =sin (3*t) *e:-:p (t)ans =sym(3)f3=R_A_Clzl)(:J1 256)f3 =这是元胞创建(4)f4,f5 zf6=deal(R_AC 1,3,4 ) f4 =这是元胞数组创建算例14321f5 =109f6 =1 42 53 6324元胞数组转换函【例3.2.4-1

17、常用元胞数组转换函示例。num2cell把数值数组转换成元胞数组1591317ci(:,:1)=(),95011 0.2311CK : : ,2)= 10.45650.0185|0- 6068J10.48600.82140.44470.83130- 76210- 6154J10- 79191|2xl double|2x1doubleC2(:, :,2)=2x1 double2x1doublerand( state 1 ,0);A=rand(2,3,2)Cl=num2cell(A)A( : , : ,1)=0.95010- 60680- 89130.23110.48600- 7621A(:,.y

18、20.45650.82140- 61540.01850.44470- 7913C 2 =nLim2 ce 11 (A, 1)C2(:,:,l)=C3=nLim2cell (A, 2,3) C3 =2x1 double2x1 double1x3x2 double1x3x2 double |(2)clear / x=zeros(4 f 5); x(:)=l:20 C4=mat2cell(x, 2 2, 3 2) celldisp(C4) X =34 C4 =2x3 2x3 C4(1 ,1)1C412,丁 3 4C4(1 ,2) 13 14C42 z2| 15 16610711812doubledo

19、uble5 96 107 118 12171819201418151916202x2 double2x2 double(3)D=cell2mat(C4( 1 z:)D =15926 10131714183-3构架数组331构架数组的创建和显示33.1.1直接创建法及显示【例3.3.1.M本例通过温室数据(包括温室夕八建和显不。容积、温度、湿度等)演示:单构架的创(Dgreen house name= 1 一号房;greenAhouse volume= 2000 立方米 ;green house parameter - temperalure=31 - 2green house - parame

20、ter humidity=62 - 1%30.431.628.729,731.130- 929- 6);%59.561.562, 061- 959- 257.5 ;%(2)显示“单构架”结构和内容green house greenjiouse =name :volume:,号房 r2000 paramete应方米,1x1struct |green house - parameter ans =temperature:2x4 doublehumidity:2x4 doublegreen house - parameter - temperature ans =31.200023.700030.4

21、00031.100031.600030.900028.700029- 6000【例3.3.1.1-2本例演示构架数组的创建和显示,并利用构架数组保存一个温室群的数据。 本例的运行以例331.1”为先导。(DgreenAhouse (2 f 3) name= f 六号房 (2) green house green_house = 2x3 struct arraywith fields: name volume% parametergreen house(2,3)ans =name :,六号房volume:!parameter:1% 33 JL 2利用构造函数创建构架数组例3.3.1.2-1利用构

22、造函数struct建立温室群的数据库。%a=cell(2,3);green house l=strucl(name,a,volume;a:parameler;a( 1,2) green_housej =2x3 struct array with fields: namevolume parameter(3)green house 2=s truct ( 1 name 1 ja.f1 volume , , 1 J parame ter 1 z ) green_house_2 =2x3 struct array vzith fields: name volumeparameter(4) green

23、 hopuse 3(2,3)=struet(1 name 1 z | z 1 volume 1 t f parameter 1 z )% green_hopuse_3 = 2x3 struct array v;ith fields:name volume parameter(5)al=f7 号房-;a2= -3200 立方米 ;green house 4(2,3)=struct(l name 1 f alz 1 volume 1 z a2 1 parameter , ,) ; % T6=31.2z3074z31.6,28.7;29.7,3 l.lz30.9,29.6J;green house

24、4(2,3)* parameter - temperature=T6;green house 4 green_house_4 = 2x3 struct array with fields:name volume parameter332构架数组域中内容的调取和设置【例3.3.2-1 本例目的:一,演示函数fieldnames, getfield , setfield的使用方法;二让读者感受到构架 数组对应用工具包的影响;三,演示stnict函数把“对象”转换为构架的应用。本例为获得一个演练的构 架,借助Toolbox control工具包中的tf函数,先产生一个用传递-32函数描写的LTI线性

25、时不变2输入2输出系统J +$ + 1 45 + 11+ 2s + 2$ +1 s(1)Stf=tf(3,2;4132741 1 1;(12 21,1 0)Transfer function from input 1 to output 3# 1:sA2 + 3 s + 24 S 4- 1# 2:sA3 + 2 sA2 + 2 s + 1Transfer function from input 2 to output # 1:sA2 + 3 + 1(2)SSTF=struct(Stf) SSTF = num: 2x2 cell) den:2x2 cell)Variable:lshi: 1x1

26、Hi)(3)FN=fieldnames(SSTF) class(FN)FN =1 num1den12 Varia bUIti1ans = cell(4)FC=getield(SSTE;den2,l) FC1poly2str(FCl),V)FC =11x4 doubleans =122 1ans =sA3 + 2 sA2 + 2 s + 1(5)SSTF- num2zlSSTF=setfield(SSTFr,num, ,2/1 3 1 |);SSTF- num2zl ans =0041ans =1313.3.3构架数组操作深入33.3.1构架数组的扩充和收缩【例333.1-1本例演示构架数组SS

27、TF的扩充和收缩。(本例以例332-1的运行为基础。) size(SSTF) ans =1 1(2)SSTF(2,2)=struct( 1 )size(SSTF)SSTF =2x2 struct array v;ith fields: numdenVariableItians =(3)SSTF(lz:)=S22n=SSTF(lz2)- numzS22d=SSTF(lr2)- den printsys(S22nl,S22d(l)SSTF =1x2 struct array v;ith fields:num den Variable ItiS22n =11x2 doubleS22d =1x2 do

28、ublenum/den =13+ 13332增添域和删除域【例3.332-1 对构架数组green_house进行域的增添和删减操作。(Dclear, for k=l: 10 ;department (k)- numbei?= 1 No - 1 , int2str (k) ;end department department =1x10 struct array v;ith fields: number(2)department(l)- teacher=40;department(l)- student=300; department(l)- PC computer=40;department

29、department =1x10 struct array v;ith fields:number teacher student PCAcomputer(3)department(2)- teacher - male=35;department(2) teacher D2T=department (2)- teacher &笫 2 构架 teacher 域包含 两,宁域DlT=department (1) teacher%第 1 构架 teacher 域仅是一个数D2T =male: 35 female: 13D1T =40(4)department(2)- teacher=rmfield(

30、department(2)- teachermale *); department(2)- teacher ans =female: 13(5)department=rmield(department,student,)department =1x10 struct array vzith fields:number teacher PCAcomputerdepartment=rmfield(department f teacher1 PC computer 1) department =1x10 struct array vzith fields: number33.33数值运算操作和函数对

31、构架数组的应用【例3.3.33-1 数值运算操作和函数在构架域上的作用。nex=5;for k=l:n_ex rex(k)- f=(k-1 )un_ex+ 1:5;end exex =l:-:5 stnict array v;ith fields: f%disp( blanks (10) 构架域中内容) for k=l:n_exzdisp(ex(k) f)zend构架域中内容1乙3456789101112131415161718192021232425class(ex(l)- )ans = double % sum f=zeros( 1,5); for k=l:n ex, sum f=sLim

32、 f+ex (k) f ;endz sum f sum_f = n5560657075% disp( blanks (20) Aex.f 的平方根值 T) fork=l:n_ex,disp(sqrt(ex(k) f)rendex,f的平方根值1.00001.41421.73212.00002. 23612.44952.64582.82843.00003 16233.31663 46413- 60563.74173.87304.00004- 12314.24264- 35894.47214.58264.69044 73584- 89905.00003.3.4构架数组和元胞数组之间的转换【例 3.

33、3.4-1 指令 struct2cell 和 cell2struct 的使用。(Dfor k=l:5,ex(k)- s=| No - 1 int2str(k) ;ex (k)- f=(k-l)*5+ 1:5 ;end(2)fprintf ( %sn 1 r 1 ex - s 域的内容【);fprin(1%s,blanks (4)for k=l:5;fprintf(1 %s r ex (k) s blanks(l)J) ;endfprintf ( 1 %sn 1 ,blanks (1) fprintf ( 1 %sn 1 Jex f 域的内容)for k=l:5;disp(ex(k)* f);e

34、ndex.s域的内容No- 1No.2No- 3No- 4 No.5域的内容1345678910111213141516171819202122232425(3)C ex=s(ex);size(C ex)fprintf, C_ex 1,1,1 .blanks (3)fprintf(1%5gV,C_ex2,l,l) ans =215No.l12345(4)FS=iS_chari;】F_num , ;EXl=cell2struct(C_ex,FS, 1) EXI =1x5 struct array v;ith fields: S_charF_numEXI(1 亍ans =S_char: No. V

35、 FAnum: 12345(5)EX2=cell2struct(C_ex 2)EX2 =2x5 struct array v;ith fields:xx(6)J y3 ; y4 ,) ;EX3=cell2s truot (C_ex, YY, 3)YY=s trvcaEX3 =2x1 struct array with fields: yi y2 y3 y4 y5EX3(1) ans =yl: No.l1y2: No- 2-y3 : 1 No.3y4:, No- 4-y5 : 1 No.5EX3(2) ans =yi : y2: y3: y4 : y5 :1 23456 789101112131

36、41516171819202122232425【例3.3.4-21带子域的构架数组转换为元胞数组。本例中的ex构架数组由例33.4-1生成,然后再运行以下 程序。ex (lzl)a sans =No- 1 %ex (1,!) s , sub= SUB I1 ; ex (3 zl) .s.sub=* SUB 31 ; ex (3,1) s- nvun=l/3;ex (lzl)e sans =sub: 1 SUB I1ex (3,1)* sans =sub: 1 SUB 31num: 0.3333C ex sub=strue(ex) C_e:-:_sub (:, : 1)=1x1 struct)J1x5 double| JC_e:-:_sub (: z, 2)=一tno . 2 1x5 doubleC_ex_sub, 3)=一No. 3 1J1x5 doubleJ1x1 struct |ILI11 flTN0. 4 11x5 doubleC_ex_sub(:zz 5)=TNo. 5 111x5 doublesize (C_ex_sub) ans =235C ex sub Izlzl aHs =sub: 1 SUB 11 C ex sub 1/3/1/ ans = sub: SUB 3 num: 0- 33333.4关于数据类型的归纳性说明

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1