matlab稀疏矩陣建立及例項

2021-09-30 10:57:27 字數 2644 閱讀 4550

一般有兩個命令可以用來建立稀疏矩陣:

1. sparse(較常用)  

2. spdiags(主要用於非零元素都是對角線元素的情況)

sparse。使用格式如下

a = sparse( i,j,,s,m,n,nzmax )

其實matlab函式sparse的文件中說的比較明白:

s = sparse(i,j,s,m,n,nzmax) uses vectors i, j, and s to generate an m-by-n sparse matrix such that s(i(k),j(k)) = s(k), with space allocated for nzmax nonzeros. vectors i, j, and s are all the same length.

主要意思:i, j, s都是向量,i,j分別為非零元素的行下標和列下標構成的列向量,i(k)和j(k)作為兩個下標標記非零元素在矩陣中的位置,這個位置上的元素值為s(k).

比如要構造的係數矩陣a中a(3,5)=7,而7是a中第10個非零元素(第幾個元素是按列來數的),則i(10)=3,j(10)=5,s(10)=7

構造舉例:

i=[1 3 1 2 1 4];j=[1 1 2 2 3 4];s = [1 2 3 4 5 6];

>> sparse(i,j,s)

ans =

(1,1)        1

(3,1)        2

(1,2)        3

(2,2)        4

(1,3)        5

(4,4)        6

m,n表明a 是 m×n 階矩陣(可省略);nzmax 用於指定a 中非零元素所用儲存空間大小(可省略)。最簡單的使用方式是只輸入非零元的資料以及各非零元的行指標和列指標。例如,建立乙個只有三個非零元的4×5階矩陣可用下面命令

i=[1  2  4];j=[1  3  5];s = [6  7  8]; 

a = sparse(i,j,s)

matlab執行後,將顯示出

a =(1,1)        6

(2,3)        7

(4,5)        8

這是特殊的稀疏矩陣儲存方式,它的特點是所佔記憶體少,運算速度快。如果想得到矩陣的全元素儲存方式,可用下面命令

b = full(a)

計算機執行後,將顯示出

b =6     0     0     0     0

0     0     7     0     0

0     0     0     0     0

0     0     0     0     8

當所要構造矩陣比較大,而非零元素的位置又比較有規律時,可以考慮用sparese函式,首先構造i,j,s  然後矩陣就可以自動生成了。

2. spdiags(適用於非零元素均在對角線上,且對角線元素比較有規律,容易構造),例如,建立乙個三對角的10×10矩陣, 可用下面命令

e = ones (10,1); % e似乎必須寫成n*1的形式

a = spdiags ([ e,4*e,e ],[-1,0,1],10,10);

% 頭乙個大括號分別對應是3個不同非零對角線元素,按從下往上排列;第二個大括號對應於每個對角線相對於**對角線的位置

% 後面的兩個數就是要構造的係數矩陣的行列數

b = full (a)

這裡,a是稀疏矩陣儲存的方式,b是全元素儲存的方式

b =4     1     0     0     0     0     0     0     0     0

1     4     1     0     0     0     0     0     0     0

0     1     4     1     0     0     0     0     0     0

0     0     1     4     1     0     0     0     0     0

0     0     0     1     4     1     0     0     0     0

0     0     0     0     1     4     1     0     0     0

0     0     0     0     0     1     4     1     0     0

0     0     0     0     0     0     1     4     1     0

0     0     0     0     0     0     0     1     4     1

0     0     0     0     0     0     0     0     1     4

再比如,我要構造影象處理中經常用到的梯度計算矩陣,要產生類似如下的

-1 -1 -1  1 1 1 0 0 0....

-1 -1 -1 1 1 1 0 0 0... 

-1 -1 -1 1 1 1 0 0 0... 

可以使用命令:

%假設影象大小為n=n*n,這裡給乙個粗略的構造,最後幾位沒有考慮,其實不會有太大影響

e = ones(n,1);

dv = spdiags([(-1)*e,(-1)*e,(-1)*e,e,e,e],[0,1,2,3,4,5],n,n);

matlab稀疏矩陣建立及例項

一般有兩個命令可以用來建立稀疏矩陣 1.sparse 較常用 2.spdiags 主要用於非零元素都是對角線元素的情況 sparse。使用格式如下 a sparse i,j,s,m,n,nzmax 其實matlab函式sparse的文件中說的比較明白 s sparse i,j,s,m,n,nzmax...

Matlab稀疏矩陣

matlab的矩陣有兩種儲存方式,完全儲存方式和稀疏儲存方式 1.完全儲存方式 將矩陣的全部元素按列儲存,矩陣中的全部零元素也儲存到矩陣中。2.稀疏儲存方式 僅儲存矩陣所有的非零元素的值及其位置,即行號和列號,顯然這對於具有大量零元素的稀疏矩陣來說是十分有效的。設1 0 0 0 a 0 5 0 0 ...

Matlab 12 稀疏矩陣

二 稀疏儲存方式的產生 3.帶狀稀疏矩陣的稀疏儲存方式 4.單位矩陣的稀疏儲存方式 矩陣的每乙個元素都進行儲存 只儲存非0元素的值及其位置,即行號與列號 採用稀疏儲存方式時,矩陣元素的儲存順序並沒改變,也是按列的順序儲存。a sparse s 將矩陣s轉化為稀疏儲存方式的矩陣a s full a 將...