第三章  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小时内删除。