MatLab 04_MatLab矩阵matrix

一、Matlab矩阵 (matrix)和 向量 概述

1.1 Matlab矩阵(matrix)与 向量

在 MATLAB 中,矩阵就是一个由 MxN 个元素组成的二维数组 (M行 N列 数表,与线性代数中定义的矩阵概念相同)。

MATLAB中的向量 可以视为矩阵的一个特例:若一个矩阵的行数为1,则它可以视为一个行向量;若列数为1,则可以视为列向量;如果行数和列数同时为1,那么它就是一个标量(又称为常量、常数)。

二、MATLAB中的向量

2.1 向量的创建方法

在MATLAB中,向量的创建方法主要有三种:直接输入法冒号法利用MATLAB的函数创建法

(1)直接输入元素列表法

把向量元素使用英文的中括号 [ ] 括起来,元素之间用空格、逗号、分号或按回车键分隔,就可以创建对应的向量(注意:这里的逗号和分号都是英文输入法下输入的,不能用中文的逗号或分号)。

  • 元素之间用空格、逗号分隔,则创建的是 行向量
  • 元素之间用分号、回车键分隔,则创建的是 列向量

示例:

1
2
3
4
5
a = [1 3 5]
% 和
a = [1,3,5]   % 都可以创建包含元素 1,3,5 的行向量,并将这个行向量的值赋值给a;

b = [1;3;5]     % 创建的是包含元素1,3,5的列向量。

(2)冒号法:最常用

使用命令:A:step:B 来创建一个行向量。(冒号也要是英文的!)

其中:

  • A 是起始值;
  • step 是每次递增或递减的步长;
  • B 是终止值(不一定刚好停在这里)。

若step等于1,则可以直接简写成 A:B

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
1:2:7   % [1 3 5 7]  % 从1 开始, 每次增加2,直到最后的7
1:2:8   % [1 3 5 7]  % 从1 开始, 每次增加2, 到后 7 后再 +2 就到 9 了(大于了 8)
0:0.1:1     % [0 0.1  0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1]
1:1:10      % [1 2 3 4 5 6 7 8 9 10]  % 步长 1 可以省略
1:10        % [1 2 3 4 5 6 7 8 9 10] 
1:5:3       % 1
10:-1:5     % [10 9 8 7 6 5]
10:-2:5     % [10 8 6]
3:-2:5      % 空的 1*0 double 行向量, % 若 A  < B 且步长step < 0, 则会创建一个空的向量
5:2:1       % 空的 1*0 double 行向量, % 若 A  > B 且步长step > 0, 则会创建一个空的向量
1:0:2       % 空的 1*0 double 行向量, % 若步长step = 0, 则会创建一个空的向量

(3)利用MATLAB函数创建 linspace函数,它有两种用法,区别在于是否给定第三个输入参数n,如果我们不指定n,则MATLAB会默认n=100。这个函数使用的频率也很高,大家需要掌握。

  • linspace(a,b): 该命令用来创建一个行向量,向量中的第一个元素为a,最后一个元素为b,形成总数为100个元素的线性间隔的向量。
  • linspace (a,b,n): 该命令用来创建一个行向量,向量中的第一个元素为a,最后一个元素为b,形成总数为n个元素的线性间隔的向量。

logspace函数,它使用的频率不高。它有两种常见的用法:

  • logspace(a,b):创建一个行向量,其第一个元素为,最后一个元素为,形成总数为50个元素的等比数列向量。 
  • logspace(a,b,n): 创建一个行向量,其第一个元素为,最后一个元素为,形成总数为n个元素的等比数列向量。

2.2 向量元素的引用

对向量元素的引用(即提取向量指定位置的值)有两种情形,分别是提取向量中的单个元素和提取向量中的多个元素。在正式讲解之前,我们先来介绍索引(或下标)的概念。

向量分为行向量和列向量,它们在MATLAB中只有一个维度,因此我们可以利用向量中包含的元素个数来描述一个向量的大小。在MATLAB中,可以使用length函数或numel函数来计算向量中包含的元素个数。

例如:a = [1,3,8,9,7]; length(a)或numel(a)的返回结果是5,因为向量a中有五个元素。

假如我们有一个行向量a,里面包含了n个元素(n是大于等于1的常数),它们分别是 a1 a2 a3 … an, 索引就是指某一个元素在向量中对应的位置,也可以称为元素在向量中所处的下标,在MATLAB中,向量的索引是从1开始的。

举个具体的例子,假设向量a=[2 4 8 16 32 64 128 256 512 1024],那么a中有10个元素,因此a的最大索引是10。

(1)单个元素引用

提取向量a中单个元素的方法很简单,只需要利用a(ind)命令,小括号中的ind就是你要提取的对应元素的索引。(注意:创建向量用中括号,提取元素要用小括号哦!)

例如:a(1)的结果为2,因为a中第1个位置(索引或下标等于1)的元素是2;类似的,a(9)等于512,因为a中第9个位置的元素是512。

如果我取索引为11,即输入a(11)会出现什么情况?

MATLAB会报错:“索引超出数组元素的数目(10)”,即告诉我们,现在这个向量中元素的数目只有10个,即最大索引是10,而你取了索引11的元素,超出了取值范围。

另外,如果我们将ind取成0、负数或者小数,例如输入a(0)、a(-1)、a(1.5),MATLAB也会报错:“数组索引必须为正整数或逻辑值”。这里出现了“逻辑值”的概念。

(2)多个元素引用 类似的,我们也可以利用向量的索引来同时提取多个位置的元素,这时候只需要将ind设置成一个向量,ind中放入我们想要提取的元素的索引,然后使用a(ind)命令即可。

例如,我们令 ind = [1 3 5 7 9] ,那么 a(ind) 的结果为 [2 8 32 128 512],即我们提取了向量a中奇数位置的元素。熟悉向量冒号创建方法的同学应该能够看出,ind等于1:2:9,因此我们可以直接将a(ind)写成a(1:2:9),这就表示提取a中奇数位置的元素;类似的,提取a中偶数位置元素的命令是a(2:2:10),如果你不熟练的话,可以分成两步写,即先令ind=2:2:10,然后再使用a(ind)的命令。当然,对于同一个位置的元素,我们也可以提取多次,例如:ind = [1 2 2 3 3 3],那么a(ind)得到的结果应该是[2 4 4 8 8 8],以后熟悉的话可以直接写成a([1 2 2 3 3 3])。

使用end索引

有同学会想,假如我不知道向量a中有多少个元素,也不想使用length函数或者numel函数来计算向量中元素的个数,那我能不能提取出a中奇数位置的元素呢?这时候就需要用到一个特殊的关键字:end。它有很多种用法,在这里end可以用来替代向量的最后一个索引。

例如,我现在要访问a中第五个至最后一个元素,那么我们可以直接使用a(5:end),这里的end就表示了a的最后一个索引;另外,我们还可以对end进行计算,例如要访问a中第五个至倒数第三个元素,我们可以使用a(5:end-2),得到的结果为[32 64 128 256]。

这里有一个易错点,如果使用了end,不能将要取元素的索引赋值给ind。例如,还是要访问a中第五个至最后一个元素,如果你令ind=5:end,MATLAB就会报错。因此,我们只能在a后面的小括号中使用end来替代数组的最后一个索引。

那我们回到上面的问题,在不知道a中有多少个元素的前提下,我们可以使用a(1:2:end)。

2.3 向量元素的修改和删除

前面我们介绍了向量元素的引用,我们可以利用等号赋值的方法对引用位置的元素进行修改和删除。令向量 a=[2 4 8 16 32 64 128 256 512 1024]:

1
2
3
4
a(1) = 4
a([1,3]) = [30 50]
a([1:3]) = [30 40 50]
a(13) = 80   % [2 4 8 16 32 64 128 256 512 1024 0 0 80]

在向量元素赋值时,如果我们将等号右侧变成空向量[ ],则表示删除对应位置的元素。

Licensed under CC BY-NC-SA 4.0