数学建模 —— MATLAB中的向量

发布于:2024-06-30 ⋅ 阅读:(168) ⋅ 点赞:(0)

目录

向量的创建方法

(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. (1)linspace不需要指定步长,MATLAB会根据你给定的元素个数n 自动计算出来;而使用冒号法可以自己指定步长。
  2. (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]


网站公告

今日签到

点亮在社区的每一天
去签到