数学函数式组利用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)是一种具有容器特性的数据类型,它使用称为字段的数据容器对相关数据进行分组,每个字段可以包含任何类型或大小的数据。(与元胞数组描述类似,都是容器型数据类型,组织结构不同)
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.表类型数据的创建、索引和自身属性的用法
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个)
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还支持另一种图像类型,即多帧图...
图像二值化的操作,就是寻找一个合适的阈值T,把图像中所有像素值小于等于该阈值的像素点设置为一个像素值,同时把图像中所有像素值大于该阈值的像素点设置为另一个像素值。也就是说,二值化之后整幅图像中只有两种...
图像二值化的操作,就是寻找一个合适的阈值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二次函数与一元二次方程、不等式核心题目课时训练,高一的老师和同学看过来啦~更多高中知识干货,关注我哦,长期更新!注:长期更新,解析版另发!需要电子版请私信.....