矩陣和數(shù)組的概念及其區(qū)別
????????矩陣和數(shù)組在MATLAB中存在很多方面的區(qū)別,主要有以下幾個(gè)方面:
? ? ? ? ? ? ? ? ?矩陣是數(shù)學(xué)上的概念,而數(shù)組是計(jì)算機(jī)程序設(shè)計(jì)領(lǐng)域的概念。
????????????????作為一種變換或者映射運(yùn)算符的體現(xiàn),矩陣運(yùn)算有著明確而嚴(yán)格的數(shù)學(xué)規(guī)則;而數(shù)組運(yùn)算是MATLAB軟件定義的規(guī)則,其目的是使數(shù)據(jù)管理方便,操作簡(jiǎn)單,命令形式自然,執(zhí)行計(jì)算有效。
????????矩陣和數(shù)組間的聯(lián)系主要體現(xiàn)在:
????????????????在MATLAB中,矩陣是以數(shù)組的形式存在的。因此,一維數(shù)組相當(dāng)于向量,二維數(shù)組相當(dāng)于矩陣,所以矩陣是數(shù)組的子集。
????????????????只有一行的矩陣,稱為行向量。 只有一列的矩陣,稱為列向量。
矩陣的構(gòu)造
? ? ? ? 1、直接賦值建立簡(jiǎn)單矩陣
????????簡(jiǎn)單矩陣采用矩陣構(gòu)造符號(hào)——方括號(hào)“ [ ] ”,將矩陣元素置于方括號(hào)內(nèi),同行元素之間用空格或逗號(hào)隔開,行與行之間用分號(hào) “ ;? ”隔開。
? ? ? ? 2、構(gòu)造特殊矩陣
????????使用MATLAB中提供的構(gòu)造特殊矩陣的函數(shù)。
?
?
????????hilb()函數(shù) -- 希爾伯特(Hilbert)矩陣
????????希爾伯特矩陣,也稱H陣,其元素為。由于它是一個(gè)條件數(shù)差的矩陣,所以將它用來作為試驗(yàn)矩陣。
????????hilb(n):用于生成一個(gè)n×n的希爾伯特矩陣。
????????invhilb(n):用于生成一個(gè)n×n的希爾伯特矩陣的逆矩陣整數(shù)矩陣。
>> hilb(3)
ans =
1.0000 0.5000 0.3333
0.5000 0.3333 0.2500
0.3333 0.2500 0.2000
>> invhilb(3)
ans =
9 -36 30
-36 192 -180
30 -180 180
????????toeplitz()函數(shù) -- 托普利茲(Toeplitz)矩陣
????????toeplitz(k,r):用于生成非對(duì)稱托普利茲矩陣,第1列為k,第1行為r,其余元素等于其左上角元素。
????????toeplitz(c):用于用向量c生成一個(gè)對(duì)稱的托普利茲矩陣。
????????上述 k、r、c 通常是某段數(shù)值范圍,但也可以是單個(gè)數(shù)字。
>> toeplitz(1:4,1:2:7) % 行和列的起始數(shù)字應(yīng)相同
ans =
1 3 5 7
2 1 3 5
3 2 1 3
4 3 2 1
>> toeplitz(1:4)
ans =
1 2 3 4
2 1 2 3
3 2 1 2
4 3 2 1
????????rand()函數(shù) -- 0~1間均勻分布的隨機(jī)矩陣
????????rand()函數(shù)產(chǎn)生0~1間均勻分布的隨機(jī)矩陣,其調(diào)用格式如下:
????????r=rand(n):產(chǎn)生維數(shù)為n×n的0~1間均勻分布的隨機(jī)矩陣。
????????r=rand(m,n):產(chǎn)生維數(shù)為n×m的0~1間均勻分布的隨機(jī)矩陣。
????????r=rand(m,n,p,...):產(chǎn)生維數(shù)為n×m×p的0~1間均勻分布的隨機(jī)矩陣。
????????r=rand(size(A)):產(chǎn)生維數(shù)為n×m×p與矩陣A相同的0~1間均勻分布的隨機(jī)矩陣。
>> A=rand(3) % 生成 3*3 的隨機(jī)矩陣
A =
0.9961 0.1067 0.7749
0.0782 0.9619 0.8173
0.4427 0.0046 0.8687
>> B=rand(3,4) % 生成 3*4 的隨機(jī)矩陣
B =
0.0844 0.8001 0.1818 0.1361
0.3998 0.4314 0.2638 0.8693
0.2599 0.9106 0.1455 0.5797
>> C=rand(size(B)) % 生成和矩陣 B 相同維度的隨機(jī)矩陣
C =
0.5499 0.6221 0.4018 0.1233
0.1450 0.3510 0.0760 0.1839
0.8530 0.5132 0.2399 0.2400
????????randn()函數(shù) -- 標(biāo)準(zhǔn)正態(tài)分布隨機(jī)矩陣
????????randn()函數(shù)產(chǎn)生均值為0、方差為1的隨機(jī)矩陣,其調(diào)用格式如下:
????????r=randn(n)
????????r=randn(m,n)
????????r=randn(m,n,p,...)
????????r=randn([m,n,p,...])
????????r=randn(size(A))
????????其格式可參考上述rand()函數(shù)。
????????magic()函數(shù) -- 魔方(幻方)矩陣
????????magic()函數(shù)產(chǎn)生魔方(幻方)矩陣。魔方矩陣中每行、每列和兩條對(duì)角線上的元素和相等, 其調(diào)用格式如下。
????????M=magic(n)
????????pascal()函數(shù) -- 帕斯卡矩陣
????????pascal()函數(shù)產(chǎn)生帕斯卡矩陣,其調(diào)用格式如下:
????????A=pascal(n):返回n階的對(duì)稱正定Pascal矩陣,其中的元素是由Pascal三角組成的,其逆矩陣的元素都是整數(shù)。
????????A=pascal(n,1):返回由下三角的Cholesky因子組成的Pascal矩陣,它是對(duì)稱的,所以它是自己的逆。
????????A=pascal(n,2):返回pascal(n,1)的轉(zhuǎn)置和交換形式。A是單位矩陣的立方根。
????????vander()函數(shù) -- 范德蒙矩陣
????????vander()函數(shù)產(chǎn)生范德蒙矩陣,其調(diào)用格式如下:
????????A=vander(v):生成范德蒙矩陣,矩陣的列是向量v的冪,即A(i,j)=v(i)^(n-j),其中n=length(v)。
????????使用vander()函數(shù)產(chǎn)生范德蒙矩陣,輸入向量可以是行向量或列向量。
>> vander(1:2:5) % 行向量做參數(shù)
ans =
1 1 1
9 3 1
25 5 1
>> vander([1;3;5]) % 列向量做參數(shù)
ans =
1 1 1
9 3 1
25 5 1
????????3、向量、標(biāo)量?
????????當(dāng)m=1或n=1,即1×n或m×1時(shí),建立的矩陣稱為向量。
????????當(dāng)m=n=1時(shí),建立的矩陣稱為標(biāo)量。任意以1×1的矩陣形式表示的單個(gè)實(shí)數(shù)、復(fù)數(shù)都是標(biāo)量。
????????4、空矩陣
????????空矩陣可以通過賦值語句建立。
>> a=[ ] % 構(gòu)建一個(gè)空矩陣
a =
[]
????????空矩陣和0矩陣的本質(zhì)區(qū)別在于:空矩陣內(nèi)沒有任何元素,因此不占用任何存儲(chǔ)空間;而0矩陣表示該 矩陣中的所有元素全部為0,需要占用一定的存儲(chǔ)空間。
矩陣大小及結(jié)構(gòu)的改變
?????????矩陣大小及結(jié)構(gòu)的改變方式主要有旋轉(zhuǎn)矩陣、改變矩陣維度、刪除矩陣元素等。
矩陣下標(biāo)引用?
? ? ? ? 1、雙下標(biāo)索引
????????雙下標(biāo)索引是通過一個(gè) 二元數(shù)組對(duì)來對(duì)應(yīng)元素在矩陣中的行列位置,例如A(2,3)表示矩陣A中第2行第3列的元素。
? ? ? ? 2、單下標(biāo)索引
????????單下標(biāo)索引的方式是采用列元素優(yōu)先的原則,對(duì)m行n列的矩陣按列排序進(jìn)行重組,成為一維數(shù)組,再取新的一維數(shù)組中的元素位置對(duì)應(yīng)的值作為元素在原矩陣中的單下標(biāo)。例如對(duì)于4×4的矩陣,A(7)表示矩陣A中第3行第2列的元 素,而A(13)表示矩陣A中第1行第4列的元素。
? ? ? ? 3、單下標(biāo)和雙下標(biāo)間轉(zhuǎn)換
????????sub2ind函數(shù)
????????格式:IND = sub2ind ( siz , i , j )
????????說明:其功能為將雙下標(biāo)索引值轉(zhuǎn)換為單下標(biāo)索引值,其中siz是一個(gè)包含兩個(gè)元素的數(shù)組,代表了轉(zhuǎn)換矩陣的行列數(shù),一般可以直接用size(A)表示;i與j分別是雙下標(biāo)索引中的行、列值;IND是轉(zhuǎn)換后的單下標(biāo)索引 值。?
????????ind2sub函數(shù)
????????格式:[ i j ] = ind2sub ( siz , ind )
????????說明:其功能為將單下標(biāo)索引值轉(zhuǎn)換為雙下標(biāo)索引值,各變量意義同上。
>> A=magic(3) % 創(chuàng)建一個(gè) 3*3 的幻方矩陣
A =
8 1 6
3 5 7
4 9 2
>> IND=sub2ind ( size(A),2,3 ) % 雙下標(biāo)轉(zhuǎn)換為單下標(biāo)
IND =
8
>> [ i j ]=ind2sub( size(A),7 ) % 單下標(biāo)轉(zhuǎn)換為雙下標(biāo)
i =
1
j =
3
????????4、多個(gè)矩陣元素的索引
????????在下標(biāo)表達(dá)式中,可以用冒號(hào)來表示矩陣的多個(gè)元素。
?????????如:
????????A ( m : n , j )? ? ? ? 表示矩陣從第 m 行到第 n 行,第 j 列的元素
????????A ( m : i : n , j )? ? 表示矩陣第 m 行、第 m+i 行、... 、直到第 n 行,第 j 列的元素
????????A (? : ?, j )?? ? ? ? ? ? ?表示矩陣所有行的第 j 列元素
????????A (? : ?, end )?? ? ? ? 表示矩陣所有行的最后一列元素(end 表示最后一行或最后一列)
????????A ( [1 3]?, j )?? ? ? ? ?表示矩陣第 1 行、第 3 行,第 j 列的元素
????????以上所有示例同樣適用于列,或者行列混合索引。
? ? ? ? 5、矩陣索引常用表達(dá)式
矩陣信息的獲取
1、矩陣結(jié)構(gòu)
????????矩陣的結(jié)構(gòu)是指矩陣子元素的排列方式。
????????這類函數(shù)的返回值是邏輯類型的數(shù)據(jù)。返回值為“1”表示該矩陣是某一特定類型的矩陣;返回值為“0”表 示該矩陣不是該特定類型的矩陣。
2、矩陣大小
????????包括矩陣的維數(shù), 矩陣各維(如最長(zhǎng)維、用戶指定的維)的長(zhǎng)度,矩陣元素的個(gè)數(shù)。
????????ndims函數(shù)
????????對(duì)于空矩陣、標(biāo)量矩陣、一維矩陣和二維矩陣,MATLAB都將其作為普通二維數(shù)組對(duì)待。特別需要注意的是,用 [ ] 產(chǎn)生的空矩陣是作為二維矩陣的,但是在高維矩陣中也有空矩陣的概念,此時(shí)空矩陣則具有多個(gè)維度。
>> A=[ ]; % 空矩陣
>> B=5; % 標(biāo)量
>> C=1:3; % 一維矩陣
>> D=magic(2); % 二維矩陣
>> E( : , : , 2 ) = [1,3 ; 2,4]; % 三維矩陣
>> x=[ ndims(A) , ndims(B) , ndims(C) , ndims(D) , ndims(E) ]
x =
2 2 2 2 3
????????size函數(shù)
????????size函數(shù)的返回值可以是分開顯示的單個(gè)實(shí)數(shù)變量,也可以是一個(gè)行向量;
????????在size函數(shù)的輸入?yún)?shù)中增加維度參數(shù)可以獲取指定維度的長(zhǎng)度,其中“1”表示行,“2”表示列。
>> A=[ ];
>> B=[1,2,3,4];
>> C=[0,2,4;1,3,5];
>> size(A) % 空矩陣
ans =
0 0
>> size(B) % 一維數(shù)組(矩陣),行數(shù) 1 ,列數(shù) 4
ans =
1 4
>> size(C) % 二維數(shù)組(矩陣),行數(shù) 2 ,列數(shù) 3
ans =
2 3
>> size(C,2) % 矩陣的列數(shù)
ans =
3
? ? ? ? 3、矩陣的數(shù)據(jù)類型
????????矩陣作為MATLAB的內(nèi)部數(shù)據(jù)存儲(chǔ)和運(yùn)算結(jié)構(gòu),其元素可以是各種各樣的數(shù)據(jù)類型, 對(duì)應(yīng)不同數(shù)據(jù)類型的元素,可以是數(shù)值、字符串、元胞、結(jié)構(gòu)體等。
????????4、矩陣占用的內(nèi)存
????????通過whos命令查看 當(dāng)前工作區(qū)中指定變量的所有信息,包括變量名、矩陣大小、內(nèi)存占用和數(shù)據(jù)類型等。
>> C=[0,2,4;1,3,5];
>> whos C
Name Size Bytes Class Attributes
C 2x3 48 double
矩陣修改、擴(kuò)展與合并
????????1、矩陣元素的修改
????????可以通過下標(biāo)索引的方式修改矩陣元素,具體方法參考:?矩陣下標(biāo)引用?。
????????如:
????????A( i , j ) = value:等號(hào)左側(cè)為矩陣中的某個(gè)元素;等號(hào)右側(cè)為值。
????????A = [ ] :刪除矩陣中的所有元素。
????????2、矩陣元素的擴(kuò)展與刪除
>> A=[ 1 1 ; 2 2 ]
A =
1 1
2 2
>> A(3 , : ) = 3 % 給整行賦值,增加行
A =
1 1
2 2
3 3
>> A(4 , 1) = 4 % 給新行的元素依次賦值,增加行
A =
1 1
2 2
3 3
4 0
>> A(4 , 2) = 4
A =
1 1
2 2
3 3
4 4
>> A(2 , : )=[ ] % 將整行賦值為空,刪除行
A =
1 1
3 3
4 4
????????3、矩陣合并函數(shù)
????????將兩個(gè)矩陣按某個(gè)維度進(jìn)行合并操作時(shí),原始的兩個(gè)矩陣要在某一個(gè)維度上具有相同的長(zhǎng)度,否則MATLAB在進(jìn)行計(jì)算時(shí)就會(huì)發(fā)生錯(cuò)誤。
????????針對(duì)二維矩陣A、B:[A,B]表示按列存儲(chǔ)合并矩陣,即將B矩陣接到A矩陣的列后面;[A;B]表示按行存儲(chǔ)合并矩陣,即 將B矩陣接到A矩陣的行后面。
>> A=ones(2,3)
A =
1 1 1
1 1 1
>> B=zeros(2,3)
B =
0 0 0
0 0 0
>> [A , B] % 按列,合并在后面,水平方向
ans =
1 1 1 0 0 0
1 1 1 0 0 0
>> [A ; B] % 按行,合并在下面,豎直方向
ans =
1 1 1
1 1 1
0 0 0
0 0 0
? ? ? ? 常用合并函數(shù):?
矩陣元素的查找
????????MATLAB中函數(shù)find()的作用是進(jìn)行矩陣元素的查找,它通常與關(guān)系函數(shù)和邏輯運(yùn)算相結(jié)合。其調(diào)用格 式如下。
????????ind=find(X):該函數(shù)查找矩陣X中的非零元素,函數(shù)返回這些元素的單下標(biāo)。
????????[row,col]=find(X,...):該函數(shù)查找矩陣X中的非零元素,函數(shù)返回這些元素的雙下標(biāo)i和j。
>> A=[ 1 3 0 ; 3 1 0 ; 9 2 4 ]
A =
1 3 0
3 1 0
9 2 4
>> B=find(A) % 返回矩陣 A 中非 0 數(shù)值的下標(biāo),列向量
B =
1
2
3
4
5
6
9
>> C=find(A>1) % 返回矩陣 A 中大于 1 的數(shù)值的下標(biāo)
C =
2
3
4
6
9
>> A(find(A==0))=-1 % 找到矩陣 A 中值為 0 的數(shù)據(jù),并賦值為 -1
A =
1 3 -1
3 1 -1
9 2 4
矩陣元素的排序
????????MATLAB中函數(shù)sort()的作用是按照升序排序,排序后的矩陣和原矩陣的維數(shù)相同。其調(diào)用格式如下。
????????B=sort(A):該函數(shù)對(duì)矩陣A進(jìn)行升序排序。A可為矩陣或向量。
????????B=sort(A,dim):該函數(shù)對(duì)矩陣A進(jìn)行升序排序,并將結(jié)果返回在給定的維數(shù)dim上按照升序排序。當(dāng)dim=1時(shí),按照列進(jìn)行排 序;當(dāng)dim=2時(shí),按照行進(jìn)行排序。
????????B=sort(...,mode):該函數(shù)對(duì)矩陣A進(jìn)行排序,mode可指定排序的方式。ascend指定按升序排序,為默認(rèn)值;descend指定按降序 排序。
>> A=[1 3 0 ; 3 1 0 ; 9 2 4 ]
A =
1 3 0
3 1 0
9 2 4
>> sort(A) % 排序,默認(rèn)按列、升序
ans =
1 1 0
3 2 0
9 3 4
>> sort(A,1) % 按列排序,默認(rèn)升序
ans =
1 1 0
3 2 0
9 3 4
>> sort(A,2) % 按行排序,默認(rèn)升序
ans =
0 1 3
0 1 3
2 4 9
>> sort(A,'descend') % 降序排序,默認(rèn)按列
ans =
9 3 4
3 2 0
1 1 0
>> sort(A,2,'descend') % 按行降序排序
ans =
3 1 0
3 1 0
9 4 2
>> %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
>> % 對(duì)向量進(jìn)行排序
>> B=[2 7 3 0 8 5 ]
B =
2 7 3 0 8 5
>> sort(B)
ans =
0 2 3 5 7 8
矩陣元素的求和
????????MATLAB中函數(shù)sum()和cumsum()的作用是對(duì)矩陣的元素求和。其調(diào)用格式如下。
????????B=sum(A):該函數(shù)對(duì)矩陣A的元素求和,返回由矩陣A各列元素的和組成的向量。
????????B=sum(A,dim):該函數(shù)返回在給定的維數(shù)dim上元素的和。當(dāng)dim=1時(shí),計(jì)算矩陣A各列元素的和;當(dāng)dim=2時(shí),計(jì)算矩陣A各行元素的和。
????????B=cumsum(A)。
????????B=cumsum(A,dim)。
????????函數(shù)cumsum()的調(diào)用格式與sum()類似,不同的是其返回值為矩陣。
????????使用sum(sum())可求出矩陣所有元素的和。
>> A=[ 1 3 0 ; 3 1 0 ; 9 2 4 ]
A =
1 3 0
3 1 0
9 2 4
>> sum(A) % 按列求和,將每列的元素相加
ans =
13 6 4
>> sum(A,2) % 按行求和,將每行的元素相加
ans =
4
4
15
>> cumsum(A) % 按列漸次求和,第 1 行不變,第 n 行值為 1 ~ n 行對(duì)應(yīng)列的元素之和
ans =
1 3 0
4 4 0
13 6 4
>> cumsum(A,2) % 按行漸次求和,第 1 列不變,第 n 列值為 1 ~ n 列對(duì)應(yīng)行的元素之和
ans =
1 4 4
3 4 4
9 11 15
>> sum(sum(A)) % 求矩陣所有元素之和
ans =
23
矩陣元素的求積
????????MATLAB中函數(shù)prod()和cumprod()的作用是對(duì)矩陣的元素求積。其調(diào)用格式如下。
????????B=prod(A):該函數(shù)對(duì)矩陣A的元素求積,返回由矩陣A各列元素的積組成的向量。
????????B=prod(A,dim):該函數(shù)返回在給定的維數(shù)dim上元素的積。當(dāng)dim=1時(shí),計(jì)算矩陣A各列元素的積;當(dāng)dim=2時(shí),計(jì)算矩陣A各 行元素的積。
????????B=cumprod(A)。
????????B=cumprod(A,dim)。
????????函數(shù)cumprod()的調(diào)用格式與prod()類似,不同的是其返回值為矩陣。
????????類同與矩陣元素的求和。
矩陣元素的差分
????????MATLAB中函數(shù)diff()的作用是計(jì)算矩陣元素的差分。其調(diào)用格式如下。
????????Y=diff(X):計(jì)算矩陣各列元素的差分。
????????Y=diff(X,n):計(jì)算矩陣各列元素的n階差分。
????????Y=diff(X,n,dim):計(jì)算矩陣在給定的維數(shù)dim上元素的n階差分。當(dāng)dim=1時(shí),計(jì)算矩陣各列元素的差分;當(dāng)dim=2時(shí),計(jì)算矩 陣各行元素的差分。
????????當(dāng)參數(shù)n≥size(x,dim)時(shí),函數(shù)的返回值是空矩陣。
矩陣分析、分解、特征值和特征向量
? ? ? ? 1、矩陣分析函數(shù)
????????2、矩陣分解函數(shù)
? ? ? ? 3、特征值與特征向量函數(shù)。
????????eig(A):求包含矩陣A的特征值的向量。
????????[X,D]=eig(A):產(chǎn)生一個(gè)矩陣A的特征值在對(duì)角線上的對(duì)角矩陣D和矩陣X,它們的列是相應(yīng)的特征向量,滿足AX=XD。為了 得到有更好條件特征值的矩陣,要進(jìn)行相似變換。
???????? [T,B]=balance(A):找到一個(gè)相似變換矩陣T和矩陣B,使得它們滿足B=T-A?T。B是用命令balance求得的平衡矩陣。
????????eig(A,'nobalance'):不經(jīng)過平衡處理求得矩陣A的特征值和特征向量,也就是不進(jìn)行平衡相似變換。
????????eigs(A):返回一個(gè)由矩陣A的部分特征值組成的向量,和eig命令一樣,但是不返回全部的特征值。如果不帶有參量,則計(jì)算 出最大的特征值。當(dāng)計(jì)算所有特征值時(shí),如果矩陣A的秩不小于6,則計(jì)算出6個(gè)特征值。
????????eigs(f,n):求出矩陣A的部分特征值。在使用一個(gè)矩陣列的線性運(yùn)算符時(shí),字符串f中包含的是M文件的文件名,n指定問題的 階次。用這種方法來求特征值比開始就用運(yùn)算符來求要快。
???????? eigs(A,B,k,sigma):求矩陣A的部分特征值,矩陣B的大小和A相同;如果沒有給出B=eye(size(A)),那么k就是要計(jì)算的特征值 的個(gè)數(shù);如果k沒有給出,就用小于6的數(shù)或者A的秩。
????????變量sigma是一個(gè)實(shí)數(shù)或復(fù)數(shù)的移位參數(shù),或者下列文本字符串中的一個(gè),文本字符串指明的是特征值 的屬性:“l(fā)m”為最大的特征值,“sm”為最小的特征值,“l(fā)r”為最大的實(shí)數(shù)部分,“sr”為最小的實(shí)數(shù)部 分,“be”為同時(shí)求得最大和最小的實(shí)數(shù)部分。
????????condeig(A):返回一個(gè)由矩陣A的特征值條件數(shù)組成的向量。
????????[V,D,s]=condeig(A):返回[V,D]=eig(A)和s=condeig(A)。
稀疏矩陣
????????在許多問題中提到了含有大量0元素的矩陣,這樣的矩陣稱為稀疏矩陣。為了節(jié)省存儲(chǔ)空間和計(jì)算時(shí)間,MATLAB考慮到矩陣的稀疏性,在對(duì)它進(jìn)行運(yùn)算時(shí)有特殊的命令。
????????稀疏矩陣大部分元素是0,因此只需存儲(chǔ)非零元素的下標(biāo)和元素值,這種特殊的存儲(chǔ)方式可以節(jié)省大量的存儲(chǔ)空間和不必要的運(yùn)算。
????????節(jié)省存儲(chǔ)空間:如果MATLAB把一個(gè)矩陣當(dāng)作稀疏矩 陣,那么只需在m×3的矩陣中存儲(chǔ)m個(gè)非零項(xiàng)。第1列是行下標(biāo),第2列是列下標(biāo),第3列是非零元素值,不 必保存0元素。如果存儲(chǔ)每個(gè)浮點(diǎn)數(shù)需要8字節(jié),存儲(chǔ)每個(gè)下標(biāo)需要4字節(jié),那么整個(gè)矩陣在內(nèi)存中存儲(chǔ)需要 16×m字節(jié)。
????????節(jié)省計(jì)算時(shí)間:相對(duì)于普通矩陣來說,稀疏矩陣的計(jì)算速度更快,因?yàn)镸ATLAB只對(duì)非零元素進(jìn)行操作,這是稀疏矩陣第二個(gè)突出的優(yōu)點(diǎn)。
? ? ? ? 1、稀疏矩陣的生成
????????sparse()函數(shù)創(chuàng)建稀疏矩陣
?????????輸入稀疏矩陣
>> % 參數(shù)依次為:行號(hào),列號(hào),元素值
>> % 顯示矩陣內(nèi)容時(shí),按列為順序依次顯示
>> s=sparse([1,2,3,4,5],[2,1,4,6,2],[10,3,-2,-5,1])
s =
(2,1) 3
(1,2) 10
(5,2) 1
(3,4) -2
(4,6) -5
????????滿矩陣轉(zhuǎn)和稀疏矩陣的互換
>> A=[1 0 0 0 ; 0 5 0 0 ; 2 0 0 7]
A =
1 0 0 0
0 5 0 0
2 0 0 7
>> S=sparse(A) % 滿矩陣轉(zhuǎn)換為稀疏矩陣
S =
(1,1) 1
(3,1) 2
(2,2) 5
(3,4) 7
>> B=full(S) % 稀疏矩陣轉(zhuǎn)換為滿矩陣
B =
1 0 0 0
0 5 0 0
2 0 0 7
????????創(chuàng)建特殊稀疏矩陣
? ? ? ? ?2、查看稀疏矩陣
>> A=[ 0 0 0 1 ; 0 0 8 0 ; 4 0 0 0 ; 0 0 0 0 ]
A =
0 0 0 1
0 0 8 0
4 0 0 0
0 0 0 0
>> S=sparse(A); % 創(chuàng)建稀疏矩陣
>> n1=nnz(S) % 查看非零元素的個(gè)數(shù)
n1 =
3
>> n2=nonzeros(S) % 查看非零元素的值
n2 =
4
8
1
>> n3=nzmax(S) % 查看稀疏矩陣的存儲(chǔ)空間
n3 =
3
>> spy(S) % 對(duì)稀疏矩陣中非零元素的分布進(jìn)行圖形化顯示
稀疏矩陣中非零元素的分布
? ? ? ? 3、稀疏矩陣的運(yùn)算
????????滿矩陣的四則運(yùn)算對(duì)稀疏矩陣同樣有效,但是返回結(jié)果有可能是稀疏矩陣或滿矩陣。
????????對(duì)于單個(gè)稀疏矩陣的輸入,大部分函數(shù)輸出的結(jié)果都是稀疏矩陣,有部分函數(shù)輸出的結(jié)果是滿矩陣。
????????對(duì)于多個(gè)矩陣的輸入,如果其中至少有一個(gè)矩陣是滿矩陣,那么大部分函數(shù)的輸出結(jié)果是滿矩陣。
????????對(duì)于矩陣的加、減、乘、除運(yùn)算,只要其中有一個(gè)矩陣是滿矩陣,則輸出的結(jié)果都是滿矩陣。
????????稀疏矩陣的數(shù)乘為稀疏矩陣;稀疏矩陣的冪為稀疏矩陣。
?文章來源地址http://www.zghlxwxcb.cn/news/detail-766800.html文章來源:http://www.zghlxwxcb.cn/news/detail-766800.html
?
到了這里,關(guān)于MATLAB中的矩陣的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!