2017.3.20 MATLAB(一)数据类型

本文详细介绍了MATLAB中的各种数据类型,包括数值类型(整数、浮点数、复数)、逻辑类型、字符和字符串操作,以及函数句柄、结构体类型、数组类型和Map函数的使用。通过示例展示了数据类型之间的转换、字符串操作和结构数组的操作方法,帮助读者深入理解MATLAB中的数据处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据类型


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) %
查找str1str2中,较短字符串在较长字符串中出现的位置,没有出现返回空数组
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计算生成的图形上标出图名和最大值点坐标。

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')

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结构体类型

  结构数组的创建
    Matlab提供了两种定义结构的方式:直接引用和使用struct函数。


1. 使用直接引用方式定义结构

命名方式  "结构体名.字段名"

与建立数值型数组一样,建立新struct对象不需要事先申明,可以直接引用,而且可以动态扩充。比如建立一个复数变量x
x.real = 0; % 创建字段(field)名为real,并为该字段赋值为0
x.imag = 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: []
    应该注意的是,xrealimagscale字段不一定是单个数据元素,它们可以是任意数据类型,可以是向量、数组、矩阵甚至是其他结构变量或单元数组,而且不同字段之间其数据类型不需要相同。例如:
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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值