数据类型
1数值类型
@整数
*浮点型转整数型的转换函数,将数值转换为最为接近的整数值,若分数部分为0.5时,转换为最接近的两个整数中绝对值较大的一个。
*取整函数:
floor(x)向下取整
ceil(x)向上取整
round(x)取最接近的整数
fix(x)向0取整
@浮点数类型
- 系统默认的数值类型是double的,所以使用double时可以省略double符号
-
double类型的数值与其他类型的数值运算时,结果为其他类型的数值,single类型的数值不能和整型直接运算,各种不同位数的整形之间也不能直接运算。
@复数
复数由实部和虚部两部分构成,在Matlab中,字符i或j默认作为虚部标志,关于复数的相关函数如下:
函数 | 说明 | 函数 | 说明 |
---|---|---|---|
complex(a,b) | 构造以a为实部,以b为虚部的复数 | i,j | 虚部标识 |
real(z) | 返回复数z的实部 | image(z) | 返回复数z的虚部 |
abs(z) | 返回复数z的模 | angle(z) | 返回复数z的辅角 |
conj(z) | 返回复数z的共轭复数 |
@无穷量Inf、非数值量NaN
2逻辑类型
@关系运算符
==等于 ~=不等于 =赋值
@逻辑运算符
&与 |或 ~非
3字符和字符串
一个字符串储存在一个行向量中
字符串一般是ASCII值的数值数组,字符串里的每个字符是数组里的一个元素
单引号括起来string='every good boy does fun'
字符串内的单引号string='It''s not the manual!' 显示string=
It's not the manual!
字符串数组主要用于可视化编程内容,如界面设计和图形绘制。
1.字符串变量的创建
字符变量的创建方法是:在指令窗口中先把待建的字符放在“单引号对”中,再按回车键。注意,该“单引号对”必须在英文状态下输入。这“单引号对”是MATLAB用来识别字符串变量所必须的。如:
>>a='This is an example.'
a =
This is an example.
>>msg = 'You''re right!' %创建带单引号的字符串
msg =
You're right!
2.字符串数组的标识
字符串变量的每个字符(英文字母、空格和标点都是平等的)占据一个元素位,在数组中元素所处的位置用自然数标识。如:
>>a='Thisis an example.'
>>b=a(1:4) % 提出一个子字符串
b =
This
ra=a(end:-1:1) % 字符串的倒排
ra =
.elpmaxe na si sihT
又如:
>>A='这是一个算例。';
>>B=size(A) % 符号数组 A 的“大小”
B =
1 7
>>C=A([5 6]) % 提出一个子字符串
C =
算例
3.字符串的ASCII码
字符串的存储是用ASCII码实现的。指令abs和double都可以用来获取串数组所对应的ASCII码数值数组。指令char可把ASCII码数组变为串数组。如
>>d=double(a)
d =
84 104 105 115 32 105 115 32 97 110 32 101 120 97 109 112108 101 46
>>char(d)
ans =
This is an example.
例:对字符串ASCII码数组的操作:使字符串中字母全部大写
>>w=find(a>='a'&a<='z');%找出串数组a中,小写字母的元素位置。
>>d(w)=d(w)-32; %大小写字母ASCII值差32用数值加法改变部分码值。
>>char(d) %把新的ASCII码翻成字符
ans =
THIS IS AN EXAMPLE.
4.字符串数组的运算(主要是连接)
4.1 连接成一行
>>Aa=[A,a] 可将字符串连接成一行长字符串
Aa =
这是一个算例。This is an example.
>>name = strcat('Thomas',' R.',' Lee') %连接两个字符串,每个字符串最右边的空格被裁切
name =
Thomas R. Lee
4.2多个字符串形成多行字符串矩阵
l 用中括号则要求两个字符串一般长
>> Aa=[A;a]; %操作错误,不能成生成二行的矩阵,长度不一致
l 用char或strvcat函数进行连接
>>D=strvcat('Hello','Yes','No','Goodbye')%利用串操作函数(chat也可以)创建多行串数组, 连接多行字符串,每行长度可不等,自动把非最长字符串最右边补空格, 使与最长字符串相等,会忽略空字符串。
D =
Hello
Yes
No
Goodbye
5. 字符串替换和查找
strrep—进行字符串替换,区分大小写
>>strrep(str1,str2,str3)%它把str1中所有的str2字串用str3来替换
strfind(str,patten) %查找str中是否有pattern,返回出现位置,没有出现返回空数组
findstr(str1,str2) %查找str1和str2中,较短字符串在较长字符串中出现的位置,没有出现返回空数组
strmatch(patten,str) %检查patten是否和str最左侧部分一致
strtok(str,char) %返回str中由char指定的字符串前的部分和之后的部分,
6.常用字符串操作函数
blanks(n)—创建有n个空格组成的字符串
deblank(str)—裁切字符串的尾部空格
strtrim(str)—裁切字符串的开头和尾部的空格,制表,回车符
lower(str)—将字符串中的字母转换成小写
upper(str)—将字符串中的字母转换成大写
sort(str)—按照字符的ASCII值对字符串排序
num2str—将数字转换为数字字符串
str2num—将数字字符串转换为数字
mat2str—将数组转换成字符串
int2str—把数值数组转换为整数数字组成的字符数组
7.其他字符串操作函数
strcmp—比较两个字符串是否完全相等,是,返回真,否则,返回假
strncmp—比较两个字符串前n个字符是否相等,是,返回真,否则,返回假
strcmpi—比较两个字符串是否完全相等,忽略字母大小写
strncmpi—比较两个字符串前n个字符是否相等,忽略字母大小写
isletter—检测字符串中每个字符时否属于英文字母
isspace—检测字符串中每个字符是否属于格式字符(空格,回车,制表,换行符等)
isstrprop—检测字符每一个字符是否属于指定的范围.
【例】综合例题:在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))]; % <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')
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) % <16>
title(tit),xlabel('t'),ylabel('y'),holdoff
4函数句柄
间接调用
Function_Handle=@Function_Filename;
Function_Filename为对应的M文件或者内部函数
Function_Handle为变量名,后续运算可直接通过Function_Handle(x)来实现Function_Filename(x)的功能
5结构体类型
结构数组的创建
1. 使用直接引用方式定义结构
命名方式 "结构体名.字段名"
与建立数值型数组一样,建立新struct对象不需要事先申明,可以直接引用,而且可以动态扩充。比如建立一个复数变量x:
x.real = 0; % 创建字段(field)名为real,并为该字段赋值为0
x.imag = 0
x =
real: 0
imag: 0
然后可以将其动态扩充为数组:
x(2).real = 0; % 将x扩充为1×2的结构数组
x(2).imag = 0;
在任何需要的时候,也可以为数组动态扩充字段,如增加字段scale:
x(1).scale = 0;
这样,所有x都增加了一个scale字段,而x(1)之外的其他变量的scale字段为空:
x(1) % 查看结构数组的第一个元素的各个字段的内容
ans =
real: 0
imag: 0
scale: 0
x(2) % 查看结构数组的第二个元素的各个字段的内容,注意没有赋值的字段为空
ans =
real: 0
imag: 0
scale: []
clear x; x.real = [1 2 3 4 5]; x.imag = ones(10,10);
x(2).real = 'abc';
x(2).imag = rand(5,1);
x(3).real = x(1); x(3).imag = 3; x(3)
ans =
real: [1x1 struct]
imag: 3
下面看一个实际的例子来熟悉直接引用方式定义与显示结构。
【例】 温室数据(包括温室名、容量、温度、湿度等)的创建与显示。
(1) 直接对字段赋值法产生结构变量
green_house.name = '一号温室';
green_house.volume = '2000立方米'; % 创建温室容量字段
green_house.parameter.temperature = [31.2 30.4 31.6 28.7 29.7 31.1 30.9 29.6]; % 创建温室温度字段
green_house.parameter.humidity = [62.1 59.5 57.7 61.5 62.0 61.9 59.2 57.5]; % 创建温室湿度字段
(2)显示结构变量的内容
green_house % 显示结构变量结构
green_house =
name: '一号温室'
volume: '2000立方米'
parameter: [1x1 struct]
green_house.parameter % 用字段作用符号. 显示指定字段(parameter