第三阶段学习开始咯!字符串数组(Character String Array)、元胞数组(Cell array)、构架数组(Structure array)。
MATLAB采用了面向对象编程技术,内建数据类型5种以上,还有许多专门设计的类(如符号类、内联函数类、控制工具包中的线性时不变模型类、神经网络类等)。
字符串数组
串数组及其相应操作,为MATLAB文字表达、复杂字符的组织、数据的可视化以及MATLAB的宏定义提供了有力的支持。
1、字符串
【eg.1】字符串入门
>> a=12345.6789 %给变量a赋数值标量
>> class(a) %a类别判断
>> a_s=size(a) %数值数组a的大小
>> b='S' %给变量b赋字符标量(即单个字符)
>> class(b) %b类别判断
>> b_s=size(b) %符号数组b的大小
>> whos %观察变量a,b在内存中所占字节
图1 字符串
【eg.2】字符串的属性和标识
>> a='This is an example.'
>> size(a)
>> a14=a(1:4) %提出一个字符串
>> ra=a(end:-1:1) %字符串倒排
>> ascii_a=double(a) %产生ASCII码
>> char(ascii_a) %把ASCII码转换成字符串
>> %使字符串中字母全部大写
>> w=find(a>='a' & a<='z'); %找出字符串中小写字母的元素位置
>> ascii_a(w)=ascii_a(w)-32; %大小写字母ASCII值差32.用数值加法改变部分码值
>> char(ascii_a) %把更新后的ASCII码翻成字符
>> A='这是一个算例.'; %创建中文字符串
>> A_s=size(A) %串数组的大小
>> A56=A([5 6]) %取串的子数组
>> ASCII_A=double(A) %获取ASCII码
>> char(ASCII_A) %把ASCII码翻译成字符
>> b='Example"3.1.2-1"'
图2 字符串属性
2、复杂字符串
【eg.3】复杂串数组的创建
>> S=['This string array'
'has multiple rows'] %多行串数组的直接输入
>> size(S)
>> S1=char('This string array','has two rows.')
>> S2=str2mat('这','字符','串数组','','由4行组成') %“空串”会产生空格行
>> S3=strvcat('这','字符','串数组','','由4行组成') %“空串”不会产生一个空格行
>> size(S3)
图3 复杂串数组的创建
【eg.4】int2str(把整数数组转换成串数组)、num2str(非整数转换串数组)、mat2str(常与eval指令配用,把数值数组换换成输入形态的串数组)
>> A=eye(2,4) %生成一个(2*4)数值数组
>> A_str1=int2str(A) %转换成(2*10)串数组,
>> size(A_str1)
>> rand('state',0)
>> B=rand(2,4); %生成数值矩阵
>> B3=num2str(B,3) %保持3位有效数字,转换成串
>> B_str=mat2str(B,4) %保持4位有效数字,转换成“数组输入形式”串
>> Expression=['exp(-',B_str,')'];
>> eval(Expression)
图4 转换函数产生数码字符串
【eg.5】MATLAB计算生成的图形上标出图名、最大值点坐标
>> 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') %画纵坐标为0的基准线
>> hold on %保持绘制的先不被清除
>> 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) %用大红点标最大值点
>> title(tit),xlabel('t'),ylabel('y'),hold off %书写图名、横坐标名、纵坐标名
图5 字符串运用
元胞数组: 允许存放、并操作各种不同类型和不同大小的数据,但 存放和操作复杂字符串是元胞数组的一个主要用途。
a='MATLAB R2015b';
b='includes new data types:'; %创建单行字符串a,b
c1='Multidimensional array';
c2='User-definable data structure';
c3='Cell arrays';
c4='Character array';
c5='Function handle';
c=char(c1,c2,c3,c4,c5); %创建多行字符串c
C={a;b;c}; %利用元胞数组存放长短不同的字符内容
disp([C{1:2}]) %显示前两个元胞中的字符内容
disp('')