Matlab從入門到精通(七)--矩陣基本運算
31、稀疏矩陣的建立
函式 sparse
格式 S = sparse(A) %將矩陣A轉化為稀疏矩陣形式,即由A的非零元素和下標構成稀疏矩陣S。若A本身為稀疏矩陣,則返回A本身。
S = sparse(m,n) %生成一個m×n的所有元素都是0的稀疏矩陣
S = sparse(i,j,s) %生成一個由長度相同的向量i,j和s定義的稀疏矩陣S,其中i,j是整數向量,定義稀疏矩陣的元素位置(i,j),s是一個標量或與i,j長度相同的向量,表示在(i,j)位置上的元素。
S = sparse(i,j,s,m,n) %生成一個m×n的稀疏矩陣,(i,j)對應位置元素為si,m = max(i)且n =max(j)。
S = sparse(i,j,s,m,n,nzmax) %生成一個m×n的含有nzmax個非零元素的稀疏矩陣S,nzmax的值必須大於或者等於向量i和j的長度。
【例】
>> X = [1 3 5;5 -9 0; 32 1 18];
>> S = sparse(X)
S =
(1,1) 1
(2,1) 5
(3,1) 32
(1,2) 3
(2,2) -9
(3,2) 1
(1,3) 5
(3,3) 18
32、稀疏矩陣的運算
32.1稀疏矩陣非零元素的個數
函式 nnz
格式 n = nnz(X) %返回矩陣X中非零元素的個數
32.2稀疏矩陣的非零元素
函式 nonzeros
格式 s = nonzeros(A) %返回矩陣A中非零元素按列順序構成的列向量
32.3稀疏矩陣非零元素的記憶體分配
函式 nzmax
格式 n = nzmax(S) %返回非零元素分配的記憶體總數n
32.4稀疏矩陣的存貯空間
函式 spalloc
格式 S = spalloc(m,n,nzmax) %產生一個m×n階只有nzmax個非零元素的稀疏矩陣,這樣可以有效減少存貯空間和提高運算速度。
32.5稀疏矩陣的非零元素應用
函式 spfun
格式 f = spfun('function',S) %用S中非零元素對函式'function'求值,如果'function'不是對稀疏矩陣定義的,同樣可以求值。
32.6把稀疏矩陣的非零元素全換為1
函式 spones
格式 R = spones(S) %將稀疏矩陣S中的非零元素全換為1
32.7 畫稀疏矩陣非零元素的分佈圖形
函式 spy
格式 spy(S) %畫出稀疏矩陣S中非零元素的分佈圖形。S也可以是滿矩陣。
spy(S,markersize) % markersize為整數,指定點陣大小。
spy(S,'LineSpec') %'LineSpec'指定繪圖示記和顏色
spy(S,'LineSpec',markersize) %引數與上面相同
33、求矩陣對角線上元素之和
函式:trace
例:
>> X = [1 3 5;5 -9 0; 32 1 18];
>> trace(X)
ans =
10
34、矩陣處理
cat 向量連線 reshape 改變矩陣行列個數
diag 建立對角矩陣或獲取對角向量 rot90 將矩陣旋轉90度
fliplr 按左右方向翻轉矩陣元素 tril 取矩陣的下三角部分
flipud 按上下方向翻轉矩陣元素 triu 取矩陣的上三角部分
repmat 複製並排列矩陣函式
35、特殊矩陣
35.1帕斯卡矩陣
我們知道,二次項(x+y)n展開後的係數隨n的增大組成一個三角形表,稱為楊輝三角形。由楊輝三角形表組成的矩陣稱為帕斯卡(Pascal)矩陣。函式pascal(n)生成一個n階帕斯卡矩陣。注:矩陣的對角線上元素即為(x+y)^n的展開項的係數
35.2範得蒙矩陣
範得蒙(Vandermonde)矩陣最後一列全為1,倒數第二列為一個指定的向量,其他各列是其後列與倒數第二列的點乘積。可以用一個指定向量生成一個範得蒙矩陣。在MATLAB中,函式vander(V)生成以向量V為基礎向量的範得蒙矩陣。例如,A=vander([1;2;3;5])即可得到上述範得蒙矩陣。
35.3希爾伯特矩陣
在MATLAB中,生成希爾伯特矩陣的函式是hilb(n)。
使用一般方法求逆會因為原始資料的微小擾動而產生不可靠的計算結果。MATLAB中,有一個專門求希爾伯特矩陣的逆的函式invhilb(n),其功能是求n階的希爾伯特矩陣的逆矩陣。
35.4託普利茲矩陣
託普利茲(Toeplitz)矩陣除第一行第一列外,其他每個元素都與左上角的元素相同。生成託普利茲矩陣的函式是toeplitz(x,y),它生成一個以x為第一列,y為第一行的託普利茲矩陣。這裡x, y均為向量,兩者不必等長。toeplitz(x)用向量x生成一個對稱的託普利茲矩陣。例如
T=toeplitz(1:6)
36、其它特殊矩陣
compan 生成伴隨矩陣 invhilb 生成逆hilbert矩陣
gallery 生成一些小的測試矩陣 magic 生成magic矩陣
hadamard 生成hadamard矩陣 pascal 生成pascal矩陣
hankel 生成hankel矩陣 toeplitz 生成toeplitz矩陣
hilb 生成hilbert矩陣 wilkinson 生成wilkinson特徵值測試矩陣
37、陣列索引
向量:v = [1 2 3 4 5 6 7 8 9 0];
【例一】:取向量v的前三個元素
>> v(1:3)
ans =
1 2 3
【例二】:取向量的後6個元素
>> v(end-5:end)
ans =
5 6 7 8 9 0
【例三】:向量轉置
使用v’或者v(:)都可以實現轉置操作
【例四】:從第一個元素開始,步長為2,直到最後一個元素
>> v(1:2:end)
ans =
1 3 5 7 9
【例五】:從最後一個元素開始,步長為-2,直到第一個元素
>> v(end:-2:1)
ans =
0 8 6 4 2
【例六】:取出第1,4,6個元素
>> v([1,4,6])
ans =
1 4 6
38、求向量或矩陣元素之和
- v為行向量或者列向量,則sum(v)表示求向量中的所有元素之和;
- A為矩陣,則sum(A)矩陣的列求和,返回一個行向量;
- A為矩陣,則sum(sum(A))求矩陣所有元素之和。
39、定義空矩陣或空向量
v = [];%定義空向量
A = [];%定義空矩陣
40、矩陣或向量的範數
norm(A,1) %矩陣A的第1範數
norm(A,2) %矩陣A的第2範數
norm(A,’inf’) %矩陣A的範數