l 2.1 常量与变量l 2.1.1 特殊常量,下面我们就来说一说关于matlab程序设计教程?我们一起去了解并探讨一下这个问题吧!

matlab程序设计教程(Matlab程序设计基础)

matlab程序设计教程

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 >> student.name='李小二'

l student =

l name: '李小二'

l >> student.id='200601';

l >> student.scores=‘[60 70 80]’; %字符串

l >> student

l student =

l name: '李小二'

l id: '200601'

l scores: '[60 70 80]'

l >> student.scores=[60 70 80]; %改变成绩数据类型

l >> student

l student =

l name: '李小二'

l id: '200601'

l scores: [60 70 80]

l >> student.scores='[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=[student.name]

l all_names =

l 李小二王五小周

l >> all_scores=[student.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=[student.scores]

l all_scores =

l 30 75 89 83 99 100 60 70 80

l >> cat(1,student.scores) %并排数组,1表示上下并排.

l ans =

l 30 75 89

l 83 99 100

l 60 70 80

l >> cat(2,student.scores) %水平排列

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=[student.scores]

l all_scores =

l 30 75 89 77 83 99 100 88 60 70 80 99

l >> cat(1,student.scores)

l ans =

l 30 75 89 77

l 83 99 100 88

l 60 70 80 99

l >> average1=mean(cat(1,student.scores)) %计算列平均值

l average1 =

l 57.6667 81.3333 89.6667 88.0000

l >> average2=mean(cat(2,student.scores)‘) %计算行平均值

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]

,