第三章 MATLAB字符串数组、元胞数组和构架数组
.1 字符串数组
.1.1 字符串入门
【例3.1-1】先请读者实际操作本例,以体会数值量与字符串的区别。
clear
a=12345.6789
class(a)
a_s=size(a)
a =
1.2346e+004
ans =
double
a_s =
1 1
b='S'
class(b)
b_s=size(b)
b =
S
ans =
char
b_s =
1 1
whos
Name Size Bytes Class
a 1x1 8 double array
a_s 1x2 16 double array
ans 1x4 8 char array
b 1x1 2 char array
b_s 1x2 16 double array
Grand total is 10 elements using 50 bytes
.1.2 串数组的属性和标识
【例3.1-2】本例演示:串的基本属性、标识和简单操作。
a='This is an example.'
a =
This is an example.
size(a)
ans =
1 19
a14=a(1:4)
ra=a(end:-1:1)
a14 =
This
ra =
.elpmaxe na si sihT
ascii_a=double(a)
ascii_a =
Columns 1 through 12
84 104 105 115 32 105 115 32 97 110 32 101
Columns 13 through 19
120 97 109 112 108 101 46
char(ascii_a)
ans =
This is an example.
w=find(a>='a'&a<='z');
ascii_a(w)=ascii_a(w)-32;
matlab数组赋值char(ascii_a)
ans =
THIS IS AN EXAMPLE.
A='这是一个算例。';
A_s=size(A)
A56=A([5 6])
ASCII_A=double(A)
A_s =
1 7
A56 =
算例
ASCII_A =
Columns 1 through 6
54754 51911 53947 47350 52195 49405
Column 7
41379
char(ASCII_A)
ans =
这是一个算例。
b='Example ''3.1.2-1'''
b =
Example '3.1.2-1'
ab=[a(1:7),' ',b,' .']
ab =
This is Example '3.1.2-1' .
.1.3 复杂串数组的创建
10 一 多行串数组的直接创建
【例3.1-3】多行串数组的直接输入示例。
clear
S=['This string array '
'has multiple rows.']
S =
This string array
has multiple rows.
size(S)
ans =
2 18
10 二 利用串操作函数创建多行串数组
【例3.1-4】演示:用专门函数char , str2mat , strvcat创建多行串数组示例。
S1=char('This string array','has two rows.')
S1 =
This string array
has two rows.
S2=str2mat('这','字符','串数组','由4行组成')
S2 =
这
字符
串数组
由4行组成
S3=strvcat('这','字符','串数组',' ','由4行组成')
S3 =
这
字符
串数组
由4行组成
size(S3)
ans =
5 5
10 三 转换函数产生数码字符串
【例3.1-5】最常用的数组/字符串转换函数int2str , num2str , mat2str 示例。
A=eye(2,4);
A_str1=int2str(A)
A_str1 =
1 0 0 0
0 1 0 0
rand('state',0)
B=rand(2,4);
B3=num2str(B,3)
B3 =
0.95 0.607 0.891 0.456
0.231 0.486 0.762 0.0185
B_str=mat2str(B,4)
B_str =
[0.9501 0.6068 0.8913 0.4565;0.2311 0.486 0.7621 0.0185]
Expression=['exp(-',B_str,')'];
eval(Expression)
ans =
0.3867 0.5451 0.4101 0.6335
0.7937 0.6151 0.4667 0.9817
【例3.1-6】综合例题:在MATLAB计算生成的图形上标出图名和最大值点坐标。(见图3.1-1)
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))];
y_text=['y=',num2str(y_max)];
max_text=char('maximum',t_text,y_text);
tit=['y=exp(-',num2str(a),'t)*sin(',num2str(w),'t)'];
plot(t,zeros(size(t)),'k')
hold on
plot(t,y,'b')
plot(t(i_max),y_max,'r.','MarkerSize',20)
text(t(i_max)+0.3,y_max+0.05,max_text)
title(tit),xlabel('t'),ylabel('y'),hold off
图 3.1-1 字符串运用示意图
.1.4 串转换函数
【例3.1-7】fprintf, sprintf, sscanf的用法示例。
rand('state',0);a=rand(2,2);
s1=num2str(a)
s_s=sprintf('%.10e\n',a)
s1 =
0.95013 0.60684
0.23114 0.48598
s_s =
9.5012928515e-001
2.3113851357e-001
6.0684258354e-001
4.8598246871e-001
fprintf('%.5g\\',a)
0.95013\0.23114\0.60684\0.48598\
s_sscan=sscanf(s_s,'%f',[3,2])
s_sscan =
0.9501 0.4860
0.2311 0
0.6068 0
.1.5 串操作函数
.2 元胞数组
.2.1 元胞数组的创建和显示
10 一 元胞标识寻访和内容编址寻访的不同
10 二 元胞数组的创建和显示
【例 3.2-1】本例演示:元胞数组的创建。
C_str=char('这是','元胞数组创建算例 1');
R=reshape(1:9,3,3);
Cn=[1+2i];
S_sym=sym('sin(-3*t)*exp(-t)');
A(1,1)={C_str};A(1,2)={R};A(2,1)={Cn};A(2,2)={S_sym};
A
A =
[2x10 char] [3x3 double]
[1.0000+ 2.0000i] [1x1 sym ]
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} =
1 4 7
2 5 8
3 6 9
B{2,2} =
-sin(3*t)*exp(-t)
【例3.2-2】元胞数组在存放和操作字符串上的应用。
a='MATLAB 5 ';b='introduces new data types:';
c1='◆Multidimensional array';c2='◆User-definable data structure';
c3='◆Cell arrays';c4='◆Character array';
c=char(c1,c2,c3,c4);
C={a;b;c};
disp([C{1:2}])
disp(' ')
disp(C{3})
MATLAB 5 introduces new data types:
◆Multidimensional array
◆User-definable data structure
◆Cell arrays
◆Character array
.2.2 元胞数组的扩充、收缩和重组
【例3.2-3】元胞数组的扩充。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论