本系列教程来源于出版设计《基于MATLAB编程基础与典型应用书籍》,如涉及版权问题,请联系:156204968@qq.com。 出版社:人民邮电出版社, 页数:525。
本系列教程目前基于MATLABR2006a,可能对于更高级版本的功能和函数有差异,教程中如有问题,请联系:156204968@qq.com
2.2 数组及矩阵的创建和操作
本节将介绍数组及矩阵的创建和操作,包括数组的输入以及数组元素的操作。由于数组和矩阵在创建和寻访的处理方式类似,因此将两者综合一起说明。
2.2.1 数据及矩阵的输入
输入的方法有多种,常用的主要有直接输入法、语句生成法以及特殊矩阵函数生成法。另外还有MAT数据文件加载生成法及M文件输入法。
(1)直接输入法
最简单、最常用的构造方法,一般用于数组及矩阵维数比较少的情况。
【例2.1】数组直接输入法
>> x=[3.5 pi/2 sqrt(3) 3+5i] %采用空格生成1×4的数组
上述语句得到数组x:
x=3.5000 1.5708 1.7321 3.0000+5.0000i
【例2.2】矩阵直接输入法
>> a=[1 2 3;4 5 6;7 8 9] %生成3×3的数组矩阵
上述语句得到矩阵a:
a = 1 2 3 4 5 6 7 8 9
命令中的“;”表示矩阵的一行结束,使用换行同样可以得到上面的矩阵a,代码如下所示。
>> a=[1 2 3 4 5 6 7 8 9]
注意:(1) 数组创建使用操作符方括号([])
(2) 每行内的元素间用逗号或空格隔开;
(3) 行与行之间用分号或回车键隔开;
(4) 元素可以是数值或表达式。
(2)语句生成法
使用语句生成法可以生成固定步长的数组或矩阵。常用的格式:
x=from:step:to
其中from、step和to
分别表示开始值、步长和结束值,中间用冒号分隔。当step
省略时则默认为step=1
。以步长step
为采样间隔生成x,x中第一个元素为from
,如果(to-from)
为step
的整数倍则最后一个元素为to,否则小于to。下面结合示例具体介绍该方式的使用。
【例2.3】使用
“from:step:to”
方式生成以下数组
①生成开始值为1,结束值为5,间隔为0.5的数组。在命令窗口输入:
>> a1=1:0.5:5 %开始值为1,结束值为5,间隔为0.5的数组
此时,生成的数组a1如下所示。
a1 = 1.0000 1.5000 2.0000 2.5000 3.0000 3.5000 4.0000 4.5000 5.0000
②如果只设置开始值和结束值,间隔值step不设置,生成数组时step默认为1。例如在命令窗口输入以下内容:
>> a2=1:10 %开始值为1,结束值为10,默认间隔为1的数组
结果如下:
a2 = 1 2 3 4 5 6 7 8 9 10
③如果开始值>结束值,并且步长step>0,则生成数组失败,数组为空。例如在命令窗口输入以下内容:
>> a3=5:0.5:1 %开始值为5,结束值为1,间隔为-0.5的数组
此时,得到如下所示的结果。
a3 = Empty matrix: 1-by-0
④如果开始值>结束值,步长step<0,可以成功生成数组。例如在命令窗口输入:
>> a4=5:-0.5:1
结果如下:
a4 = 5.0000 4.5000 4.0000 3.5000 3.0000 2.5000 2.0000 1.5000 1.0000
注意:(1)step默认值为1;
(2)当step>0而from>to时为空矩阵或当step<0而from<to时也为空矩阵;
(3)冒号必须是英文状态下输入的冒号,否则会产生计算错误。
除了使用“from:step:to”格式生成固定步长的数组,还可以使用linspace
和logspace
函数生成数组。linspace
函数的语法格式如下:
linspace(a,b,n)
其中,a、b、n三个参数分别表示开始值、结束值和元素个数。该函数生成从a到b之间线性分布的n个元素的行向量,n如果省略则默认值为100。
logspace
函数的语法格式如下:
logspace (a,b,n)
该函数与linspace类似,给出开始值、结束值和元素个数,不过logspace用来生成对数等分向量。它生成从10a到10b之间按对数等分的n个元素的行向量。n如果省略则默认值为50。
【例2.4】用linspace和logspace函数生成行向量
①生成从0到2*pi的线形采样的(1×10)向量,在命令窗口输入:
>> A=linspace(0,2*pi,10) %生成从0到2*pi的线形采样的,元素个数为10
用linspace函数生成的矩阵A:
A = 0 0.6981 1.3963 2.0944 2.7925 3.4907 4.1888 4.8869 5.5851 6.2832
②生成从0到2的对数采样的(1×9)向量,在命令窗口输入:
>> B=logspace(0,2,9) %生成从0到2的对数采样,元素个数为9
用logspace函数生成的矩阵B:
B = 1.0000 1.7783 3.1623 5.6234 10.0000 17.7828 31.6228 56.2341 100.0000
(3)特殊矩阵生成函数法
前面介绍的两种方法一般应用在生成比较简单的数组或向量,但是在实际应用过程中经常会使用一些比较特殊的有分布规律的矩阵,MATLAB提供了很多能够产生特殊矩阵的函数,各函数的指令与功能如表2.2所示。
函数名 | 功能 |
---|---|
zeros(m,n) | 产生m×n的全0矩阵 |
ones(m,n) | 产生m×n的全1矩阵 |
rand(m,n) | 产生m×n均匀分布的随机矩阵,元素取值范围0.0~1.0。 |
randn(m,n) | 产生m×n正态分布的随机矩阵 |
magic(N) | 产生N阶魔方矩阵(矩阵的行、列和对角线上元素的和相等) |
eye(m,n) | 产生m×n的单位矩阵 |
注意:(1)zeros、ones、rand、randn和eye函数当只有一个参数n时,则为n×n的方阵;
(2)当eye(m,n)函数的m和n参数不相等时则单位矩阵会出现全0行或列。
【例2.5】特殊矩阵生成函数
①若要生成一个(2×3)全零矩阵,可以在命令窗口输入:
>> zeros(2,3) %生成一个(2×3)全零矩阵
此时,生成的矩阵为:
ans = 0 0 0 0 0 0
②若要生成一个(2×3)全1矩阵,可以在命令窗口输入:
>> ones(2,3) %生成一个(2×3)全1矩阵
结果如下:
ans = 1 1 1 1 1
③若要生成一个(3×3)均匀分布的随机矩阵,可以在命令窗口输入:
>> rand(3,3) %该矩阵元素的取值为0.0~1.0,均匀分布的随机矩阵
由上述语句生成的随机矩阵如下所示(计算结果随机)。
ans = 0.9501 0.4565 0.9218 0.2311 0.0185 0.7382 0.6068 0.8214 0.1763
④若要生成一个(3×3)正态分布的随机矩阵,可以在命令窗口输入:
>> randn(3,3) %正态分布的随机矩阵
结果如下:
ans = -0.4326 1.1892 -0.5883 -1.6656 -0.0376 2.1832 0.1253 0.3273 -0.1364
⑤若要生成一个(4×4)的魔方矩阵,可以在命令窗口输入:
>> magic(4) %生成一个4×4的魔方矩阵
由magic函数产生的魔方矩阵如下所示。
ans = 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1
⑥若要生成一个(3×3)的单位矩阵,可以在命令窗口输入:
>> eye(3) %生成一个3×3的单位矩阵
由eye函数产生的单位矩阵如下所示。
ans = 1 0 0 0 1 0 0 0 1
(4)MAT数据文件加载生成法
MATLAB启动后,系统会自动建立一个工作空间,在用户进行操作前,该工作空间中只包含系统提供的一些特殊变量,如pi、eps等。用户使用过程中会增加一些自己定义的变量,如果用户不使用clear指令来清除,这些自定义的变量会一直被保存在该工作空间,直到关闭系统。如果希望该工作空间中的变量可以保存以便下次使用,可以使用save指令保存为MAT数据文件,使用load指令或选择菜单【File】
下的【Import Data】
命令加载MAT数据文件来创建变量,
【例2.6】使用指令方式保存和加载MAT数据文件
>> clear all %清除工作空间中所有的变量
>> x=[1:4]; y=linspace(1,10,10); %生成变量x和y
>> who %查看内存中的变量,结果显示有两个变量x和y
使用who命令可以查看内存中的变量,在本例中查出内存中已经生成了两个变量x和y,结果如下所示。
Your variables are: x y
为了方便以后使用这两个变量,接下来在命令窗口输入:
>> save myxy %使用save指令将内存变量保存入myxy.mat数据文件中
通过save命令可以将指令保存到MAT文件中,myxy就是保存的数据文件名。使用clear all命令清除工作空间中的所有变量。
>> clear all %清除工作空间中所有的变量
此时在命令窗口输入:
>> y %输入变量y查看该变量的值,结果显示该变量没有被定义
得到如下的提示结果。
??? Undefined function or variable 'y'.
为了能够使用已经保存的变量,可以通过load指令获取。在命令窗口中接着输入:
>> load myxy %使用load指令将myxy.mat数据文件中保存的变量加载入当前工作空间
>> y %输入变量y查看该变量的值
此时,得到y变量的结果如下所示。
y = 1 2 3 4 5 6 7 8 9 10
(5)M文件创建矩阵
对于今后经常要调用的数组,尤其是比较大的复杂数组,可以为其专门建立一个M文件。具体方法是打开文件编辑器,写入这个矩阵内容并为其命名,保存这个M文件,以后凡是要用到这个矩阵,只要运行这个M文件,这个矩阵就会自动生成并保存于MATLAB的内存中。
【例2.7】用M文件创建大矩阵,文件名为example.m
打开文件编辑调试器,输入以下内容,并保存此文件为example.m。
%example.m 创建矩阵exam
exm=[ 456 468 873 2 579 55 21 687 54 488 8 13 65 4567 88 98 21 5 456 68 4589 654 5 987 5488 10 9 6 33 77];
在文件编辑调试器中运行或在MATLAB窗口输入example就可以生成矩阵exam。
>> example;
>> size(exm) %显示exm的大小,exm有5行6列
上述语句得到exm矩阵的大小,结果如下所示。
ans= 5 6
作者:德特数据
联系方式:156204968@qq.com