本章介绍MATLAB的一些基础知识,包括基础数据类型、运算符和特殊的符号等,以及matlab中日期和时间的表示方法、计时函数的应用。
目录
0.数据类型
在MATLAB中一共有15种数据类型,分别是8种整型数据、单精度浮点型、双精度浮点型、逻辑型、字符串型、单元数组、结构体类型和函数句柄,如下表所示:
数据类型 | 说明 |
int8、int16、int32、int64 | 有符号整型 |
uint8、uint16、uint32、uint64 | 无符号整型 |
single | 单精度浮点型 |
double | 双精度浮点型 |
logical | 逻辑型 |
char | 字符串型 |
cell | 单元数组型 |
struct | 结构体型 |
function_handle | 函数句柄型 |
输入如下命令,在工作区打开各个变量观察:
>> a1 = int8(-16);//整型
>> b1 = single(2.5);//浮点型
>> c1 = 'hello';//字符串型
>> d1 = false;//逻辑型
>> e1.name = 'TOM';//结构体型
>> f1{1,1} = 100;//数组型
>> g1 = 12;//双精度浮点型
>> h = @cos;//函数句柄型
由g1可知,matlab输入数据的类型默认都是double类型。输入whos也可以查找到相关的变量信息。
<0>数值类型
在MATLAB中,数值类型分为整数和浮点数,整数分为有符号整数和无符号整数,浮点数分为单精度浮点数和双
精度浮点数。下面介绍整数、浮点数和复数,以及数值的显示格式等。
(1)整数
>> a = 24;
>> b1 = int8(a);
>> c = 'hello';
>> b2 = int8(c);
在MATLAB中,还有很多的取整函数,可以采用不同的方法将小数转换为整数。
函数 | 说明 |
round | 向最接近的整数取整,如果小数为0 5,则取绝对值大的整数 |
fix | 向0取整 |
floor | 不大于该数的最接近整数 |
ceil | 不小于该数的最接近整数 |
(2)浮点数
在MATLAB中,浮点数包括单精度浮点数(single) 和双精度浮点数(double)。其中双精度浮点数是MATLAB中默认的数据类型。在MATLAB中,双精度浮点采用8个字节,即64位来表示,其中第63位表示符号,0为正,1为负,第52- - 62位表示指数部分,第0-51位表示小数部分。在MATLAB中,单精度浮点数采用4个字节,即32位来表示, 其中第31位为符号位,0为正,1为负,第23- 30位为指数部分,0-22位为小数部分。单精度浮点数比双精度浮点数能够表示的数值范围和数值精度都小。
>> d1=[realmin('single') realmax('single')];
>> d2=[realmin('double') realmax('double')];
通过该命令可以知道某种数据类型的取值范围。
(3)复数
复数是对实数的扩展,包含实部和虛部两部分,虛部的单位是-1的平方根。在MATLAB中,采用i或j表示虛部的单位。可以采用赋值语句直接产生复数,也可以采用函数complex( )来产生复数。
函数 | 说明 |
complex(a, b) | 创建复数,a为实部,b为虚部 |
real(z) | 得到复数z的实部 |
imag(z) | 得到复数z的虚部 |
abs(z) | 得到复数z的模 |
angle(z) | 得到复数z的角度 |
conj(z) | 得到复数z的共轭复数 |
<1>逻辑类型
MATLAB中的运算包括数值计算、关系计算和逻辑计算。关系计算和逻辑计算的结果为逻辑类型。逻辑类型数据只有逻辑真和逻辑假。MATLAB中用1代表逻辑真,用函数true表示;用0代表逻辑假,用函数false表示。逻辑真和逻辑假都占用1个字节的存储空间。此外,可以采用函数logical( )将数值型转换为逻辑型,任何非0数值转换为逻辑真(即1);数值0转换为逻辑假(即0)。
<2>字符和字符串
在MATLAB中,字符型数据类型用char表示。字符和字符串不进行区分,将单个字符看成是的字符串,都用单引号(')括起来。字符串中的每个字符占用2个字节的存储空间。
<3>函数句柄
在MATLAB中,通过函数句柄来间接调用函数,函数句柄的数据类型为function_ handle。 函数句柄可以通过符号
@后面跟函数命令来创建,例如程序fhandle=@cos,创建了函数cos( )的函数句柄,以后就可以通过函数句柄fhandle来间接调用函数cos( )。
函数 | 说明 |
func2str(fhandle) | 将函数句柄转换为字符串 |
str2func(str) | 将字符串转换为函数句柄 |
functions(fhandle) | 返回包含函数信息的结构体变量 |
isa(a, 'function_handle') | 判断是否为函数句柄 |
isequal(fhandle1, fhandle2) | 检测两个函数句柄是否对应同一函数 |
<4>单元数组
单元数组是一种比较特殊的数据类型,每个元素都以单元的形式存在。在MATLAB中,采用大括号({})建立单元数组,也可以采用函数cell( )来建立单元数组。在获取单元数组的元素时,也采用大括号表示下标。
1.函数cell( ) 2.函数celldisp( ) // 修改元胞数组名字 3.函数cellplot( )//显示元胞数组成员的字节及内容 4.函数iscell( )//判断是否为元胞数组,返回值为布尔值 5.函数num2cell( )//将矩阵转化为元胞数组 6.函数cell2struct( )//例如cell2struct(结构体成员内容元胞,结构体成员名称元胞,2);
>> c1 = {'USA','China';[0,1,2,3,4,5],100};
>> c2{2,2} = [];
>> c3 = {1,1};
>> c4{1,1};//错误
>> c = {'USA','China';[0,1,2,3,4,5],100};
>> c{2,2} = [];
>> c{1,1};
单元数组操作如下:
>> c={'中国','China';[1:4;2:5],10};
>> c{2,4}=100;//必须赋值,否则报错
>> c(1,:);
>> c(:,3)=[];
>> d={'北京','Beijing';[],3};
>> e=[c,d];
<5>结构体类型
结构体是按照成员变量名组织起来的不同数据类型数据的集合。结构体类似于C语言的结构体数据。每个成员变量用指针操作符“.”表示,例如A.name表示结构体变量A的name成员变量。在MATLAB中结构体类型常用的函数如表所示:
函数 | 说明 |
struct | 建立结构体变量 |
isstruct | 是否为结构体 |
isfield | 是否为结构体成员 |
fleldnames | 结构体变量成员的名字 |
substruct | 子结构体 |
struct2cell | 结构体变量转换为单元型变量 |
orderfields | 对结构体变量的成员排序 |
getfield | 得到结构体的成员变量 |
setfield | 设置结构体的成员变量 |
rmfield | 删除结构体的成员变量 |
cell2struct | 单元型变量转换为结构体变量 |
1.数据显示格式
在MATLAB中,可以采用函数format( )确定数值类型的显示格式。改变数值的显示格式后会一直有效,直到再次利用函数format()进行修改。
format函数格式 | 说明 |
format short或format('short') | 默认显示,保留小数点后4位 |
format long或format('long') | 有效数字16位 |
format long e | 有效数字16位加3位指数。 |
format short e | 有效数字5位加3位指数 |
format bank或format('bank') | 保留两位小数位 |
format +或format('+') | 只给出正、负 |
format rational或format (' rational’) | 以分数形式表示 |
format hex或format('hex') | 16进制数 |
format long g | 15位有效数 |
format short g | 5位有效数 |
2.运算符
在MATLAB中,提供了丰富的运算符,主要包括算数运算、关系运算和逻辑运算。算数运算用于数值计算。关系运算和逻辑运算的返回值为逻辑型变量,其中1代表逻辑真,0代表逻辑假。
<1>算术运算符
MATLAB提供的基本算术运算有:加(+)、减(-)、乘(*) 、除(1)和乘方(^)。常用的算数运算符如表所示。对于标量和数组,是以元素为单元进行运算。
标量和数组 | 矩阵 | 功能 |
+ | + | 加 |
- | - | 减 |
.* | * | 乘 |
./ | / | 左除 |
.\ | \ | 右除 |
.^ | ^ | 乘方 |
.' | ' | 转置 |
<2>关系运算符
关系运算用于比较两个操作数的大小,返回值为逻辑型变量。在MATLAB中,关系运算符如表所示。当2个操作数都是数组或矩阵时,这2个操作数的维数必须相同,否则会显示出错信息。
关系运算符 | 说明 | 函数 |
< | 小于 | lt |
<= | 小于等于 | le |
> | 大于 | gt |
>= | 大于等于 | ge |
== | 恒等于 | eq |
~= | 不等于 | ne |
<3>逻辑运算符
在MATLAB中,有两个快速逻辑运算符,逻辑与(&&)和逻辑或(||),如表所示。&&运算符和&运算符非常相近。&&运算符,在参与运算的第一个操作数为假时,直接返回假,不再计算第二个操作数。||操作符,在参与运算的第一个操作数为真时,直接返回真,不再判断第二个操作数。
运算符 | 说明 |
&& | 快速逻辑与,当第一个操作数为假时,直接返回假,否则和&相同 |
|| | 快速逻辑或,当第一个操作数为真时,直接返回真,否则和|相同 |
在MATL AB中,可以对二进制数进行逐位逻辑运算,并将运算的结果转换为十进制数。可以利用函数dec2bin将十进制数转化为二进制数。
函数 | 函数说明 |
bitand(A,B) | 逐位逻辑与 |
bitor(A,B) | 逐位逻辑或 |
bitcmp(A,B) | 逐位逻辑非 |
bitxor(A,B) | 逐位逻辑异或 |
<4>运算优先级
在MATLAB中进行算数运算、逻辑运算和关系运算时,不同的运算符有不同的优先级。在进行运算时,按照运算符的优先级,从高到低进行运算。对于相同优先级的运算符,按照从左到右的顺序进行。
3.日期和时间的表示
在MATLAB中,采用函数clock( )获取当前的日期,为一个向量,分别表示年、月、日、时、分和秒;函数date()获得当前的日期;函数now( )返回采用双精度数据表示的当前日期;函数calender( )显示当月的日历;函数weekday( )产生星期几,返回值包括星期的数字和星期的字符串;函数eomday( )返回一个月的最后一天。
在MATLAB中,提供了3种表示日期的格式,分别是双精度日期、字符串以及数值向量。这些日期格式可以互相转换,通过函数datestr( )、函数datevec( )和函数datenum( )。函数datestr()将日期数字和日期向量转化为日期字符串。函数datenum( )将日期字符串和日期向量转化为数字。函数datevec( )将日期数字和日期字符串转化为日期向量。
采用函数tic、toc、 cputime和etime等进行计时。函数tic和函数toc:函数tic启动-一个秒表,函数toc停止这个秒表,并计算出所经历的时间。这两个函数配合使用,可以计算程序或函数的运行时间。函数cputime:该函数返回用秒表示的、从当前的Matlab启动之后所用的CPU时间,单位为秒。函数etime(t1, t0):该函数返回参数和之间的时间,单位为秒。
4.常量与变量
在MATLAB中,有一-些常量已经预先进行了定义,这些常量如表所示。在MATLAB中,用INF 或inf表示无穷大。MATLAB允许的最大数是21024,如果超过这个数,就被认为是无穷大。
常量 | 说明 |
ANS或ans | 默认变量名,保存最后一次运算的结果 |
pi | 圆周率 |
INF或inf | 无穷大 |
NaN或nan | 不定值0/0 |
realmax | 最大的正实数 |
realmin | 最小的正实数 |
eps | 浮点数的相对误差e |
i或j | 复数单位,-1 的平方根。 |
nargin | 函数的输入参数个数 |
nargout | 函数的输出参数个数 |
varargin | 可变的输入参数个数 |
varargout | 可变的输出参数个数 |
beep | 使计算机发出“嘟嘟”声 |