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的范数