实验三四MATLAB字符串元胞和构架数组.docx
《实验三四MATLAB字符串元胞和构架数组.docx》由会员分享,可在线阅读,更多相关《实验三四MATLAB字符串元胞和构架数组.docx(16页珍藏版)》请在冰点文库上搜索。
实验三四MATLAB字符串元胞和构架数组
实验三(四)字符串数组、元胞数组和结构数组
一、实验目的
在复习并练习课堂教学内容的基础上,应掌握高级数据的各种运算,以及运算中常用到的函数的用法。
二、实验内容:
1字符串数组及其运算;
2元胞数组及其运算;
3结构数组及其运算;
三、实验与练习内容
数值数组、字符串数组(CharacterStringArray)、元胞数组(Cellarray)和结构数组(Structurearray)。
它们之间的基本差别见表1。
表1四种数据类型基本构成比较表
数组类型
基本组分
组分内涵
基本组分占用字节数
数值数组
数值
双精度实数标量
或双精度复数标量
8
16
字符串数组
字符
任意字符
2
元胞数组
元胞
可以存放任何类型、任何大小的数据
不定
结构数组
结构
只有挂接在结构上的“域”才能存放数据。
数据可以是任何类型、任何大小。
不定
1.字符串数组
1.1字符串入门
【练习】先请实际操作本例,以体会数值量与字符串的区别。
clear
a=12345.6789
class(a)
ans=
double
a_s=size(a)
a_s=
11
b='S'
class(b)
ans=
char
b_s=size(b)
b_s=
11
whos
NameSizeBytesClass
a1x18doublearray
a_s1x216doublearray
ans1x48chararray
b1x12chararray
b_s1x216doublearray
Grandtotalis10elementsusing50bytes
1.2串数组的属性和标识
【练习】串的基本属性、标识和简单操作。
(1)a='Thisisanexample.'
(2)size(a)ans=
119
(3)a14=a(1:
4)
ra=a(end:
-1:
1)
a14=this
ra=.elpmaxenasisiht
(4)ascii_a=double(a)
char(ascii_a)
ascii_a=
Columns1through8
1161041051153210511532
Columns9through16
971103210112097109112
Columns17through19
10810146
ans=thisisanexample.
(5)w=find(a>='a'&a<='z')
w=
Columns1through8
123467910
Columns9through15
12131415161718
ascii_a(w)=ascii_a(w)-32;
(6)A='这是一个算例。
';
A_s=size(A)
A56=A([56])
ASCII_A=double(A)
char(ASCII_A)
A_s=size(A)
A56=A([56])
ASCII_A=double(A)
char(ASCII_A)
A_s=
17
A56=
算例
ASCII_A=Columns1through4
54754519115394747350
Columns5through7
521954940541379
ans=
这是一个算例。
(7)b='Example''3.1.2-1'''
(8)ab=[a(1:
7),'',b,'.']
ab=
thisisExample'3.1.2-1'
1.3复杂串数组的创建
1.3.1多行串数组的直接创建
【练习】多行串数组的直接输入。
clear
S=['Thisstringarray'
'hasmultiplerows.']
size(S)
ans=
218
1.3.2利用串操作函数创建多行串数组
【练习】用专门函数char,str2mat,strvcat创建多行串数组。
S1=char('Thisstringarray','hastworows.')
S2=str2mat('这','字符','串数组','','由4行组成')
S3=strvcat('这','字符','串数组','','由4行组成')
size(S3)
1.3.3转换函数产生数码字符串
【练习】最常用的数组/字符串转换函数int2str,num2str,mat2str。
(1)A=eye(2,4);
A_str1=int2str(A)
A_str1=
1000
0100
(2)rand('state',0)
B=rand(2,4);
B3=num2str(B,3)
B3=
0.950.6070.8910.456
0.2310.4860.7620.0185
(3)B_str=mat2str(B,4)
Expression=['exp(-',B_str,')'];
eval(Expression)
B_str=
[0.95010.60680.89130.4565;0.23110.4860.76210.0185]
ans=
0.38670.54510.41010.6335
0.79370.61510.46670.9817
1.3.4利用元胞数组创建复杂字符串
【练习】元胞数组在存放和操作字符串上的应用。
a='MATLAB6.x';
b='includesnewdatatypes:
';
c1='◆Multidimensionalarray';
c2='◆User-definabledatastructure';
c3='◆Cellarrays';
c4='◆Characterarray';
c5='◆Functionhandle';
c=char(c1,c2,c3,c4,c5);
c=
◆Multidimensionalarray
◆User-definabledatastructure
◆Cellarrays
◆Characterarray
◆Functionhandle
C={a;b;c};
C=
'MATLAB6.x'
'includesnewdatatypes:
'
[5x30char]
disp([C{1:
2}])
MATLAB6.xincludesnewdatatypes:
disp('')
空
disp(C{3})
◆Multidimensionalarray
◆User-definabledatastructure
◆Cellarrays
◆Characterarray
◆Functionhandle
1.4串转换函数
【练习】fprintf,sprintf,sscanf的用法。
rand('state',0);
a=rand(2,2);
s1=num2str(a)
s_s=sprintf('%.10e\n',a)
fprintf('%.5g\\',a)
s_sscan=sscanf(s_s,'%f',[3,2])
s1=
0.950130.60684
0.231140.48598
s_s=
9.5012928515e-001
2.3113851357e-001
6.0684258354e-001
4.8598246871e-001
0.95013\0.23114\0.60684\0.48598\
s_sscan=
0.95010.4860
0.23110
0.60680
2元胞数组
2.1元胞数组的创建和显示
2.1.1元胞标识寻访和内容编址寻访的不同
2.1.2元胞数组的创建和显示
C_str=char
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};
A
(2)直接创建法之二
B{1,1}=C_str;B{1,2}=R;B{2,1}=Cn;B{2,2}=S_sym;
celldisp(B)
2.2元胞数组的扩充、收缩和重组
【练习】元胞数组的扩充。
(1)C=cell
(2);
C(:
1)={char('Another','textstring');10:
-1:
1}
C=
[2x11char][]
[1x10double][]
(2)AC=[AC]
A_C=[A;C]
【练习】cellplot能用图形形象化地表示元胞数组的内容。
(A_C取自上例)
cellplot(A_C,'legend')
【练习】元胞数组的收缩和重组。
(1)A_C(3,:
)=[]
(2)R_A_C=reshape(A_C,2,3)
2.3元胞数组内容的调取
【练习】元胞数组内容的调取。
(1)f1=R_A_C(1,3)
class(f1)
(2)f2=R_A_C{1,3}
class(f2)
(3)f3=R_A_C{1,1}(:
[1256])
(4)[f4,f5,f6]=deal(R_A_C{[1,3,4]})
2.4元胞数组转换函数
【练习】常用元胞数组转换函数。
(1)num2cell把数值数组转换成元胞数组
rand('state',0);
A=rand(2,3,2)
C1=num2cell(A)
C2=num2cell(A,1)
C3=num2cell(A,[2,3])
A(:
:
1)=
0.95010.60680.8913
0.23110.48600.7621
A(:
:
2)=
0.45650.82140.6154
0.01850.44470.7919
C1(:
:
1)=
[0.9501][0.6068][0.8913]
[0.2311][0.4860][0.7621]
C1(:
:
2)=
[0.4565][0.8214][0.6154]
[0.0185][0.4447][0.7919]
C2(:
:
1)=
[2x1double][2x1double][2x1double]
C2(:
:
2)=
[2x1double][2x1double][2x1double]
C3=
[1x3x2double]
[1x3x2double]
用函数size和命令whos来查验
whos
NameSizeBytesClass
A2x3x296doublearray
A561x24chararray
ASCII_A1x756doublearray
A_s1x216doublearray
A_str12x1040chararray
B2x464doublearray
B32x35140chararray
B_str1x56112chararray
C2x2252cellarray
C12x3x2816cellarray
C21x3x2456cellarray
C32x1216cellarray
C_str0x00chararray
Cn1x116doublearray(complex)
Expression1x62124chararray
R3x372doublearray
S2x1872chararray
S12x1768chararray
S_sym1x1158symobject
a2x232doublearray
a141x48chararray
a_s1x216doublearray
ab1x2856chararray
ans2x464doublearray
ascii_a1x19152doublearray
b1x2448chararray
b_s1x216doublearray
c5x30300chararray
c11x2346chararray
c21x3060chararray
c31x1224chararray
c41x1632chararray
c51x1632chararray
ra1x1938chararray
s12x1976chararray
s_s1x72144chararray
s_sscan3x248doublearray
w1x15120doublearray
Grandtotalis917elementsusing4090bytes
size(A)
ans=
232
>>size(C1)
ans=
232
>>size(C2)
ans=
132
>>size(C3)
ans=
21
(2)clear,x=zeros(4,5);
x(:
)=1:
20
C4=mat2cell(x,[22],[32])
celldisp(C4)
x=
1591317
26101418
37111519
48121620
C4=
[2x3double][2x2double]
[2x3double][2x2double]
C4{1,1}=
159
2610
C4{2,1}=
3711
4812
C4{1,2}=
1317
1418
C4{2,2}=
1519
1620
(3)D=cell2mat(C4(1,:
))
D=
1591317
26101418
3结构数组
3.1构架数组的创建和显示
3.2直接创建法及显示
【练习】通过温室数据(包括温室名、容积、温度、湿度等)演示:
单构架的创建和显示。
(1)green_house.name='一号房';
green_house.volume='2000立方米';
green_house.parameter.temperature=[31.230.431.628.7…
29.731.130.929.6];
green_house.parameter.humidity=[62.159.557.761.5…
62.061.959.257.5];
(2)显示“单构架”结构和内容
green_house
green_house.parameter
green_house.parameter.temperature%
【练习】构架数组的创建和显示,并利用构架数组保存一个温室群的数据。
下面的运行以上述练习为先导。
(1)green_house(2,3).name='六号房';
(2)green_house
green_house(2,3)
3.3利用构造函数创建构架数组
【练习】利用构造函数struct,建立温室群的数据库。
(1)a=cell(2,3);
green_house_1=struct('name',a,'volume',a,'parameter',a(1,2))
(2)green_house_2=struct('name',a,'volume',[],'parameter',[])
(3)green_hopuse_3(2,3)=struct('name',[],'volume',[],'parameter',[])
(4)a1={'六号房'};a2={'3200立方米'};
green_house_4(2,3)=struct('name',a1,'volume',a2,'parameter',[]);
T6=[31.2,30.4,31.6,28.7;29.7,31.1,30.9,29.6];
green_house_4(2,3).parameter.temperature=T6;
green_house_4
四、实验报告
通过这次试验,我知道矩阵只能存放若干单一类型的数据,且不能存放矩阵(即矩阵元素不能是矩阵),也就是说矩阵只适合同时处理若干相同类型的数据。
Matlab编程有时需要突破这种局限,同时处理不同类型的数据,或者处理更高层面的数据时需要把若干矩阵作为“元素”整体处理(当然,如果是同样大小的若干矩阵可以采用高一维的矩阵),就需要元胞数组了。
做个比喻的话,元胞数组就好比“橱柜”,由若干个“抽屉”构成,每个“抽屉”里可以存放任何“东西”(数据类型,包括矩阵)。
这为Matlab编程提供了极大的方便性和灵活性。
成绩:
实验日期和地点:
东港学院
指导教师:
宁伟