Matlab中有15种基本数据类型,主要是整型、浮点、逻辑、字符、日期和时间、结构数组、单元格数组以及函数句柄等。Matlab主要数据类型的结构图如下所失:

EDA中国门户网站 p%q+c-sx
整型:通过intmax(class)和intmin(class) 函数返回该类整型的最大值和最小值,例如intmax(‘int8’)=127

浮点
浮点数:REALMAX('double')和REALMAX('single')分别返回双精度浮点和单精度浮点的最大值,REALMIN('double')和REALMIN ('single')分别返回双精度浮点和单精度浮点的最小值。
逻辑
Logical:下例是逻辑索引在矩阵操作中的应用,将5*5矩阵中大于0.5的元素设定为0:EDA中国门户网站_C(h'a4MR
EDA中国门户网站m
`QI-^%\9IL5f)I
A = rand(5);EDA中国门户网站R
@;j;Yp/B`zm
A(A>0.5)=0
字符
Matlab中的输入字符需使用单引号。字符串存储为字符数组,每个元素占用一个ASCII字符。如日期字符:DateString=’9/16/2001’ 实际上是一个1行9列向量。构成矩阵或向量的行字符串长度必须相同。可以使用char函数构建字符数组,使用strcat函数连接字符。
例如,命令 name = ['abc' ; 'abcd'] 将触发错误警告,因为两个字符串的长度不等,此时可以通过空字符凑齐如:name = ['abc ' ; 'abcd'],更简单的办法是使用char函数:char(‘abc’,’abcd’),Matlab自动填充空字符以使长度相等,因此字符串矩阵的列纬总是等于最长字符串的字符数,例如size(char(‘abc’,’abcd’))返回结果[2,4],即字符串’abc’实际存在的是’abc ’,此时如需提取矩阵中的某一字符元素,需要使用deblank函数移除空格如name =char(‘abc’,’abcd’); deblank(name(1,:))。此外,Matlab同时提供一种更灵活的单元格数组方法,使用函数cellstr可以将字符串数组转换为单元格数组:
data= char(‘abc’,’abcd’)
\$IW E'm\e8R@8p0length(data(1,:)) ->? 4EDA中国门户网站%IX x-}|3x
cdata=cellstr(data)EDA中国门户网站8kQ"lP,nD
length(cdata{1}) ->?3
常用的字符操作函数
blanks(n) 返回n个空字符EDA中国门户网站~] Hi%x%u
deblank(s) 移除字符串尾部包含的空字符
2o([$W H1u*i0eval(string) 将字符串作为命令执行EDA中国门户网站T
L9@Fs4zp weF
findstr(s1,s2) 搜索字符串
z0Q4|6\&d?t
G*^0ischar(s) 判断是否字符串
_ Sbw(y.R"vs0isletter(s) 判断是否字母EDA中国门户网站3Y B5`U"jzn!{V
lower(s) 转换小写EDA中国门户网站p%Zg#@H,OulC`
upper(s) 转换大写
,t Us!}X:\\#Z0strcmp(s1,s2) 比较字符串是否相同
s7v
Jx!ER3a0strncmp(s1,s2,n) 比较字符串中的前n个字符是否相同EDA中国门户网站jYI^A-P'I
strrep(s1,s2,s3) 将s1中的字符s2替换为s3
日期和时间
Matlab提供三种日期格式:日期字符串如’1996-10-02’,日期序列数如729300(0000年1月1日为1)以及日期向量如 1996 10 2 0 0 0,依次为年月日时分秒。
常用的日期操作函数
datestr(d,f) 将日期数字转换为字符串
%p n?8|\ sfA0datenum(str,f) 将字符串转换为日期数字EDA中国门户网站3Zg!U%w-b6v'BZ.H4p
datevec(str) 日期字符串转换向量EDA中国门户网站,B-pB5N*v)G(~
weekday(d) 计算星期数
hL7K;_UgZ0eomday(yr,mth) 计算指定月份最后一天
+R B ?K0j ?P }0calendar(str) 返回日历矩阵
0cX:N)r
Nz$U0clock 当前日期和时间的日期向量
oB6A+@.[r[0date 当前日期字符串
]JYlAp6HWe0now 当前日期和时间的序列数
结构
结构是包含已命名“数据容器”或字段的数组。结构中的字段可以包含任何数据,例如:
EDA中国门户网站{rD/M |"XQgB
U4kE,N.m"X-~eq0
构建结构数组:赋值方法
下面的赋值命令产生一个名为patient的结构数组,该数组包含三个字段:EDA中国门户网站!A j9W8g)R)s*S
7Dj0~Gq2v"i}0patient.name = 'John Doe';EDA中国门户网站;b9SAw Ek7]@)lS r
patient.billing = 127.00;
/?eh2`SL;m5v-t!~
?g0patient.test = [79 75 73; 180 178 177.5; 220 210 205];
在命令区内输入patient可以查看结构信息:
-x,d M T'Q0
c&h;f{9dnlKM,O0name: 'John Doe'EDA中国门户网站"O"C W\6Q+r"\L
billing: 127EDA中国门户网站yewvU
test: [3x3 double]
继续赋值可扩展该结构数组:
!Z
rPt!]QuU1Z"I0
`
J8jrP` D6p7o [ z0patient(2).name = 'Ann Lane';EDA中国门户网站X)R[lK\+Wch
patient(2).billing = 28.50;
!L5K"mw)L0patient(2).test = [68 70 68; 118 118 119; 172 170 169];
赋值后结构数组变为[1 2]。
构建结构数组:struct函数EDA中国门户网站p?N_4gXt9_b
EDA中国门户网站b IsN#}
函数基本形式为:strArray = struct('field1',val1,'field2',val2, ...)
例如:
weather(1) = struct('temp', 72,'rainfall', 0.0); weather(2) = struct('temp', 71,'rainfall', 0.1);
I;~Q @tx0weather = repmat(struct('temp', 72, 'rainfall', 0.0), 1, 3);EDA中国门户网站'H;{z wE
]8t$?(h
weather = struct('temp', {68, 80, 72}, 'rainfall', {0.2, 0.4, 0.0});
/P
IT
\ u;ri0 EDA中国门户网站nsC*aN1C_9a
访问结构数据

以下都是合法的结构数组访问命令:EDA中国门户网站 QV;W,c6K2k
ynt7JO0mypatients = patient(1:2) 获取子结构数据
%i;xFhM.twD&h0mypatients(1) 访问结构数据EDA中国门户网站;uu_-z { b6p;CrE
patient(2).name 访问结构数据中的特定字段
y't)Yx%TR ~Fo?n0patient(3).test(2,2) 访问结构数据中的特定字段(该字段为数组)
BUG7gn~5_w0bills = [patient.billing] 访问多个结构
XS!X:`Np\0tests = {patient(1:2).test} 提取结构数据转换成单元格数组
使用结构字段的动态名称
通过structName.(expression)可以赋予结构字段名称并访问数据。例如字段名为expression、结构名为structName,访问其中第7行1至25列数据可以使用命令:structName.(expression)(7,1:25)。
例如,存在一个学生每周成绩数据结构数组,其数据通过以下方式建立:
testscores.wang.week(1:25) = ...EDA中国门户网站3^+n%b2cmN w H
[95 89 76 82 79 92 94 92 89 81 75 93 ...EDA中国门户网站&Qt#sDm4aC+Wj
85 84 83 86 85 90 82 82 84 79 96 88 98];
testscores.chen.week(1:25) = ...EDA中国门户网站e'p w)QpC
[87 80 91 84 99 87 93 87 97 87 82 89 ...EDA中国门户网站4a ^5HH{.};p(y
86 82 90 98 75 79 92 84 90 93 84 78 81];
即结构名为testscores,字段使用每个学生的名称命名,分别为wang和chen,每个学生下面包含名为week的成绩结构数组。
现计算给定结构名称、学生名称和起止周数的平均分数。
在命令窗口中输入 edit avgscore.m,输入以下代码后保存文件:
function avg = avgscore(struct,student, first, last)
!H!uF$o6V_cM0avg = sum(struct.(student).week(first:last))/(last - first + 1);
在命名窗口中输入:avgscore(testscores, 'chen', 7, 22) 计算学生陈从第7周到第22周的平均分数。
添加和删除结构字段
命令[struct](index).(field)可添加或修改字段。如patient(2).ssn = '000-00-0000' 在结构patient中添加一个名为ssn的字段。
删除字段使用rmfield函数,如patient2 = rmfield(patient, 'name') 删除name字段并产生新的结构。
单元格数组
单元格数组提供了不同类型数据的存储机制,可以储存任意类型和任意纬度的数组。

访问单元格数组的规则和其他数组相同,区别在于需要使用花括号{}访问,例如A{2,5}访问单元格数组A中的第2行第5列单元格。
构建单元格数组:赋值方法
使用花括号标识可直接创建单元格数组,如:
A(1,1) = {[1 4 3; 0 5 8; 7 2 9]};
j1wL&i'Kr;p'x+Xo+M0A(1,2) = {'abcd'};
&}Q.t-y+wXE0A(2,1) = {3+7i};EDA中国门户网站0`MD7rMp6z pM
A(2,2) = {-pi:pi/10:pi};
上述命令创建2*2的单元格数组A。继续添加单元格元素直接使用赋值如A(2,3)={5}即可,注意需使用花括号标识。简化的方法是结合使用花括号(单元格数组)和方括号()创建,如C = {[1 2], [3 4]; [5 6], [7 8]};
构建单元格数组:函数方法
3p)V7}_x]
aJ0 EDA中国门户网站zq3l%}a;@#r:v
Cell函数。如:
7na Vtq8K0M4RY0B = cell(2, 3);EDA中国门户网站&w)n
v(f'W d#fO0?*O
B(1,3) = {1:3};
访问数据
通过索引可直接访问单元格数组中的数据元素,例如:EDA中国门户网站0j_
Q]oVH(U
7N
~)A+D2gF@cO;F0N{1,1} = [1 2; 4 5];EDA中国门户网站
IlduO7G
N{1,2} = 'Name';
~)cmFGT3HY0h0N{2,1} = 2-4i;EDA中国门户网站X,f;a ?vQ+@ AB^4v
N{2,2} = 7;EDA中国门户网站Y:~-p:E6o\2@
EDA中国门户网站XT9a+`$b*Y,A
c = N{1,2}EDA中国门户网站 fV.C4xF;g p/ro
d = N{1,1}(2,2)
函数句柄
函数句柄是用于间接调用一个函数的Matlab值或数据类型。在调用其它函数时可以传递函数句柄,也可在数据结构中保存函数句柄备用。通过命令形式 fhandle = @functionname 可以创建函数句柄,例如 trigFun=@sin,或匿名函数sqr = @(x) x.^2;。
使用句柄调用函数的形式是 fhandle(arg1, arg2, ..., argn) 或 fhandle()(无参数)。如:EDA中国门户网站dr
c4]2mei i
trigFun(1)。例:
function x = plotFHandle(fhandle, data)
nR.G Z-Xb0plot(data, fhandle(data))
plotFHandle(@sin, -pi:0.01:pi)