MATLAB教案ch04字符串数组元胞数组和构架数组Word文档格式.docx
- 文档编号:22538231
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:29
- 大小:51.47KB
MATLAB教案ch04字符串数组元胞数组和构架数组Word文档格式.docx
《MATLAB教案ch04字符串数组元胞数组和构架数组Word文档格式.docx》由会员分享,可在线阅读,更多相关《MATLAB教案ch04字符串数组元胞数组和构架数组Word文档格式.docx(29页珍藏版)》请在冰豆网上搜索。
8410410511532105115329711032101
Columns13through19
1209710911210810146
char(ascii_a)%把ASCII码变回字符串
(5)对字符串ASCII码数组的操作
%使字符串中字母全部大写
w=find(a>
='
a'
&
a<
z'
);
%找出串数组a中,小写字母的元素位置。
ascii_a(w)=ascii_a(w)-32;
%大小写字母ASCII值差32.用数值加法改变部分码值。
char(ascii_a)%把新的ASCII码翻成字符
THISISANEXAMPLE.
(6)中文字符串数组
A='
这是一个算例。
'
;
%创建中文字符串
A_s=size(A)%串数组的大小
A56=A([56])%取串的子数组
ASCII_A=double(A)%获取ASCII码
A_s=
17
A56=
算例
ASCII_A=
Columns1through6
547545191153947473505219549405
Column7
41379
char(ASCII_A)%把ASCII码翻译成字符
(7)创建带单引号的字符串
Example'
4.1.2-1'
(8)由小串构成长串
ab=[a(1:
7),'
'
b,'
.'
]%这里第2个输入为空格串
ab=
ThisisExample'
.
4.1.3复杂串数组的创建
4.1.3.1多行串数组的直接创建
【*例4.1.3.1-1】多行串数组的直接输入示例。
clear
S=['
Thisstringarray'
hasmultiplerows.'
]
S=
Thisstringarray
hasmultiplerows.
size(S)
218
4.1.3.2利用串操作函数创建多行串数组
【*例4.1.3.2-1】演示:
用专门函数char,str2mat,strvcat创建多行串数组示例。
S1=char('
Thisstringarray'
'
hastworows.'
)
S1=
Thisstringarray
hastworows.
S2=str2mat('
这'
字符'
串数组'
由4行组成'
S2=
这
字符
串数组
由4行组成
S3=strvcat('
)%“空串”会产生一个空格行
S3=
size(S3)
55
4.1.3.3转换函数产生数码字符串
【*例4.1.3.3-1】最常用的数组/字符串转换函数int2str,num2str,mat2str示例。
(1)int2str把整数数组转换成串数组(非整数将被四舍五入园整后再转换)
A=eye(2,4);
%生成一个
数值数组
A_str1=int2str(A)%转换成
串数组。
请读者自己用size检验。
A_str1=
1000
0100
(2)num2str把非整数数组转换为串数组(常用于图形中,数据点的标识)
rand('
state'
0)
B=rand(2,4);
%生成数值矩阵
B3=num2str(B,3)%保持3位有效数字,转换为串
B3=
0.950.6070.8910.456
0.2310.4860.7620.0185
(3)mat2str把数值数组转换成输入形态的串数组(常与eval指令配用)
B_str=mat2str(B,4)%保持4位有效数字,转换为“数组输入形式”串
B_str=
[0.95010.60680.89130.4565;
0.23110.4860.76210.0185]
Expression=['
exp(-'
B_str,'
)'
];
%相当于指令窗写一个表达式exp(-B_str)
eval(Expression)%把exp(-B_str)送去执行
0.38670.54510.41010.6335
0.79370.61510.46670.9817
【*例4.1.3.3-2】综合例题:
在MATLAB计算生成的图形上标出图名和最大值点坐标。
clear%清除内存中的所有变量
a=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))];
%生成最大值点的横坐标字符串<
7>
y_text=['
y='
num2str(y_max)];
%生成最大值点的纵坐标字符串<
8>
max_text=char('
maximum'
t_text,y_text);
%生成标志最大值点的字符串<
9>
%生成标志图名用的字符串
tit=['
y=exp(-'
num2str(a),'
t)*sin('
num2str(w),'
t)'
%<
11>
plot(t,zeros(size(t)),'
k'
)%画纵坐标为0的基准线
holdon%保持绘制的线不被清除
plot(t,y,'
b'
)%用兰色画y(t)曲线
plot(t(i_max),y_max,'
r.'
MarkerSize'
20)%用大红点标最大值点
text(t(i_max)+0.3,y_max+0.05,max_text)%在图上书写最大值点的数据值<
16>
title(tit),xlabel('
t'
),ylabel('
y'
),holdoff%书写图名、横坐标名、纵坐标名
图4.1.3.3-1字符串运用示意图
4.1.3.4利用元胞数组创建复杂字符串
【*例4.1.3.4-1】元胞数组在存放和操作字符串上的应用。
MATLAB5'
introducesnewdatatypes:
%创建单行字符串a,b
c1='
◆Multidimensionalarray'
c2='
◆User-definabledatastructure'
c3='
◆Cellarrays'
c4='
◆Characterarray'
c=char(c1,c2,c3,c4);
%创建多行字符串c
C={a;
b;
c};
%利用元胞数组存放长短不同的字符串<
5>
disp([C{1:
2}])%显示前两个元胞中的字符内容<
6>
disp('
)%显示一行空白
disp(C{3})%显示第3个元胞中的字符内容<
MATLAB5introducesnewdatatypes:
◆Multidimensionalarray
◆User-definabledatastructure
◆Cellarrays
◆Characterarray
4.1.4串转换函数
【*例4.1.4-1】fprintf,sprintf,sscanf的用法示例。
0);
a=rand(2,2);
%产生
随机阵
s1=num2str(a)%把数值数组转换为串数组
s_s=sprintf('
%.10e\n'
a)%10数位科学记述串,每写一个元素就换行。
s1=
0.950130.60684
0.231140.48598
s_s=
9.5012928515e-001
2.3113851357e-001
6.0684258354e-001
4.8598246871e-001
fprintf('
%.5g\\'
a)%以5位数位最短形式显示。
不能赋值用
0.95013\0.23114\0.60684\0.48598\
s_sscan=sscanf(s_s,'
%f'
[3,2])%浮点格式把串转换成成
数值数组。
s_sscan=
0.95010.4860
0.23110
0.60680
4.1.5串操作函数
4.2元胞数组
4.2.1元胞数组的创建和显示
4.2.1.1元胞标识寻访和内容编址寻访的不同
4.2.1.2元胞数组的创建和显示
【*例4.2.1.2-1】本例演示:
元胞数组的创建。
C_str=char('
这是'
元胞数组创建算例1'
%产生字符串
R=reshape(1:
9,3,3);
%产生
实数阵R
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%显示元胞数组
A=
[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}=
这是
元胞数组创建算例1
B{2,1}=
1.0000+2.0000i
B{1,2}=
147
258
369
B{2,2}=
-sin(3*t)*exp(-t)
4.2.2元胞数组的扩充、收缩和重组
【*例4.2.2-1】元胞数组的扩充。
(1)利用cell指令创建元胞数组
C=cell
(2);
%预设
空元胞数组
C(:
1)={char('
Another'
textstring'
10:
1}%对第一列元胞赋值
C=
[2x11char][]
[1x10double][]
(2)元胞数组的“列”扩充和“行”扩充
AC=[AC]%空格(或逗号)利用来分隔列
A_C=[A;
C]%分号利用来分隔“行”
AC=
[2x10char][3x3double][2x11char][]
[1.0000+2.0000i][1x1sym][1x10double][]
A_C=
[2x10char][3x3double]
[1.0000+2.0000i][1x1sym]
【*例4.2.2-2】cellplot能用图形形象化地表示元胞数组的内容。
(A_C取自上例)
cellplot(A_C,'
legend'
图4.2.2-1元胞数组A_C的形象化结构图
【*例4.2.2-3】元胞数组的收缩和重组。
(1)元胞数组的收缩
A_C(3,:
)=[]%删除第3行,使A_C成为
的元胞数组
(2)把A_C重组成
元胞数组R_A_C
R_A_C=reshape(A_C,2,3)
R_A_C=
[2x10char][1x10double][1x1sym]
[1.0000+2.0000i][3x3double][]
4.2.3元胞数组内容的调取
【*例4.2.3-1】元胞数组内容的调取示例。
(1)取一个元胞
f1=R_A_C(1,3)%使用园括号寻访得到的是元胞,而不仅是内容。
class(f1)
f1=
[1x1sym]
cell
(2)取一个元胞的内容
f2=R_A_C{1,3}%用花括号寻访取得内容
class(f2)
f2=
sin(-3*t)*exp(-t)
sym
(3)取元胞内的子数组
f3=R_A_C{1,1}(:
[1256])%注意三种括号的不同用途
%取第1行第1列元胞内容中的第1、2、5、6列。
f3=
元胞创建
(4)同时调取多个元胞内容
[f4,f5,f6]=deal(R_A_C{[1,3,4]})%取三个元胞内容,赋值给三个变量
f4=
f5=
10987654321
f6=
369
4.3构架数组
4.3.1构架数组的创建和显示
4.3.1.1直接创建法及显示
【*例4.3.1.1-1】本例通过温室数据(包括温室名、容积、温度、湿度等)演示:
单构架的创建和显示。
(1)直接对域赋值法产生“单构架”,即
构架数组。
green_house.name='
一号房'
%构架的域由(构架名).(域名)标识。
<
1>
green_house.volume='
2000立方米'
%<
2>
green_house.parameter.temperature=[31.230.431.628.7
29.731.130.929.6];
%<
3>
green_house.parameter.humidity=[62.159.557.761.5
62.061.959.257.5];
%<
4>
(2)显示“单构架”结构和内容
green_house%显示单构架结构<
green_house=
name:
volume:
parameter:
[1x1struct]
green_house.parameter%显示parameter域中内容<
ans=
temperature:
[2x4double]
humidity:
[2x4double]
green_house.parameter.temperature%显示temperature域中的内容<
31.200030.400031.600028.7000
29.700031.100030.900029.6000
【*例4.3.1.1-2】本例演示构架数组的创建和显示,并利用构架数组保存一个温室群的数据。
本例的运行以例4.3.1.1-1为先导。
(1)直接对域赋值法“构架数组”。
green_house(2,3).name='
六号房'
%产生
构架数组<
(2)显示构架数组的结构和构架元素的内容
green_house%显示构架数组的结构:
构架行列数;
构架的域。
2x3structarraywithfields:
name
volume
parameter
green_house(2,3)%显示元素构架的结构:
域;
是否有子域<
[]
[]
4.3.1.2利用构造函数创建构架数组
【*例4.3.1.2-1】利用构造函数struct,建立温室群的数据库。
(1)struct预建空构架数组方法之一
a=cell(2,3);
%创建
空元胞数组
green_house_1=struct('
name'
a,'
volume'
parameter'
a(1,2))%<
green_house_1=
(2)struct预建空构架数组方法之二
green_house_2=struct('
[],'
[])%<
green_house_2=
parameter
(3)struct预建空构架数组方法之三
green_hopuse_3(2,3)=struct('
[])%<
green_hopuse_3=
(4)struct创建构架数组方法之四
a1={'
};
a2={'
3200立方米'
green_house_4(2,3)=struct('
a1,'
a2,'
[]);
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
4.3.2构架数组域中内容的调取和设置
【*例4.3.2-1】本例目的:
一,演示函数fieldnames,getfield,setfield的使用方法;
二,让读者感受到构架数组对应用工具包的影响;
三,演示struct函数把“对象”转换为构架的应用。
本例为获得一个演练的构架,借助Toolboxcontrol工具包中的tf函数,先产生一个用传递函数描写的LTI线性时不变2输入2输出系统
。
(1)产生2输入2输出系统的传递函数阵“对象”
Stf=tf({3,2;
[41],1},{[132],[111];
[1221],[10]})
Transferfunctionfrominput1tooutput...
3
#1:
-------------
s^2+3s+2
4s+1
#2:
---------------------
s^3+2s^2+2s+1
Transferfunctionfrominput2tooutput...
2
-----------
s^2+s+1
1
-
s
(2)为本例演示,把上述的LTI对象Stf转换为构架
SSTF=struct(Stf)%把对象转换成构架,并显示构架的组成
SSTF=
num:
{2x2cell}
den:
Variable:
s'
lti:
[1x1lti]
(3)获得构架数组SSTF的域名
FN=fieldnames(SSTF)%获得域名元胞数组FN
class(FN)%检查FN的类别
FN=
num'
den'
Variable'
lti'
(4)获取SSTF.den(2,1)域的内容
FC=getfield(SSTF,'
{2,1})%相当于FC=SSFT.den(2,1)
FC{1}%与celldisp(FC)的作用大致相当
poly2str(FC{1},'
),%为了把多项式显示成习惯的形式
FC=
[1x4double]
1221
s^3+2s^2+2s+1
(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MATLAB 教案 ch04 字符串 数组 构架