目录
向量的创建方法
(1)直接输入法
(2)冒号法(常用)
(3)利用MATLAB函数创建
linspace函数
logspace函数
向量元素的引用
(1)单个元素引用
(2)多个元素引用
向量元素的修改和删除
向量的创建方法
在 MATLAB中,向量的创建方法主要有三种,分别是:直接输入法、冒号法和利用 MATLAB 的函数创建。下面我们来进行介绍:
(1)直接输入法
向量元素需要用英文的中括号“[ ]”括起来,元素之间用空格、逗号、分号或按回车键分隔,就可以创建对应的向量。若元素之间用空格、逗号分隔,则创建的是行向量;若用分号、 回车键分隔,则创建的是列向量。(注意:这里的逗号和分号都是英文输入法下输入的,不能用中文的逗号或分号)
举例:a=[135] 和 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:7 [1 3 5 7] %每次增加2,直到最后到了7 | |
1:2:8 | [1 3 5 7] %每次增加2,到了7后再加2等于9, 比8要大,所以到了7就停止了。 |
1:1:100或1:100 [1 2 3 4.....98 99 100] %步长为1时可以省略 | |
1:10:3 1 %从1开始,增加10等于11,比3还要大,所以返回1 | |
5:2:1 | 空的1×0 double行向量 %若A>B且步长step >0,则 会 返 回空的向量。 |
10:-1:6 [10 9 8 7 6]%步长为-1,因此会从10开始递减 | |
10:-10:50 | 空的1×0 double行向量 %若A<B且步长step <0,则会返回 空的向量。 |
1:0:2 空的1×0 double行向量 %若step =θ,则返回空的向量。 |
上表中,有三种情况都会导致MATLAB 返回空的向量:空的1×0 double 行向量。 怎么理解这个返回结果呢? 这个“1×0”指的是向量的维度,你可以理解为1行0列,即这个向量是空的,不存在元素。在 MATLAB中,我们可以直接使用命令[]创建空的向量。
(3)利用MATLAB函数创建
我们主要介绍两个函数:linspace 和 logspace, 它们分别用来创建等差数列和等比数列。
linspace函数
首先介绍 linspace 函数,它有两种用法,区别在于是否给定第三个输入参数 n, 如果我们 不指定n, 则 MATLAB会默认 n=100。这个函数使用的频率也很高,大家需要掌握。
● linspace(a,b):该命令用来创建一个行向量,向量中的第一个元素为a, 最后一个元素为b,形成总数为100个元素的线性间隔的向量。
● linspace(a,b,n):该命令用来创建一个行向量,向量中的第一个元素为a, 最后一 个元素为b,形成总数为n 个元素的线性间隔的向量。
代码 结果和相应的解释 | |
linspace(1,100,10) | [11223344556677889100] %第 一 个数为1,最后 一 个数为100,整 个向量构成了一个等差数列,由10个元素组成 |
linspace(1,99,10) | [1 11.8889 22.7778 33.6667 44.5556 55.4444 66.3333 77.2222 88.1111 99] %第一个数为1,最后一个数为99,整个向量由10个元素组成,构成了一个等 差数列,MATLAB会自动计算等差数列的步长。 |
linspace(1,10) | [11.09091.18181.27271.3636 ....9.81829.909110] %如果不指定第三个输入参数n,则默认生成100个元素的等差数列 |
linspace(100,1,10) | [100 89 78 67 56 45 34 23 12 1]%如果a>b,则步长是负数 |
注意:
- (1)linspace不需要指定步长,MATLAB会根据你给定的元素个数n 自动计算出来;而使用冒号法可以自己指定步长。
- (2)linspace生成的向量的最后一个元素一定是b,而使用冒号法 a:step:b生成的向量的最后元素不一定是b。
logspace函数
● logspace(a,b): 创建一个行向量,其第一个元素为10^a, 最后一个元素为10^b, 形成总数为50个元素的等比数列向量。
● logspace(a,b,n):创建一个行向量,其第一个元素为10^a,最后一个元素为10^b,形成总数为n个元素的等比数列向量。
代码 | 结果和相应的解释 |
logspace(2,1,5) | [100 56.234 31.623 17.783 10] %第一个数为10^2,最后一个数为10^1,5个元素组成的等比数列 |
logspace(log10(2),log10(1024),10) [2 4 8 16 32 64 128 256 512 1024] %第一个数为2,最后一个数为1024,10个元素组成的等比数列 |
向量元素的引用
在MATLAB 中,可以使用length 函数或 numel 函数来计算向量中包含的元素个数。
例如:a=[1,3,8,9,7];length(a) 或 numel(a) 的返回结果是5,因为向量a中有五个元素。
假如我们有一个行向量 a, 里面包含了n 个元素 (n 是大于等于1的常数),它们分别是 a₁,a₂,…,an. 那么我们可以列一个表格:
向量的元素 | a₁ | a₂ | a₃ | ······ | an-1 | an |
索引(下标) | 1 | 2 | 3 | ······· | n-1 | n |
从上表可以看出,索引就是指某一个元素在向量中对应的位置,也可以称为元素在向量中所处的下标,在MATLAB中,向量的索引是从1开始的。
(1)单个元素引用
我们提取向量a 中单个元素的方法很简单,只需要利用a(index)命令,小括号中的 index就是你要提取的对应元素的索引。(注意:创建向量用中括号,提取元素要用小括号哦!)
报错的两种情况:1.索引超出数组元素的数目数组 2.索引取成0、负数或者小数
(2)多个元素引用
类似的,我们也可以利用向量的索引来同时提取多个位置的元素,这时候只需要将 index 设置成一个向量,index 中放入我们想要提取的元素的索引,然后使用a(index)命令即可。
例如,以向量 a [ 2 4 8 16 32 64 128 256 512 1024 ] 我们令 index = [ 1 3 5 7 9 ],那么 a(index)的结果为[2 8 32 128 512],即我们提取了向量a中奇数位置的元素。熟悉向量冒号创建方法的同学应该能够看出,index 等于1 : 2 : 9,因此我们可以直接将a(index)写成 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 ]。
向量元素的修改和删除
前面我们介绍了向量元素的引用,我们可以利用等号赋值的方法对引用位置的元素进行修改和删除。令向量a = [ 2 4 8 16 32 64 128],请大家依次执行下面的代码:
请依次执行下面的代码 修改后的向量a | |
a(1)=4 %第一个元素改成4 | [4 4 8 16 32 64 128] |
a([1,3])=[50 60]%第1个位置元素改成50;第3个位置元素改成60 | [50 4 60 16 32 64 128] |
a(1:3)=[56]%赋值时,左右两侧的元素个数要相 同,左边引用了3个位置,右侧的向量长度为2 | MATLAB报错:无法执行赋值,因为左侧和右侧的 元素数目不同。 |
a(2:4)=100 %如果右边为常数,则将指定位置的 元素全部变成这个常数。 | %第2至4号位置的元素改为了100 [50 100 100 100 32 64 128] |
a(10)=88 %把索引为10的元素赋值为88,如果 超过了最大索引,则会自动拓展向量的大小 | [50 100 100 100 32 64 128 0 0 88] %索引8和9的位置会自动用0进行赋值 |
如果我们将等号右侧变成空向量[],则表示删除对应位置的元素。
a(1)=[ ]%删除a的第一个元素 | [100 100 100 32 64 128] |
a(end-1:end)=[ ]%删除a中最后两个元素 | [100 100 100 32 64] |