MATLAB入門 第二章(更新至2.8)

2022-01-31 curve ball

本專題內容摘錄至,由葛超,王蕾,曹秀爽編著的《MATLAB技術大全》

    在此鳴謝,該專題內容不做商業用途

    本書一共27個章節,這裡會選取有趣的內容提供給大家

注意:本文出現的%%為例子,或者注釋,需要各位看官動手操作

第二章 matlab基礎知識

2.6 數值數據類型

        2.6.1 整數

        2.6.2 浮點數

        2.6.3 整型浮點數間的操作函數

        2.6.4 複數

    2.7 函數和特殊函數簡明介紹

    2.8 數組

        2.8.1 一維數組的創建

        2.8.2 多維數組的創建

        2.8.3 數組的運算

        2.8.4 常用的標準數組

        2.8.5 低維數組的尋址和搜索

        2.8.6 低維數組的處理函數

        2.8.7 高維數組的處理和運算

2.8 數組

   數組是matlab進行計算和處理的核心內容之一,出於快速計算的需要,matlab總把數組看作存儲和運算的基本單元,標量數據也被看作是1×1的數組。因此,數組的創建,尋址和操作就顯得非常重要。matlab提供了各種數組創建的方法和操作方法,使得matlab的數值計算和操作更加靈活和方便。數組創建和操作是matlab運算和操作的基礎,針對不同維數的數組,matlab提供了各種不同的數據創建方法,甚至可以通過創建低維數組來得到高維數組。

    2.8.1 一維數組創建

    概括而言,創建一維數組時,可以通過以下幾種方法來進行。

    (1)直接輸入法:此時,可以直接通過空格,逗號和分號來分隔數組元素,在數組中輸入任意的元素,生成一維數組。

    (2)步長生成法: x = a:inc:b,在使用這種方法創建一維數組時,a和b為一維向量數組的起始數值和終止數值,Inc為數組的間隔步長;如果a和b為整數時,省略inc可以生成間隔為1的數列。根據a和b的大小不同,inc可以採用整數,也可以採用負數來生成一維向量數組。

    (3)等間距線性生成方法:x = linspace(a,b,n)採用這種方法,函數在a和b之間的區間內得到n個線性採樣數據點

    (4)等間距對數生成方法:x = logspace(a,b,n)採用這種方法時,在設定採樣點總個數n的情況下,採樣常用對數計算得到n個採樣點數據值。

    當創建數組後,對單個元素的訪問,可以直接通過選擇元素的索引來加以訪問;如果訪問數組內的一塊數據,則可以通過冒號方式來進行訪問;如果訪問其中的部分數值,則可以通過構造訪問序列或通過構造向量列表來加以訪問。在訪問數組元素的過程中,訪問的索引數組必須是正整數,否則,系統將會提示一條警告信息。

    一維數組可以是一個行向量,也可以是一列多行的向量。在定義的過程中,如果元素之間通過「;」分隔元素,那麼生成的向量是列向量;通過空格或逗號分隔的元素則為行向量。當然列向量和行向量之間可以通過轉置操作「『」來進行相互之間的轉化過程。但需要注意的是,如果一維數組的元素是複數,那麼通過轉置操作後,得到的是複數的共軛轉置的結果,而採用點--共軛轉置操作時得到的轉置數組,並不進行共軛操作。

    2.8.2 多維數組的創建

    對於二維數組和三維數組而言,創建方法和一維數組的創建方法不同。

    二維數組(也是矩陣)可以通過以下幾種方法來創建。

    (1)直接輸入二維數組的元素來創建,此時,二維數組的行和列可以通過一維數組的方式來進行創建,不同行之間的是數據可以通過分號分隔,同一行中的元素可以通過逗號或空格來進行分隔。

    (2)通過MATLAB的Array Editer來輸入二維數組。創建方法為,單擊New Variable創建圖標,此時系統在工作空間的變量列表中出現新的矩陣變量,用戶可以改變變量的名稱同時,在MATLAB的工作空間出現矩陣編輯器表格,可以直接輸入矩陣的數據。

    (3)對於大規模的數據,可以通過數據表格方式來輸入,此時可以單擊選擇空間的Import Data圖標,選中已經編寫好的矩陣數據文件後,導入工作空間中。

    (4)可以通過MATLAB所提供的其他函數來生成二維數組。

    在創建二維數組的過程中,需要嚴格保證所生成的矩陣的行或列的數目不同。如果兩者的數目,那麼系統將會出現錯誤提示。此外,在直接生成矩陣的過程中,可以通過按回車鍵來保證矩陣生成另一行元素。

    多維數組(n維數組),如在三維數組中存在行,列和頁這樣三維,即三維數組中的第三維成為頁。在每一頁中,存在行和列。在MATLAB中,可以創建更高維的n維數組。但實際上主要用到的還是三維數組。三維數組的創建方法有以下幾種。

    (1)直接創建方法。在生成過程中,可以選擇使用matlab提供的一些內置函數來創建三維數組,如zeros,ones,rand,randn等。

    (2)通過直接索引的方法進行創建。

    (3)使用matlab內置函數reshape和repmat將二維數組轉換成三維數組

    (4)使用cat函數將低維數組轉化為高維數組

    通過以上可以看出,三維數組可以通過多種方法進行創建,在利用內置函數創建過程中,關於這些函數的其他用法,讀者可以通過help命令查找相應的幫助文件。

    2.8.3 數組的運算

    數組的運算包括數組和標量之間的運算,以及數組和數組之間的運算。對於數組和標量之間的運算,是標量和數組的元素之間直接進行數學運算,比較簡單。對於數組和數組之間的運算關係,尤其是對於乘除運算和乘方運算,如果採用點方式進行計算,表明是數組的元素之間的運算關係,而如果是直接進行乘除,乘方運算,那麼則是向量或矩陣之間的運算關係。兩隻的意義完全不同。

    此外,還需要注意的是,對於向量的除法運算,左除(\)和右除(/)的意義不同。兩者之間除數和被除數是不同的。

    對於矩陣的加減運算以及其他點運算,都是針對矩陣的元素進行的。而對於乘除,乘方運算則通過矩陣計算進行,關於更詳細的數組和矩陣運算方面的內容,讀者可以查閱矩陣運算方面的數學理論書籍。

    2.8.4 常用的標準數組

    matlab中提供一些函數,用來創建常見的標準數組。常用到的標準數組包括全0數組,全1數組,單位矩陣,隨機矩陣,對角矩陣以及元素為指定常數的數組等。

    matlab標準數組生成函數

    函數        說明                用法

    eye         生成單位矩陣         y=eye(n)

                                    y=eye(m,n)

                                    y=eye(size(A))

                                    y=eye(m,n,classname)

                                    y=eye([m,n],classname)

    ones        生成全一數組        y=ones(n)

                                    y=ones(m,n)

                                    y=ones([m,n])

                                    y=ones(m,n,p,...)

                                    y=ones([m,n,p,...])

                                    y=ones(size(A))

                                    y=ones(m,n,...,classname)

                                    y=ones([m,n,...],classname)

    rand        生成隨機數組,       y=rand

                數組元素均勻分布     y=rand(m)

                                    y=rand(m,n)

                                    y=rand([m,n])

                                    y=rand(m,n,p,...)

                                    y=rand([m,n,p,...])

                                    y=rand(size(A))

                                    rand(method,s)

                                    s=rand(method)

    randn       生成隨機數組         y=randn

                數組元素服從正態分布 y=randn(m)

                                    y=randn(m,n)

                                    y=randn([m,n])

                                    y=randn(m,n,p,...)

                                    y=randn([m,n,p,...])

                                    y=randn(size(A))

                                    randn(method,s)

                                    s=randn(method)

    zeros       生成全零數組         y=zeros(n)

                                    y=zeros(m,n)

                                    y=zeros([m,n])

                                    y=zeros(m,n,p,...)

                                    y=zeros([m,n,p,...])

                                    y=zeros(size(A))

                                    y=zeros(m,n,...,classname)

                                    y=zeros([m,n,...,classname])

    2.8.5 低維數組的尋址和搜索

    數組中包括多個元素,在對數組的單個元素或多個元素進行訪問時,需要對數組進行尋址操作。matlab提供了強大的功能函數,可以用於確定感興趣的數組元素的腳標,插入,提取和重排數組的子集。具體參數如下

    數組尋址技術

    尋址方法        說明

    A(r,c)          用定義r和c索引向量來尋址A的子數組

    A(r,:)          用r向量定義的行和對應於行的列得到A的子數組

    A(:,c)          用c向量定義的列和對應於列的行得到A的子數組

    A(:)            用列向量方式來依次尋址數組A的所有元素。如果A(:)出現在等號

                    右側的元素來填充數組。而A的形狀不發生變化

    A(k)            用單一索引向量k來尋址A的子數組

    A(x)            用邏輯數組x來尋找A的子數組,x的維數和A和維數必須一致

    排序是數組操作的一個重要方面。matlab提供了sort函數來進行排序。關於sort函數的具體使用方法。讀者可以通過help sort語句來加以查詢。在進行一維數組排序時,默認的排列方式為升序排列。如果需要降序排列,則可以在sort函數的第二個參數處以descend來代替。

    在二維數組進行排序時,sort函數隻對數組的列進行排序。一般情況下,用戶只關心對某一列的排序問題,此時可以通過一定的方式來進行重新排序。如果對行進行排序,則需要為sort函數提供第二個參數2,例如,下面的程序:

    在matlab中,子數組搜索功能可以通過系統提供的find函數來搜索,可以返回符合條件的數組的索引數值,對於二維數組可以返回兩個下標數值。關於搜索的其他命令,用戶可以同help find來查詢。

    如果搜索最大最小值,那麼可以使用max和min函數來進行搜索。如果搜索的是二維數組,那麼這兩個函數返回每一列的最大值或最小值,例如下面的程序:

                                            

    2.8.6 低維數組的處理函數

    

    低維數組的處理函數如下

    函數            說明

    fliplr          以數組的垂直中線為對稱軸,交換左右對稱位置上的數組元素

    flipud          以數組的水平中線為對稱軸,交換數組上下對稱位置上的數組

                    元素

    rot90           按逆時針對數組的一行或一列

    circshirf       結構交換函數,交換前後函數的元素個數相等

    reshape         結構變換函數,交換前後函數的元素個數相等

    diag            對角線元素提取函數

    triu            保留方陣的上三角,構成上對角方陣

    tril            保留方陣的下三角,構成下對角方陣

    kron            兩個數組的kronecker乘法,構成新的數組

    repmat          數組複製生成函數

    在後面的選取對角元素和上,下三角矩陣時,所定義的第二個參數是以對角線為k=0的起始對角線,向上三角方向移動時,k的數值增大;而向下三角方向移動時,k的數值減小。此外,對於非方陣的矩陣,對角線以過第一個元素的方陣的對角線的起始位置。

    對於kron函數執行的是kronnecker的張量乘法運算,即將第一個參數數組的每一個元素和第二個參數數組相乘,形成一個分塊矩陣。上面的例子同樣也說明kronercker張量乘法具有不可交換性。

    2.8.7 高維數組的處理和運算

    隨著數組的維數增加,數組的運算和處理就會變得越來越困難,在matlab中提供了一些函數可以進行這些高維數組的處理和運算。此處對高維數組(主要介紹三維數組)的一些處理和運算函數進行介紹。常見的高維數組處理和運算函數如下。

    高維數組的處理和運算函數

    函數            說明

    squeeze         用此函數來消除數組中的「孤維」,即大小等於1的維,從而起到降維的作用

    sub2inb         將下標轉換為單一索引數值

    ind2sub         將數組的單一索引數值轉換為數組的下標

    flipdim         沿數組的某個維輪換順序,第二個參數為變換的對稱面

    shiftdim        維序號循環輪換移動

    permute         對多維數組進行廣義共軛轉置操作

    ipermute        取消轉置操作

    size            獲取數組的維數大小數值



相關焦點

  • MATLAB入門 第二章(更新至2.7)
    本書一共27個章節,這裡會選取有趣的內容提供給大家注意:本文出現的%%為例子,或者注釋,需要各位看官動手操作第二章 matlab基礎知識2.5 字符串操作        2.5.1 matlab中的字符串符號        2.5.2 一般通用字符串操作        2.5.3 字符串比較操作
  • MATLAB入門 第二章(更新至2.4)
    本專題內容摘錄至,由葛超,王蕾,曹秀爽編著的《MATLAB技術大全》    在此鳴謝,該專題內容不做商業用途
  • MATLAB入門 第一章(更新至1.4)
    本專題內容摘錄至,由葛超,王蕾,曹秀爽編著的《MATLAB技術大全》    在此鳴謝,該專題內容不做商業用途
  • 【仿真計算】Matlab快速入門五分鐘教程(原創)
    (1) 入門第一步,命令窗操作在進行操作前,強烈建議讀者下載MATLAB Primer(學習聖經,任意一版都行),然後把第一章快速入門快速掃描一遍,花不了十分鐘,但可以讓你的後續學習快很多。如果嫌前三十頁太多,那麼請把前13頁看完,不能再少了。
  • MATLAB課程之第三章 MATLAB程序設計(1)
    第二章講解了matlab中關於畫圖函數的使用方法。現在很多領域都要進行數據統計和分析,結果怎麼表示呢?自然用圖形表示。
  • MATLAB入門教程系列--基礎知識
    fix(x):無論正負,捨去小數至最近整數floor(x):地板函數,即捨去正小數至最近整數ceil(x):天花板函數,即加入正小數至最近整數rat(x):將實數x化為分數表示rats(x):將實數x化為多項分數展開sign(x):符號函數 (Signum function)。
  • MATLAB作圖從入門到熟練
    本期推文,喵姐會介紹一下matlab作圖,儘量讓各位同學通過一篇推文學會matlab作圖從入門到熟練。如果你對matlab已經有所了解,可以跳過下面的入門部分。為什麼我們要用MATLAB作圖,而不是用python作圖?這個是工具選擇問題,人與人之間各有偏好。那麼作圖的目的是什麼?是為了清晰地表達數據結果。在數學建模競賽這方面,數據結果表達與論文排版的好壞對論文得分的影響往往很大。
  • 幫你快速入門MATLAB
    fix(x):無論正負,捨去小數至最近整數floor(x):地板函數,即捨去正小數至最近整數ceil(x):天花板函數,即加入正小數至最近整數rat(x):將實數x化為分數表示rats(x):將實數x化為多項分數展開sign(x):符號函數 (Signum function)。
  • 大學本科課程 PYTHON與數據分析(13)第三章 帶你入門
    ##### 條件語句# 二分支:返回一個數的絕對值x = -8if x >= 0:    print(x)else:    print(-1*x)# 多分支:返回成績對應的等級score = 99if score < 60:    print
  • [優化] 《MATLAB高效編程技巧與應用:25個案例分析》源程序+數據
    內容包括:matlab快速入門、重新認識矢量(向量)化編程、matlab處理海量數據、匿名函數類型介紹、嵌套函數類型介紹、積分以及積分方程求解案例、優化及非線性方程(組)求解案例、人臉圖像壓縮與重建案例、有關預測分類的案例、常微分方程(組)求解案例、層次分析法及其matlab實現、定時器及其應用。
  • 想通過視頻自學MATLAB的同學戳這裡!
    求解MATLAB數學教學視頻第14章:常微分方程的MATLAB求解MATLAB數學教學視頻第15章:積分變換的MATLAB求解《MATLAB神經網絡原理與實例精解》隨書附帶全部視頻下載:MATLAB神經網絡教學視頻第1章: 神經網絡概述與MATLAB快速入門MATLAB神經網絡教學視頻第3章:MATLAB
  • MATLAB入門小知識系列一
    %將數字轉換為字符串 num2strc=100num2str(c)disp(['c的取值為' num2str(c)])%input函數 將輸入的數、向量、矩陣、字符串等賦給一個變量A=input('請輸入A:')%此處不加分號的話可以顯示運算結果至下一個,如果加分號的話不可以顯示運算結果%%sum函數%(1)無論是行向量還是列向量都是直接求和
  • matlab入門:變量與賦值,矩陣
    入門教程 7個
  • Matlab入門教程 | 第 1 章 Matlab基礎知識之字符串的處理
    >> ch = ['abcdef';'123456'];>> ch(2,3)ans =    '3'例題:建立一個字符串向量,然後對該向量做如下處理:(1)取第 1~5 個字符組成的子字符串
  • 5第二篇:前往美國篇第5章(共5章):什麼是I-515A表格?
    第二篇:前往美國篇第5章(共5章):什麼是I-515A表格?基礎宣傳篇第一篇:入門篇,第1章(共8章):國際國際學生生命周期概述第一篇:入門篇,第2章(共8章):學習計劃第一篇:入門篇,第3章(共8章):什麼是指定學校官員?
  • matlab vs R
    而 matlab 的服務則是建立在用戶付費的基礎之上。你沒有付費,又哪來的享受到官方提供的維護服務。關於入門周期,matlab 要短於 R; 入門難度上, matlab 要比 R 簡單;新手遇到的問題的多少,matlab 用戶小於 R 用戶。
  • 【Matlab】hw2
    希望本文能提起大家對matlab的興趣,找到非唯一解。1)==1;b(2)=a(2)==2;b(3)=a(3)==3;b(4)=a(4)==4;b(5)=a(5)==5;b(6)=a(6)==6;b(7)=a(7)==7;b(8)=a(8)==8;b(9)=a(9)==9;%b是否包含至少一個有非零數c=any(b
  • MATLAB課程之第六章 再提升(1)
    在matlab中,有些時候是需要用其自帶函數來完成,這樣能夠帶給我們方便。但又的時候我們需要寫出等效函數!兩者要能等同使用!為什麼呢?工作了以後你就知道了。因為很多場合你沒有matlab可以用!先看看findpeaks怎麼用等效的matlab語句來實現的吧!你能寫出等效的函數才是真正的掌握了這個知識,因為你了解了來龍去脈!
  • 人生苦短,不如學學MATLAB
    三維切片圖[x,y,z] = meshgrid(-2:.2:2,-2:.25:2,-2:.16:2);v = x..^2-y.^2-z.^2);xslice = [-1.2,.8,2];yslice = 2;zslice = [-2,0];slice(x,y,z,v,xslice,yslice,zslice)
  • Matlab擬合詳解
    .^2+10*x+20+rand(1,10).*5; % 產生測試數據plot(x,y,'o')  % 繪圖並標出原始數據點p=polyfit(x,y,2) p = 1×3      -0.7630    8.5343   25.9050