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、求向量或矩阵元素之和

  1. v为行向量或者列向量,则sum(v)表示求向量中的所有元素之和;
  2. A为矩阵,则sum(A)矩阵的列求和,返回一个行向量;
  3. A为矩阵,则sum(sum(A))求矩阵所有元素之和。

39、定义空矩阵或空向量

v = [];%定义空向量

A = [];%定义空矩阵

40、矩阵或向量的范数

norm(A,1)         %矩阵A的第1范数

norm(A,2)    %矩阵A的第2范数

norm(A,’inf’)    %矩阵A的范数

猜你喜欢

转载自blog.csdn.net/huzhizhewudi/article/details/84404503