数学函数式组利用MATLAB验证(Matlab基础入门手册(第四章 数据类型))

Posted

篇首语:忘记你是个女孩,然后像爷们一样去奋斗!本文由小常识网(cha138.com)小编为大家整理,主要介绍了数学函数式组利用MATLAB验证(Matlab基础入门手册(第四章 数据类型))相关的知识,希望对你有一定的参考价值。

数学函数式组利用MATLAB验证(Matlab基础入门手册(第四章 数据类型))

第四章 数据类型

1.22 整数型

数值型(numeric type),包括整型和浮点型

1.整数类型的创建方法、取值范围和运算应用

2.认识函数

8位整数int8

无符号8位整数uint8(其他见下表)

取值范围intmax/intmin

测试类型class

3.概念

Matlab支持整数数据的1个,2个,4个和8个字节的存储,再分为有符号和无符号,总共8个整型类别。

整型类型

整型类别

取值范围

函数

有符号的8位整数

-2^7至2^7 -1

int8

有符号的16位整数

-2^15至2^15 -1

int16

有符号的32位整数

-2^31至2^31 -1

int32

有符号的64位整数

-2^63至2^63 -1

int64

无符号的8位整数

0到2^8 -1

uint8

无符号的16位整数

0至2^16 -1

uint16

无符号的32位整数

0至2^32 -1

uint32

无符号的64位整数

0到2^64 -1

uint64

4.实例演示

%1_22int8(10) %有符号整型int8(10.5) %只能存储整数、四舍五入intmax('int8') %获取有符号整型最大值127intmin('int8') %获取有符号整型最小值-128intmax('uint8')intmin('uint8')int8(130) %130超出最大值范围,则返回最大值127int8(500) %返回127int8(-130) %-128int8(1)*int8(5) %整型运算:结果为整型5int8([1 2 3])*int8(5) %整型数组,遵循兼容性运算a=int8([1 2 3])*2.3 %整型数组*双精度浮点型,四舍五入存储整数class(a) %测试a类型,int8


1.23 浮点型

1.浮点型的创建和转换方法、取值范围、运算和精度问题

2.认识函数

双精度double

单精度single

判断浮点型isfloat

取值范围realmax/realmin

精度eps

3.说明

浮点型分为单精度浮点型和双精度浮点型

IEEE浮点数算术标准(IEEE 754)是IEEE二进位浮点数算术标准(IEEE Standard for Floating-Point Arithmetic)的标准编号,等同于国际标准ISO/IEC/IEEE 60559。该标准由美国电气电子工程师学会(IEEE)计算机学会旗下的微处理器标准委员会(Microprocessor Standards Committee, MSC)发布,是最广泛使用的浮点数运算标准,为许多CPU与浮点运算器所采用。

知识扩展:这个标准定义了表示浮点数的格式(包括负零-0)与反常值(denormal number),一些特殊数值(无穷与非数值(NaN)),以及这些数值的“浮点数运算子”,它也指明了四种数值修约规则和五种例外状况(包括例外发生的时机与处理方式)。

任何存储为double格式的值都需要64位。

double类型

用法

63

符号(0=正数,1=负数)

62 至 52

指数

51 至 0

小数位(分数位)

任何存储为single格式的值都需要32位。

single类型

用法

31

符号(0=正数,1=负数)

30 至 23

指数

22 至 0

小数位(分数位)

4.浮点型的精度问题

Matlab中几乎所有的运算默认都是以符合IEEE 754标准的双精度算法执行的,由于计算机只能以有限的精度表示数字(双精度要求52个尾数位),对于数值运算,这种浮点型表示值与其真实值存在微小的差异

所以,如果浮点算术运算的结果不如预期的那样精确,甚至有时会产生数学上非直觉的结果,则很可能是由于计算机硬件的限制造成的,硬件可能没有足够的位来表示结果的完全准确性,因此截断了结果值的部分精度(例如32位的电脑)

但这并不是Matlab中的错误,运用IEEE 754标准所执行的所有计算都受到影响,其中包括用C或FORTRAN等

5.实例演示

%1_23%freexyndouble(1) %创建双精度浮点型1a=1 %默认双精度浮点型,再赋值给aisfloat(a) %判断是否浮点型class(a) %测试变量a的数据类型whos a %测试变量a的数据类型等信息single(1) %单精度1realmax('double') %双精度浮点数的最大取值[-realmax,-realmin,realmin,realmax] %完整的双精度浮点型取值范围(-0和0之间取不到任何值)[-realmax('single'),-realmin('single'),realmin('single'),realmax('single')] %单精度浮点型取值范围,上式未指定则默认取双精度浮点型范围%% 浮点型与整型转换方法c=int8(1) %整型1c1=double(c) %整型c转化为双精度,数据类型创建方法也是转化方法c2=single(c) %转化为单精度int8(c1) %双精度转化为整型whos c c1 c2 %查看数据类型:双精度8字节精度最高%% 精度问题相关sin(pi) %会保留部分精度的小数再进行计算,因此结果会有误差(计算机有限位数存储有限精度)sin(sym(pi)) %sym将pi转化为符号型再求sin值,结果是0更精确eps %默认求1的精度,求得的值为1附近的误差值11+eps %结果1,因为硬件所限导致的精度问题,无法表达eps更小的值eps(10) %求10附近的精度eps(100) %求100附近的精度eps(single(100)) %单精度100附近的精度(4/3-1)*3-1 %4/3并非完整精确的分数,而是有限存储空间内的近似值,因此结果并非0(sym(4/3)-1)*3-1 %返回0,引入符号型获得精确4/3值


1.24 Inf和NaN

1.介绍inf和nan的含义和用法

2.认识命令

无穷大inf

非值nan

判读无穷大isinf

判断非值isnan

3.说明

用特殊值“inf”表示无穷大,比如零除和溢出等这样的运算会产生无穷大,这导致结果太大而不能用传统的浮点值表示

用特殊值“NaN”表示既不是实数也不是复数的“非数字”的值

Matlab里,inf与inf相等判断为真,nan与nan相等判断为假

4.实例演示

%1_24realmax %浮点型最大取值realmax+1e30 %最大取值再加上10^30并未返回无穷大值realmax+1e300 %加上10^300返回无穷大值。说明:10^30相对于realmax较小,因此忽略;10^300相对于realmax不能忽略。a=inf1/0 %无穷大1e309 %超过存储范围,返回无穷大isinf(exp(1000)) %返回逻辑1,判断无穷大inf==inf %1真inf+10 %返回Infinf-1e308 %返回Infinf+inf %返回Inf。inf/inf %nan。无穷大参与的运算,结果通常为无穷大,仅本情况例外0/0 %nana=nan %nanisnan(a) %nannan==nan %假nan>0nan<0nan~=nan %涉及nan的关系运算结果通常为假


1.25 显示格式

1.设置命令行窗口数值的显示格式

2.认识函数

format

3.说明

数值格式仅影响数字显示在命令行窗口输出中的方式

而不是 Matlab计算或保存它们的方式

指定的格式仅应用于当前 Matlab会话

4.实例演示

%1_25a=[1/3 1.23e-5] %默认显示4位小数format short %短格式默认5位aformat long %长格式默认15位aformat short e %科学计数法aformat rational %有理数aformat hex %16进制aformat shortG %短格式基础上紧凑格式aget(0,'format') %获取当前格式,0为句柄值,表示当前会话set(0,'format','short') %set设置格式为shortaformat shortformat %short为默认格式,因此可不打出来


1.26 字符型

在Matlab中有两种表示文本的方法:字符型和字符串型

1.字符型(Characters)数组的创建、连接、转换和运算

2.认识函数

字符型 ''

判断字符型ischar

转成字符char

转成字符num2str

转成数值str2num

交集intersect

并集union

3.说明

字符型一般用来存储和处理文本数据

字符数组是一个字符序列

字符向量把字符存储为1乘n的向量,是常用形式

4.实例演示

%1_26a='123' %创建3个字符数组b='freexyn'c='自由未知数'size(c) %查看行列数ischar(a) %判断字符型'I''m fine' %字符型内单引号处理:改用双引号('')c(1:3) %索引字符向量的元素c(6)='.' %通过索引修改字符向量的元素[b,c] %字符连接:中括号水平连接strcat(b,c) %水平连接函数strvcat(b,c) %垂直连接函数:若列数不同自动使用空格补齐char('d') %字符d转换(创建)为字符型'd' %通常使用该方法char(100) %双精度转换为字符型:基于Unicode码char([97 98 99 100]) %转换1行4列的数值向量,结果a b c ddouble('a') %将字符型a转换为双精度数值型char('12','0') %char函数输入多个参数时,会将其纵向连接为多行,并相应转换为字符型char('12',100)char('12',100,'123')char(['12',100],'123') %参数用中括号括起来表示在同一行char(100) %转换为字符d:根据unicode码num2str(100) %‘100’,把100转化为'100'字符型str2num('100')r=80disp(['r:',num2str(r)]) %打印(显示)信息:r:80,数值跟随变量自动变化%% 字符型数字运算a='d'b='100' %1行3列字符向量:1 0 0a+a %字符型加法:首先转换成数值型,再运算,返回结果200a+b %1 0 0字符向量按ASCII码转换为数值型分别为49 48 48,再分别与d转换的100相加,返回149 148 148char(49) %数值型转化为字符型:'1'str2num('100')+str2num('100')%% 集合运算a='123' %字符向量b='1245'union(a,b) %并集intersect(a,b) %交集


1.27 特殊字符

1.特殊字符识别和处理

2.认识函数

判断字母isletter

判断空格isspace

判断特定字符isstrprop

空字符blanks

字符调整strjust

删除空格deblank

删除空格strtrim

3.实例演示

%1_27a='abc 123'isletter(a) %判断字母isspace(a) %判断空格find(isspace(a)) %对空格进行线性索引a(find(isspace(a)))=[] %将a字符中的空格删除%% 判断特定字符b='12 ab_AB, 'isstrprop(b,'alpha') %判断特定字符 字母isstrprop(b,'lower') %判断特定字符 小写字母isstrprop(b,'upper') %判断特定字符 大写字母isstrprop(b,'digit') %判断特定字符 数字isstrprop(b,'punct') %判断特定字符 标点isstrprop(b,'wspace') %判断特定字符 空格%% 空字符的处理c=blanks(7) %创建空字符函数,创建7个空字符c(3:5)='aaa'strjust(c,'left') %strjust字符调整,将c中空字符调至左边deblank(c) %删除尾随空字符strtrim(c) %删除前后空字符,但不删除中间的空字符


1.28 混合连接的类型

1.多个类型的数据混合连接后的数据类型

2.组合类型列表

组合类型列表

类型

字符型

整型

单精度

双精度

逻辑型

字符型

字符型

字符型

字符型

字符型

无效

整型

字符型

整型

整型

整型

整型

单精度

字符型

整型

单精度

单精度

单精度

双精度

字符型

整型

单精度

双精度

双精度

逻辑型

无效

整型

单精度

双精度

逻辑型

3.说明

总体上,除逻辑型外,连接后的类型遵循向下转换的原则

逻辑型除了与自身连接是逻辑型,与其他连接转换成其他型

4.实例演示

%1_28[100 single(100)][100 single(100) int8(100)][100 single(100) int8(100) 'd'][100 true] %双精度与逻辑型连接%% 整型内部连接[int8(100) int16(100)][int16(100) int8(100)] %遵循最左侧整型类型的原则[int8(-100) uint8(100)][uint8(100) int8(-100)] %右边由有符号变为无符号,仅取到最小值0%% 混合连接[true pi int32(10) single(1.23) uint8(345)] %pi为双精度,int32为整型,混合连接遵循最左侧整型数据类型原则,后面超出int32的数据会相应变化[true pi single(1.23) uint8(345)] %结果取uint8


1.29 混合运算的类型

1.多个类型的数据混合运算后的数据类型

2.混合运算类型列表

混合运算类型列表

运算数类型

运算数类型

结果类型

double

int(uint)

int(uint)

single

single

double

double

char

double

logical

double

single

single

single

char

single

logical

single

3.说明

总体上,除逻辑型和字符型,混合运算类型遵循向下转换的原则

逻辑型除了与自身运算是逻辑型,与其他运算转换成其他型

4.实例演示

%1_29%freexyn%% 混合运算10+single(10) %双+单=单10+int8(10) %双+整=整%[10 10]+int8(10) %双精度数组无法与整型相加,报错10+'d' %双精度+字符型=双精度'd'+'d' %字符型+字符型,先转换为双精度再运算[10,'d'] %复习上节,连接:[双精度 字符型] =字符型10+true %双精度+logical=双精度%% 整型内部运算% int8(10)+int16(10) %不同类型整型无法相加运算[int8(10),int16(10)].*[int8(10),int8(10)] %整型数组乘法% [int8(10),int16(10)]*[int8(10);int8(10)] %矩阵乘法,前面列数等于后面行数,报错:矩阵乘法不完全支持整数类,仅支持参数之一为标量的情况


1.30 字符串型

1.字符串(Strings)数组的创建、比较、索引和运算

2.认识函数

创建strings

判断isstring

字符串长度strlength

3.说明

字符串是一个字符序列,常见的,存储一个1乘n的字符向量

字符串数组是由多个字符串作为元素组成的数组

从Matlab2016b开始,可以使用字符串类型

从2017a开始,可以使用双引号创建字符串

4.实例演示

%1_30 字符型创建、比较、索引和运算%% 字符串和字符数组的创建s="自由未知数" %字符串isstring(s) %判断字符串型ischar(s) %判断字符型s=["123","abcd";"自由未知数","%$%#"] %字符串数组strings(2,3) %创建字符串数组函数,2行3列空字符串数组strings(0,3) %空的0*3数组%% 字符型的比较c='' %空字符向量s="" %1*1字符串size(c)size(s)isempty(c)isempty(s)c='freexyn' %字符向量(数组)s="freexyn" %1*1字符串size(c)size(s)%% 字符型的连接['123','ab'] %字符向量连接,结果为更大的字符向量["123","ab"] %字符串连接,结果为字符串数组%['123';'ab'] %行数列数不同,报错["123";"ab"] %可行%% 补充length(c) %字符向量长度length(s) %字符串数组长度strlength(s) %字符串元素的长度%% 字符串型索引s=["123","abcd";"自由未知数","%$%#"]s(1,2) %常规组合索引s1,2 %索引字符串的元素内容,返回字符向量s1,2(1:2) %索引元素内容后,用二级索引获取子段%% 字符串型运算s+"x" %视为矩阵添加标量,添加到每个元素中s+'x' %结果同上


1.31 缺失字符串

1.字符串的转换、缺失字符串的创建和应用

2.认识函数

转换string

缺失值missing

判断缺失ismissing

3.说明

缺失值表示数据中不可靠或不可用的点

不同类型中缺失值的表达不同,数值型用NaN,字符串里用<missing>

missing从Matlab2017a开始推出

字符串数组扩展时,缺失元素用<missing>自动填充

4.实例演示

%1_31%% 字符串的转换string(100) %双精度转换为字符串型char(100) %双精度转换为字符型,依据Unicode码操作string('100') %字符型转换为字符串型char("100") %字符串型转化为字符型%% 缺失值missing %通用的缺失值函数,适用于任何类型string(missing) %将missing转化为字符串类型的缺失值ismissing(["","abc",string(missing)]) %判断数组3个元素是否为缺失值string(missing)==string(missing) %缺失值与任何数值比较都为假,除特例比较不相等string(missing)=="x"string(missing)~=string(missing) %特例%% 缺失值的运算string(missing)+string(missing) %缺失值的任何运算结果都是缺失值string(missing)+"x"%% 字符串数组的扩展s="x" %创建字符串数组s(2,3)="x" %扩展为2行3列的数组,并将第2行第3列元素赋值为''x''


1.32 格式化文本

1.简单介绍格式化文本的用法

2.认识函数

sprintf

3.说明

格式化文本,是具有特定显示格式的文本形式,包括字段宽度、显示精度、特殊标志和辅助符号等

普通文本和数值需要按照特定格式显示和输出时,会用到

示例,sprintf('|%f\\n|%.2f\\n|%8.2f',pi*ones(1,3))

4.实例演示

%1_32sprintf('|%f\\n|%.2f\\n|%8.2f',pi*ones(1,3)) %第一个参数为格式设置,第二个参数为对应的数值,此处,3组格式设置对应3个值%每行起始为竖线|,%是必须的字段,f代表浮点型,将浮点型值转化为文本,\\n为转义符代表回车%.2代表小数点后保留2位精度%8.2总长度8,小数点后保留2位,长度不够时按实际长度


1.33 字符型与数值型的转换

1.字符型和数值型之间的相互转换

2.认识函数

字符转数值uintN %依据Unicode码转换

数值转字符char %依据Unicode码转换,ASCII码与Unicode码并非相同概念,ASCII较基础,应用范围小,主要表示键盘上字母符号等,Unicode码包含ASCII码,囊括多国语言字符。

数值转字符串string

字符转数值str2num、str2double

数值转字符num2str、int2str

十和二进制互换bin2dec、dec2bin

十和十六进制互换hex2dec、dec2hex

十和其他进制互换base2dec、dec2base %十进制必然是数值型,其他任意进制都使用字符型表达

3.实例演示

%1_33%% 字符与数值转换uint8('ab') %字符'ab'转换为8位整型的整数uint16('ab') %字符'ab'转换为16位整型的整数uint8('是') %ASCII无汉字,Unicode包含uint16('是')2^16 %16位最大值uint32('是')%相反功能char([97 98]) %数值转换为字符型string([97 98]) %转换成字符串数组%% 字符型转换为数值型str2num('100') %字符向量转换为数值型str2double('100') %同上str2num("100") %字符串转换为数值型str2double("100") %同上%str2num(["100","100"]) %该函数无法将字符串数组转换为数值型str2double(["100","100"]) %字符串数组转换为数值型%相反功能:数值转换为字符num2str(100) %双精度数值转换为字符num2str(1.2345,3) %第2个参数设置前面转换后保留的精度num2str(100,'%5.2f') %格式化文本,单引号中进行设置int2str(1.23) %浮点型转为字符%% 不同进制之间转换bin2dec('1000') %二进制转换为十进制dec2bin(8) %十进制转换为二进制hex2dec('A') %十六进制的A转换为十进制dec2hex(10) %十进制转换为十六进制base2dec('10',2) %任意进制转换为十进制:'10'为转换数值,2为二进制base2dec('10',8) %八进制的10转化为十进制base2dec('10',20)dec2base(2,2) %十进制的2转化为二进制dec2base(8,8)dec2base(9,8) %十进制的9转化为八进制


1.34 元胞数组

1.元胞数组的创建、索引和转换方法

2.认识函数

创建方法:a=和cell (与Python中字典结构相似)

判断iscell

索引()和

转换cell2mat、mat2cell

3.概念

元胞数组(cell array)是一种具有容器特性的数据类型,每个元素可以包含任何类型的数据

4.说明

元胞数组创建和扩展时默认填充元素是空矩阵[]

元胞数组不需要完全连续的内存,但每个元素需要连续的内存

对大型的元胞数组,增加元素数量可能导致Out of Memory错误

因此,必要时,元胞数组需要初始化和预分配内存

5.实例演示

%1_34%% 元胞数组创建、2种预分配内存方法a=b=1,2,magic(3)'a',["a","b"],[] %分别双精度标量、3阶魔方矩阵、字符、字符串数组、空矩阵。2行用回车分割,或用分号分割cell(2,3) %创建2行3列元胞数组c=cell(100,100) %对大型元胞数组,预分配内存d= %初始化后(也可不初始化,因Matlab使用变量不需提前声明,因此也可直接赋值)d100,100=[] %用数组扩展的方式,将第100行第100列元素设置为空,其他未指定元素默认用空矩阵填充,完成预分配内存iscell(a) %判断元胞数组%% 元胞数组索引方法(可类比字符串数组索引)b(1,3) %索引元胞数组的元素b1,3 %索引元胞数组的元素的内容b1,1:3 %索引1行1-3列元素,未指定输出变量,默认ans[v1,v2,v3]=b1,1:3 %索引3个元素值,并赋值给3个变量v=b1,1:3 %当仅指定1个输出变量,则只返回第1个值b1,3(1:2) %二级索引%% 元胞数组数据连接%[b1,1:3] %维度不同无法连接[b1,1:2] %2个索引到的元素,连接为1*2矩阵%% 元胞数组转换:每个元胞元素类型相同且大小相同才可转换%cell2mat(b) %b没有明确结果类型因此报错m=cell2mat(1 2) %数值型可以转换为矩阵n=cell2mat('a','b')%cell2mat("a","b") %该转换函数不支持字符串数组mat2cell(m,1) %第2个参数1表示1行1列元胞数组,将整个矩阵看做元胞数组元素mat2cell(m,1,[1 1]) %第3个参数指定了列数为2列,每列个数分别为1mat2cell(n,1)mat2cell(n,1,[1 1])


1.35 元胞数组的修改

1.元胞数组的修改、添加、删除和连接

2.认识函数

连接[]和

3.说明

元胞数组的子数组或元素也是元胞型的,其元素内容是本身类型

4.实例演示

%1_35%% 元胞数组修改b=1,2,magic(3)'a',["a","b"],[] %理解:元胞数组是大箱子,用大括号表示,内部的元素是盒子,盒子也是元胞型,盒子与箱子遵循Matlab预设规则,能修改的就是打开盒子往里面装内容,内容可以是任意大小任意格式的内容。% b(1,1)=100 %元胞数组数据修改,小括号索引出第1行第1列元胞型,100双精度型无法赋值(小括号索引到盒子),报错b(1,1)=100 %赋值也应包装成盒子(元胞型)再赋值b1,1=100 %(大括号索引到盒子的内容)所以使用任意数值赋值即可%% 元胞数组添加、删除b(3,4)=8 %b本身是2行3列,如此扩展为3行4列,第3行第4列为8其余扩展元素默认空矩阵填充% b(1,1)=[] %报错,删除1个元素无法保持矩阵矩形b(end,:)=[] %最后一行删除,可行b1,1=[] %大括号索引到盒子里的内容,并置为空(删除),盒子仍存在%% 元胞数组连接%中括号连接:把元胞数组打开重排[1 2 3,'a'] %水平连接% [1 2 3;'a'] %列数不同,报错[1 2 3;'a',[],[]] %列数相同%大括号连接:元胞数组视为整体重排(可理解为元胞数组的嵌套,元胞数组内可容纳任意类型,包括元胞型自身)1 2 3,'a' %水平连接1 2 3;'a' %纵向排列1 2 3,'a',,[],string(missing),uint16(10) %只要占用元胞数组内的盒子,都会显示


1.36 结构数组

1.结构数组的创建、索引和预分配内存

作者:freexyn(整理/注释:韩松岳)

2.认识函数

创建struct

判断isstruct

运算符 .

3.概念

结构(structure array)是一种具有容器特性的数据类型,它使用称为字段的数据容器对相关数据进行分组,每个字段可以包含任何类型或大小的数据。(与元胞数组描述类似,都是容器型数据类型,组织结构不同)

包含1个元素的结构数组

包含2个元素的结构数组

4.创建方法(2种方法)

数组名.字段名=字段值,遍历所有字段名赋值

数组名=struct(‘字段名’,‘字段值’...)

5.说明

所有元素都具有相同数量的字段和相同的字段名称

字段未指定的默认值为[](默认为空矩阵,与元胞数组相同)

结构数组不需要完全连续的内存,但每个字段需要连续的内存

对于大型的结构数组,增加字段的数量或字段中数据的数量可能会导致Out of Memory错误

因此,必要时,结构数组需要初始化和预分配内存

6.实例演示

%1_36%% 单元素结构数组创建%方法1:(分别列出字段信息,元素名与字段信息用圆点(.)分隔)student.xingming='zhangsan'; %student是结构数组名,后跟字段名,等号右侧为字段值student.xuehao='00001';student.chengji=[1 2 3;4 5 6]%方法2:(struct函数创建,分别列出每条字段信息,最后赋值给变量名)stu=struct('xingming','zhangsan','xuehao','00001','chengji',[1 2 3;4 5 6])%单元素结构数组的操作isstruct(stu) %判断结构数组stu.chengji %字段索引stu.chengji(1:3)%2级索引,与元胞数组类似%% 多元素结构数组%方法1:(在前面基础上添加)student(2).xingming='lisi';student(2).xuehao='00002';student(2).chengji=[7 8 9;1 2 3]%方法2:stu(2)=struct('xingming','zhangsan','xuehao','00001','chengji',[1 2 3;4 5 6])%多元素结构数组操作student.chengji %若不指定哪个元素,则显示所有该字段名的值student(2).chengji %指定第2个元素,显示该元素的该字段值% student.chengji(1:3) %2个及以上元素的结构数组不能直接使用二级索引,因未指定元素,无法确定索引的结果student(2).chengji(1:3)%预分配内存st(100,100)=struct('a',[]) %边界思想,设置结构数组的边界元素为字段名为'a'且字段值为[]的结构数组,其他元素值默认填充为空[]st.a %索引st的字段'a',返回100个空矩阵


1.37 结构数组的处理

1.结构数组的连接、嵌套、引用变量值和访问字段值

2.说明

结构数组必须具有相同的字段名才能连接,元素数目可以不同

为某元素添加字段,其他所有元素也具有了该字段,默认值为[]

3.实例演示

%1_37%作者:freexyn%创建3个结构数组student/stu/ststudent.xingming='zhangsan';student.xuehao='00001';student.chengji=[1 2 3;4 5 6];stu=struct('xingming','zhangsan','xuehao','00001','chengji',[1 2 3;4 5 6]);student(2).xingming='lisi';student(2).xuehao='00002';student(2).chengji=[7 8 9;1 2 3]stu(2)=struct('xingming','zhangsan','xuehao','00001','chengji',[1 2 3;4 5 6])st(100,100)=struct('a',[])%% 结构数组的连接[student,stu] %同为1*2结构数组,并且字段名相同,结果为1*4结构数组% [student,st] %维度不同且字段名不同,报错%% 嵌套student(1).stu=stu %嵌套,理解:创建字段名stu,并把原结构数组stu作为字段值赋值给该字段名。给结构数组student的第1个元素student(1)添加stu字段,其他所有元素(如student(2))也会具有该字段student(1).stu %索引,查看第1个元素的stu字段名里的字段值(字段内容),结果为原stu数组student(2).stu %索引,结果是空矩阵,因为未指定该字段的值%多级索引打开内部嵌套的字段值(理解:结构数组的索引,用圆点运算符(.)层层打开字段值,访问所需内容)student(1).stu(1) % student第一个元素的stu字段的第一个元素的值student(1).stu(1).chengji %进一步获取该元素的chengji字段的值student(1).stu(1).chengji(1:3) %进一步获取成绩值的第1-3元素%% 预留字段(添加新字段)yuliuziduan='nianling' %通过预留变量名的形式,给元素添加字段,字段名的赋值需字符型。stu(1).(yuliuziduan)='nan' %给包含多个元素的结构数组通过小括号+预留变量名的方式添加字段时,要指定具体元素,等号右侧赋字段值%用途:当后面需要修改字段名时,不需再每处修改,而只修改预留变量所赋的值即可,树状图思想,预留变量作为中间值stu(1).(yuliuziduan) %小括号引用该预留变量代表的字段名,并索引该字段名的字段值,即nan%% 获取结构数组字段值student.chengji %索引student所有元素的chengji字段的值v=student.chengji %当只有一个输出参数v时,只返回第1个值[v1,v2]=student.chengji %若返回所有字段值,则指定相同个数的输出参数v=[student(1).chengji,student(2).chengji] %将多字段值存储在同一矩阵中,则先将字段值提取再矩阵连接。要求字段值数据类型相同,横纵连接符合矩阵连接的维度要求


1.38 表

1.表类型数据的创建、索引和自身属性的用法

3*3 table数组

2.认识函数

创建table

判断istable

属性.Properties

3.概念

表(table)具有容器特性的数据类型,可以方便的存储混合类型的数据,可以使用数字或命名索引访问数据以及元数据(例如变量名称,行名称,描述和变量单位等)

4.说明

表由行和列组成

通常,表的列代表不同的变量,行代表不同的变量值

不同变量须具有相同数量的变量值,即行数须相同,否则不完整

表的索引方法有两种,下标索引和字段索引

5.实例演示

%1_38%% 表格创建xingming='zhangsan';'lisi';'wangwu' %用元胞数组的形式,创建表的每一列xuehao='1001';'1002';'1003'chengji=[89 95;90 87;88 84]t=table(xingming,xuehao,chengji) %表格的创建:table函数+小括号输入变量istable(t) %判断%% 表格索引t(1:2,2:end) %下标索引:1-2行,2-最后一列t.xingming %字段索引:索引该字段(列名称)所指向的整列数据t.chengji(2,1) %组合索引:成绩字段里第2行第1列t.age=[20;19;21] %使用字段索引为表格添加变量(字段)名称,并赋值。默认添加至最后一列size(t) %表格维度%% 表格属性的应用t.Properties %.表格的属性数据,是结构数组t.Properties.VariableNames %二级索引获取属性里的变量名称t.Properties.RowNames='1','2','3' %给行名称赋值。注:赋值应与属性值数值类型相同(属性是元胞数组,则赋值也以元胞数组形式)%用途:赋予行名称后,可以作为索引使用t('1','xuehao') %索引1行xuehao列的数据,形式类似于下标索引,下标即矩阵下标ij,而该索引以行与列的名称索引。t(1,2) %下标索引,1行2列t('1','2','xingming','age')


1.39 表的数据处理

1.表的编辑(排序查找提取删除)、计算、与结构数组转换

2.认识函数

统计summary

与结构数组转换table2struct、struct2table

与元胞数组转换table2cell、cell2table

3.实例演示

%1_39xingming='zhangsan';'lisi';'wangwu';xuehao='1001';'1002';'1003';chengji=[89 95;90 87;88 84];t=table(xingming,xuehao,chengji)%% 表格的统计summary(t) %无法统计字符型元胞数组,可以对chengji双精度型进行统计处理(按列统计)mean(t.chengji) %字段索引再mean函数(默认维度按列即字段名求均值)mean(t.chengji,2) %2表示第2维度即按行求均值t.pingjunzhi=mean(t.chengji,2) %使用字段索引并赋值%% 表的排序、查找sortrows(t,'xingming') %按行排序,表格t按字段'xingming’按字母升序t(:,[1 2 4 3]) %用索引排序:任意行,列将3和4列互换% t.pingjunzhi=[] %删除,用字段索引赋空值删除该列tf=t.pingjunzhi>90 %查找平均值大于90的学生信息,返回逻辑值;t(tf,:) %使用tf作为逻辑索引,索引表格中符合条件的学生的信息%% 数据转换ts=table2struct(t) %表格转换为结构数组后,每一行都变为1个元素,因此是3行1列的结构数组s(1) %查看第1个元素的值struct2table(s) %反向转换c=table2cell(t) %表格转换为元胞数组后,变量名称消失,变量值转换为元胞数组,其中多列的双精度值会自动拆分为多个单列表示cell2table(c) %反向转换


1.40 表的读入写出

1.表与外部文件的读入和写出

2.认识函数

读入readtable

写出writetable

3.实例演示

%1_40xingming='zhangsan';'lisi';'wangwu';xuehao='1001';'1002';'1003';chengji=[89 95;90 87;88 84];t=table(xingming,xuehao,chengji)writetable(t,'student.txt') %写出数据到txt文件stu=readtable('student.txt') %从txt文件读入数据stu.chengji=[stu.chengji_1,stu.chengji_2] %上面写出再读入后,多列数据自动拆分,把拆分后的数据恢复成原先数据stu.chengji_1=[]stu.chengji_2=[]writetable(t,'student.xls') %写出数据到Excel文件stu=readtable('student.xls') %从Excel文件读入数据


1.41 日期时间型

1. 日期时间型的概念及其简单应用

2.认识函数

日期时间datetime

持续时间duration

3.概念

日期时间型(Dates and Time)数据具有灵活的显示格式和高达毫微秒的精度,并且可以处理时区、夏令时和平闰年等特殊因素

日期时间型数据有以下三种表示方式

Datetime型,表示日期时间点,是存储日期和时间数据的主要方法,它支持算术运算,排序,比较,绘图和格式化显示

Duration型,表示日期时间的持续长度

CalendarDuration型(略)

4.实例演示

%1_41%freexyndatetime(2018,8,8) %创建日期时间型,输入参数为:年、月、日t=datetime(2018,8,8,12,0,0) %输入参数为:年、月、日、时、分、秒d=duration(3,2,0) %创建持续时间型,时长3小时2分0秒years(1)days(1)hours(1)%% 运算t2=t+d %时间点和持续时间的运算结果仍为时间点t3=t-dt-days(4)hours(1)+minutes(30)t2>t %时间点的比较,时间越晚,则越大t3>thours(1)>minutes(30) %持续时间的比较,时间越长,则越大%% 显示格式t %时间点的显示格式设置datetime(t,'Format','y-MM-dd') %时间点显示格式,使用format属性设置datetime(t,'Format','y-MM-dd HH:mm:ss eeee') %y M d H m s e分别代表年、月、日、时、分、秒、星期d %持续时间显示格式设置duration(d,'Format','m') %m表示分钟,另外,h表示小时、s表示秒%% 补充[y m d]=ymd(t) %函数ymd获取时间点t中的年月日信息赋值给相应变量,另外,时分秒hms同理dateshift(t,'start','day',0:2) %时间推移方法获取时间序列,start表示返回一天的起点即0点,0:2推移2天char(t) %日期时间型转换为字符型,转换后可用字符型规则处理数据NaT %datetime型的数据,表示非时间,即缺失值。


1.42 缺失数据的处理

1.各类型缺失数据的创建、判断、替换、移位和处理方法

2.认识函数

替换standardizeMissing

替换为fillmissing

位置'MissingPlacement'

忽略'omitnan'

移除rmmissing

3.实例演示

%1_42%% 各类数据缺失值的创建a=[nan 1 2 3] %数值型缺失值s=[string(missing) "a" "b"] %字符串型缺失值t=[NaT datetime(2018,8,8)] %时间型缺失值%missing函数可创建不同数值类型的缺失值aa=[missing 1 2 3]ss=[missing "a" "b"]tt=[missing datetime(2018,8,8)]isnan(a) %判断数值型ismissing(a) %判断缺失值ismissing(s)ismissing(t)%% 缺失值的替换standardizeMissing(a,[2 missing]) %变量中参数替换为缺失值standardizeMissing(s,["b" missing])standardizeMissing(t,[datetime(2018,8,8) missing])fillmissing(a,'constant',0) %变量中缺失值替换成参数,'constant'和0表示把缺失值替换为常数0fillmissing(s,'constant',"fill")fillmissing(t,'constant',datetime(2019,9,9))%% 缺失值的移位(排序)sort(a,'MissingPlacement','last') %把变量a中的缺失值移位到最后%% 缺失值的运算max(a) %忽略nan求最大值sin(a) %nan的sin值就是nansum(a) %求和返回nan值sum(a,'omitnan') %忽略nansum(rmmissing(a)) %移除a中的缺失值


1.43 类型识别

1.判断数据的类型和类别

例如数值型(整数、浮点数、实数、无穷数、有限数、nan等)、字符(串)型、结构数组、元胞数组、表、函数句柄等

2.认识函数

变量信息whos

类型class

无穷大isinf

非值isnan

数值型isnumeric

实数isreal

有限值isfinite

综合判断isa

字符向量元胞数组iscellstr

3.简单总结数据类型

Matlab的基本类型(16个)

Matlab基本数据类型

4.实例演示

%1_43%freexynx=1whos xclass(x)isnan(x)isnan(nan)isinf(x)isinf(1e309)isnumeric(x)isnumeric('a')isreal(x)isreal(1+2i)isfinite(x)isfinite(1e309)isa(x,'numeric') %判断数值型isa(x,'integer') %判断整数isa(int16(1),'integer') %判断int16(1)是否为整数isa(x,'int8') %判断x是否为8位整型isa(int8(1),'int8')isa(x,'float') %判断浮点型isa(x,'double') %判断双精度浮点型isa(x,'single') %判断单精度浮点型isa(x,'logical') %判断逻辑型isa(true,'logical')isa(x,'char') %判断字符型isa('a','char')isa(x,'string') %判断字符串型isa('a','string')isa("b",'string')isa(x,'struct') %判断结构数组isa(x,'table') %判断表数组isa(x,'cell') %判断元胞数组isa(x,'function_handle') %判断函数句柄isa(x,'datetime') %判断日期时间型isdatetime(x)iscellstr('11') %判断元胞数组是否由字符构成(是)iscellstr(11) %同上(不是,是双精度数值)

(第四章结束,后接第五章,继续加油喔...)

相关参考

数字图像处理的MATLAB实现(「十五」MATLAB图像处理之一)

...中有一个专门的图像处理工具箱(ImageProcessingToolbox),利用该工具箱,我们完成绝大多数的图像处理工作。MATLAB支持四种图像类型,即RGB图像、索引图像、灰度图像和二值图像。实质上,MATLAB还支持另一种图像类型,即多帧图...

灰度图像二值化处理matlab(图像二值化的阈值求法)

图像二值化的操作,就是寻找一个合适的阈值T,把图像中所有像素值小于等于该阈值的像素点设置为一个像素值,同时把图像中所有像素值大于该阈值的像素点设置为另一个像素值。也就是说,二值化之后整幅图像中只有两种...

灰度图像二值化处理matlab(图像二值化的阈值求法)

图像二值化的操作,就是寻找一个合适的阈值T,把图像中所有像素值小于等于该阈值的像素点设置为一个像素值,同时把图像中所有像素值大于该阈值的像素点设置为另一个像素值。也就是说,二值化之后整幅图像中只有两种...

日本sumdoy产品介绍(Matlab代码批处理中国地面气象日值数据集(2400站点数据集))

气象数据一直是一个价值较高的数据,它被广泛用于各个领域的研究当中。地理遥感生态网平台www.gisrs.cn提供的气象数据包括有气温、气压、相对湿度、降水、蒸发、风向风速、日照等多种指标,但是包含了这些全部指标的气象...

数学的定义是什么(代码定义的三个数学函数是什么?数学在音乐上的发现有何作用?)

文|狂人日际编辑|狂人日际—◆代码定义的三个数学函数◆—我们的代码定义了三个数学函数,游戏尺度、游戏和弦和游戏立体尺度,我们将在本文后面解释我们的例子的使用。代码将在任何计算机上运行,有声音设备和支持这...

悬臂梁的振动问题(微分求积法求解悬臂梁自由振动程序)

...值计算方法。这种算法由于不依赖泛函和变分原理,具有数学原理简单、计算精度高,计算量和内存需求小。微分求积法从提出至今,由于其具有计算量小和精度高等优点而不断受到重视,目前对该数值方法本身的研究尽管已经...

电气自动化技术主要学什么

...概论、嵌入式系统原理与设计。2、主要基础课程:高等数学、线性代数、概率统计、工程数学(复变函数与积分变化)、大学物理、现代工程制图、计算机基础及C程序设计语言

电气自动化技术主要学什么

...概论、嵌入式系统原理与设计。2、主要基础课程:高等数学、线性代数、概率统计、工程数学(复变函数与积分变化)、大学物理、现代工程制图、计算机基础及C程序设计语言

初中数学三角函数

1、勾股定理:直角三角形两直角边a、b的平方和等于斜边c的平方a2+b2=c2。2、在Rt△ABC中,∠C为直角,则∠A的锐角三角函数为(∠A可换成∠B)。3、任意锐角的正弦值等于它的余角的余弦值;任意锐角的余弦值等于它的余角的正弦...

数学必修一第二张试卷及答案(2020必修1,课时训练23 二次函数与二次方程、不等式)

今天给大家带来了高中数学:必修一第二章2.3二次函数与一元二次方程、不等式核心题目课时训练,高一的老师和同学看过来啦~更多高中知识干货,关注我哦,长期更新!注:长期更新,解析版另发!需要电子版请私信.....