目錄
向量的創建方法
(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] |