l 2.1 常量与变量
l 2.1.1 特殊常量
l
l >> eps %浮点相对精度(机器零阈值)
l ans =
l 2.2204e-016
l >> pi %圆周率
l ans =
l 3.1416
l >> realmax %最大正实数
l ans =
l 1.7977e+308
l >> realmin %最小正实数
l ans =
l 2.2251e-308
l >> clock %挂钟
l ans =
l 1.0e+003 *
l 2.0070 0.0030 0.0120 0.0200 0.0270 0.0033
l >> fix(clock)
l ans =
l 2007 3 12 20 28 19
l >> date %日期
l ans =
l 12-Mar-2007
l 其它常用(固定)变量
l NaN %不定值
l nargin %函数输入参数数目
l nargout %函数输出参数数目
l i,j %虚数单位
l tic %秒表计时开始
l toc %秒表计时结束
l 2.1.2 数值描述
l >> 3
l ans =
l 3
l >> -99
l ans =
l -99
l >> 0.001
l ans =
l 1.0000e-003
l >> 9.45
l ans =
l 9.4500
l >> 1.3e-3
l ans =
l 0.0013
上机练习:在命令提示符“>>”后面输入这些数,看看得到什么样的结果!
l >> 4.5e33
l ans =
l 4.5000e+033
l 数值通常采用“占用64位内存的双精度”表示,其相对精度是eps
l >> 3==3+eps %判断两数是否相等
l ans =
l 1
l >> 3==3+1e-5
l ans =
l 0
l >> 3==(3+(eps*10))
l ans =
l 0
l 2.1.3 一般变量
l 一、 命名规则
l (1)变量名区分大小写
l (2)变量名以字母开头,可以由字母,下划线数字构成,其长度不超过63位(不同版本有效位会有所不同),变量名不可以含有空格、标点、运算符.
例如
在MATLAB命令窗口输入命令:
>> x=1+2i; %一般写成x=1+2*i
>> y=3-sqrt(17);
>> z=(cos(abs(x+y))-sin(78*pi/180))/(x+abs(y));
注:pi, i由系统本身定义的变量,在使用时,应尽量避免对这些变量重新赋值。
二、内存变量的管理
1.内存变量的删除与修改
MATLAB工作空间窗口专门用于内存变量的管理。在工作空间窗口中可以显示所有内存变量的属性。当选中某些变量后,再单击Delete按钮,就能删除这些变量。当选中某些变量后,再单击Open按钮,将进入变量编辑器。通过变量编辑器可以直接观察变量中的具体元素,也可修改变量中的具体元素。
clear命令用于删除MATLAB工作空间中的变量。who和whos这两个命令用于显示在MATLAB工作空间中已经驻留的变量名清单。who命令只显示出驻留变量的名称,whos在给出变量名的同时,还给出它们的大小、所占字节数及数据类型等信息。
2.2 数组
Matlab中的数组包含:行向量,列向量,矩阵及多维数组.
l 2.2.1 建立数组
l 1、直接赋值法
l >> X1=[0 1 2 3 0.1*pi 10*pi]
l X1 =
l 0 1.0000 2.0000 3.0000 0.3142 31.4159
l >> X2=[1 2 3;4 5 6;7 8 9]
l X2 =
l 1 2 3
l 4 5 6
l 7 8 9
l >> X3=[1 2 3
l 4 5 6
l 7 8 9]
l X3 =
l 1 2 3
l 4 5 6
l 7 8 9
l 2、冒号法
l 语法:初始值:步长:终值
l >> X4=1:5
l X4 =
l 1 2 3 4 5
l >> X5=1:2:8
l X5 =
l 1 3 5 7
l >> X6=(2:8)*pi
l X6 =
l 6.2832 9.4248 12.5664 15.7080 18.8496 21.9911 25.1327
l >> X7=(2:0.5:4)*pi
l X7 =
l 6.2832 7.8540 9.4248 10.9956 12.5664
l 3、linspace法、logspace法
l 语法:linspace(初值,终值,元素的个数)
l logspace(初值,终值,元素的个数)
l >> X8=linspace(0,2,11) %在区间(0,2)插入9个数
l X8 =
l Columns 1 through 10
l 0 0.2000 0.4000 0.6000 0.8000 1.0000 1.2000 1.4000
l
l 1.6000 1.8000
l Column 11
l 2.0000
l >> X9=logspace(0,2,11) %在10^0与10^2间插入9个数
l X9 =
l Columns 1 through 10
l 1.0000 1.5849 2.5119 3.9811 6.3096 10.0000 15.8489 25.1189
l 39.8107 63.0957
l Column 11
l 100.0000
l >> X10=10.^X8 %一个数与数组的运算
l X10 =
l Columns 1 through 10
l 1.0000 1.5849 2.5119 3.9811 6.3096 10.0000 15.8489 25.1189
l 39.8107 63.0957
l Column 11
l 100.0000
l 4、拼接法
l >> A=[1 2 3]
l A =
l 1 2 3
l >> B=4:6
l B =
l 4 5 6
l >> AB1=[A,B]
l AB1 =
l 1 2 3 4 5 6
l >> AB2=[A;B]
l AB2 =
l 1 2 3
l 4 5 6
l >> C=AB2
l C =
l 1 2 3
l 4 5 6
l >> D=[0 1]' %转置
l D =
l 0
l 1
l >> CD=[C,D]
l CD =
l 1 2 3 0
l 4 5 6 1
l 2.2.2 数组的引用
l 1.一维数组
l 设X是一维数组,X(n): X的第n个元素
l X(n1:n2): X的第n1至n2个元素
l >> X=(1:8)*pi
l X =
l 3.1416 6.2832 9.4248 12.5664 15.7080 18.8496 21.9911 25.1327
l >> X(3)
l ans =
l 9.4248
l >> X(4:8) %访问X的第4至第8个元素
l ans =
l 12.5664 15.7080 18.8496 21.9911 25.1327
l >> X(end:-1:1) %元素倒排
l ans =
l 25.1327 21.9911 18.8496 15.7080 12.5664 9.4248 6.2832 3.1416
l >> X(5:-1:1)
l ans =
l 15.7080 12.5664 9.4248 6.2832 3.1416
l >> X(5:-2:1)
l ans = 15.7080 9.4248 3.1416
l 2.二维数组
l 设X是二维数组,X(m,n): X的第m行第n列元素
l X(m1,:): X的第m1行元素
l X(:,n1): X的第n1列元素
l X(k): X的第k个元素(单下标表示)
l >> A=reshape(1:9,3,3)
l A =
l 1 4 7
l 2 5 8
l 3 6 9
l >> A(1,2) %A的第1行第2列元素
l ans =
l 4
l >> A(6) %A的第6个元素
l ans =
l 6
l >> A(2,:)
l ans =
l 2 5 8
l >> A(:,2)
l ans =
l 4
l 5
l 6
l >> A(1:2,3)
l ans =
l 7
l 8
l >> A(end:-1:1,:)
l ans =
l 3 6 9
l 2 5 8
l 1 4 7
l 2.2.3细胞数组与结构数组
l 1. 细胞数组(cell)
l 细胞数组是以单元为元素的数组,其元素可以是实数矩阵、字符串数组、复数向量,元素可以是不同数值的数据类型.
l (1) 细胞数组的创建
l 左标志法
l >> C{1,1}=4+6i; %创建细胞数组C
l >> C{1,2}='Guangxi University';
l >> C{2,1}=[1 2 3;4 5 6;7 8 9];
l >> C{2,2}=[1 2 3 4 5 6 7 8 9];
l
l >> C
l C =
l [4.0000+ 6.0000i] 'Guangxi University'
l [3x3 double] [1x9 double]
l
l >> celldisp(C)
l C{1,1} =
l 4.0000 + 6.0000i
l C{2,1} =
l 1 2 3
l 4 5 6
l 7 8 9
l C{1,2} =
l Guangxi University
l C{2,2} =
l 1 2 3 4 5 6 7 8 9
l 右标志法
l >> D(1,1)={4+6i}; %创建细胞数组D,与C相同
l >> D(1,2)={'Guangxi University'};
l >> D(2,1)={[1 2 3;4 5 6;7 8 9]};
l >> D(2,2)={[1 2 3 4 5 6 7 8 9]};
l >> D
l D =
l [4.0000+ 6.0000i] 'Guangxi niversity'
l [3x3 double] [1x9 double]
l >> celldisp(D)
l D{1,1} =
l 4.0000 + 6.0000i
l D{2,1} =
l 1 2 3
l 4 5 6
l 7 8 9
l D{1,2} =
l Guangxi University
l D{2,2} =
l 1 2 3 4 5 6 7 8 9
l >> E=C{2,1}
l E =
l 1 2 3
l 4 5 6
l 7 8 9
l >> F=C{2,1}(3,1)
l F =
l 7
l >> F=C{1,2}(1,5)
l F =
l g
l 直接输入法
l >> G={4+6*i,‘Guangxi University’;[1 2 3;4 5 6;7 8 9],[1 2 3 4 5 6 7 8 9]} %与C,D相同,与一般数组相同
l G =
l [4.0000 + 6.0000i] 'Guangxi University'
l [3x3 double] [1x9 double]
l >> H={'Boy';'Girl'}
l H =
l 'Boy'
l 'Girl'
l >> GH=[G,H] %细胞数组的合并,与一般数组相同
l GH =
l [4.0000 + 6.0000i] 'Guangxi University' 'Boy'
l [3x3 double] [1x9 double] 'Girl'
l >> GH{:} %将数组每一个元素显示出来
l ans =
l 4.0000 + 6.0000i
l ans =
l 1 2 3
l 4 5 6
l 7 8 9
l ans =
l Guangxi University
l ans =
l 1 2 3 4 5 6 7 8 9
l ans =
l Boy
l ans =
l Girl
l 2. 结构数组(structer)
l 每一个结构数组包含数个字段(Fields),而各个字段包含各个不同的类型的数据,例如下面是包含学生资料的结构数组
l >> ;李小二'
l student =
l name: '李小二'
l >> ;200601';
l >> ‘[60 70 80]’; %字符串
l >> student
l student =
l name: '李小二'
l id: '200601'
l scores: '[60 70 80]'
l >> [60 70 80]; %改变成绩数据类型
l >> student
l student =
l name: '李小二'
l id: '200601'
l scores: [60 70 80]
l >> '[60 70 80]';
l >> Student=struct(‘name’,‘李大三’, ‘id’,‘200602’,‘scores’,[72 34 89]) %另一方法创建结构数组,注意字母大小写,与前面的student不同
l Student =
l name: '李大三'
l id: '200602'
l scores: [72 34 89]
l >> student(2).name=‘王五’; %追加元素
l >> student(2).id='200602';
l >> student(2).scores='[83 99 100]';
l >> student
l student =
l 1x2 struct array with fields:
l name
l id
l scores
l >> student(1)
l ans =
l name: '李小二'
l id: '200601'
l scores: '[60 70 80]'
l >> student(2)
l ans =
l name: '王五'
l id: '200602'
l scores: '[83 99 100]'
l >> student(3)=struct('name','小周','id','200603', 'scores','[92 95 94]');
l
l >> student(3)
l ans =
l name: '小周'
l id: '200603'
l scores: '[92 95 94]'
幻灯片35
l >> student(3).scores(2) %成绩以字符串形式给出,想想为什么显示如下结果?
l ans =
l 9
l >> student(3).scores(3)
l ans =
l 2
l >> student(3).scores=[92 95 94]
l >> student(3)
l ans =
l name: '小周'
l id: '200603'
l scores: [92 95 94]
l student(3).scores(2)
l ans =
l 95
l >> all_names=[]
l all_names =
l 李小二王五小周
l >> all_scores=[]
l all_scores =
l [60 70 80][83 99 100]\_^
l >> student(3).scores=[60 70 80]; %修改成绩属性
l >> student(2).scores=[83 99 100]
l student =
l 1x3 struct array with fields:
l name
l id
l scores
l >> student(1).scores=[30 75 89];
l >> all_scores=[]
l all_scores =
l 30 75 89 83 99 100 60 70 80
l >> cat(1,) %并排数组,1表示上下并排.
l ans =
l 30 75 89
l 83 99 100
l 60 70 80
l >> cat(2,) %水平排列
l ans =
l 30 75 89 83 99 100 60 70 80
l >> student(1).scores(4)=77 %追加一门成绩
l >> student(1)
l ans =
l name: '李小二'
l id: '200601'
l scores: [30 75 89 77]
l >> student(2).scores(4)=88
l >> student(3).scores(4)=99;
l >> all_scores=[]
l all_scores =
l 30 75 89 77 83 99 100 88 60 70 80 99
l >> cat(1,)
l ans =
l 30 75 89 77
l 83 99 100 88
l 60 70 80 99
l >> average1=mean(cat(1,)) %计算列平均值
l average1 =
l 57.6667 81.3333 89.6667 88.0000
l >> average2=mean(cat(2,)‘) %计算行平均值
l
l average2 =
l 67.7500 92.5000 77.2500
l >> fieldnames(student) %显示字段
l ans =
l 'name'
l 'id'
l 'scores'
l >> student(2).age=20 %追加字段并赋值
l student =
l 1x3 struct array with fields:
l name
l id
l scores
l age
l >> student(2)
l ans =
l name: '王五'
l id: '200602'
l scores: [83 99 100 88]
l age: 20
l >> student(1)
l ans =
l name: '李小二'
l id: '200601'
l scores: [30 75 89 77]
l age: [] %没有赋值
l >> student(1).age=19
l student =
l 1x3 struct array with fields:
l name
l id
l scores
l age
l >> student(1)
l ans =
l name: '李小二'
l id: '200601'
l scores: [30 75 89 77]
l age: 19
l >> student(3).age=23;
l >> student(3)
l ans =
l name: '小周'
l id: '200603'
l scores: [60 70 80 99]
l age: 23
l >> Student=rmfield(student,‘age’) %删除一个字段
l Student =
l 1x3 struct array with fields:
l name
l id
l scores
l >> Student(1)
l ans =
l name: '李小二'
l id: '200601'
l scores: [30 75 89 77]