现在的位置: 首页 > 编程语言 > 正文

Matlab 矩阵相关函数

2017年01月10日 编程语言 ⁄ 共 6853字 ⁄ 字号 评论关闭
30元程序员衣装优惠券,仅剩3天!点击领取

1.矩阵对角线元素的抽取

函数 diag

格式 X = diag(v,k)   %以向量v的元素作为矩阵X的第k条对角线元素,当k=0时,v为X的主对角线;当k>0时,v为上方第k条对角线;当k<0时,v为下方第k条对角线。

X = diag(v)    %以v为主对角线元素,其余元素为0构成X。

v = diag(X,k)   %抽取X的第k条对角线元素构成向量v。k=0:抽取主对角线元素;k>0:抽取上方第k条对角线元素;k<0抽取下方第k条对角线元素。

v = diag(X)    %抽取主对角线元素构成向量v。

2.上三角阵和下三角阵的抽取

函数 tril   %取下三角部分

格式 L = tril(X)     %抽取X的主对角线的下三角部分构成矩阵L

L = tril(X,k)    %抽取X的第k条对角线的下三角部分;k=0为主对角线;k>0为主对角线以上;k<0为主对角线以下。

函数 triu    %取上三角部分

格式 U = triu(X)    %抽取X的主对角线的上三角部分构成矩阵U

U = triu(X,k)   %抽取X的第k条对角线的上三角部分;k=0为主对角线;k>0为主对角线以上;k<0为主对角线以下。

3.矩阵的变维

矩阵的变维有两种方法,即用“:”和函数“reshape”,前者主要针对2个已知维数矩阵之间的变维操作;而后者是对于一个矩阵的操作。

(1)“:”变维

(2)Reshape函数变维

格式 B = reshape(A,m,n)       %返回以矩阵A的元素构成的m×n矩阵B

B = reshape(A,m,n,p,…)   %将矩阵A变维为m×n×p×…

B = reshape(A,[m n p…])   %同上

B = reshape(A,siz)        %由siz决定变维的大小,元素个数与A中元素个数

相同。

(5)复制和平铺矩阵

函数 repmat

格式 B = repmat(A,m,n)       %将矩阵A复制m×n块,即B由m×n块A平铺而成。

B = repmat(A,[m n])      %与上面一致

B = repmat(A,[m n p…])   %B由m×n×p×…个A块平铺而成

repmat(A,m,n)           %当A是一个数a时,该命令产生一个全由a组成的m×n矩阵。

1.3 矩阵分解

1.3.1 Cholesky分解

函数 chol

格式 R = chol(X)      %如果X为n阶对称正定矩阵,则存在一个实的非奇异上三角阵R,满足R'*R = X;若X非正定,则产生错误信息。

[R,p] = chol(X)   %不产生任何错误信息,若X为正定阵,则p=0,R与上相同;若X非正定,则p为正整数,R是有序的上三角阵。

1.3.2 LU分解

矩阵的三角分解又称LU分解,它的目的是将一个矩阵分解成一个下三角矩阵L和一个上三角矩阵U的乘积,即A=LU。

函数 lu

格式 [L,U] = lu(X)     %U为上三角阵,L为下三角阵或其变换形式,满足LU=X。

[L,U,P] = lu(X)   %U为上三角阵,L为下三角阵,P为单位矩阵的行变换矩阵,满足LU=PX。

1.3.3  QR分解

将矩阵A分解成一个正交矩阵与一个上三角矩阵的乘积。

函数  qr

格式  [Q,R] = qr(A)     %求得正交矩阵Q和上三角阵R,Q和R满足A=QR。

[Q,R,E] = qr(A)  %求得正交矩阵Q和上三角阵R,E为单位矩阵的变换形式,R的对角线元素按大小降序排列,满足AE=QR。

[Q,R] = qr(A,0)    %产生矩阵A的“经济大小”分解

[Q,R,E] =qr(A,0)  %E的作用是使得R的对角线元素降序,且Q*R=A(:, E)。

R = qr(A)         %稀疏矩阵A的分解,只产生一个上三角阵R,满足R'*R =A'*A,这种方法计算A'*A时减少了内在数字信息的损耗。

[C,R] = qr(A,b)    %用于稀疏最小二乘问题:minimize||Ax-b||的两步解:[C,R] =qr(A,b),x = R\c。

R = qr(A,0)       %针对稀疏矩阵A的经济型分解

[C,R] =qr(A,b,0)   %针对稀疏最小二乘问题的经济型分解

函数  qrdelete

格式  [Q,R] = qrdelete(Q,R,j)   %返回将矩阵A的第j列移去后的新矩阵的qr分解

函数  qrinsert

格式  [Q,R] = qrinsert(Q,R,j,x)  %在矩阵A中第j列插入向量x后的新矩阵进行qr分解。若j大于A的列数,表示在A的最后插入列x。

    

1.3.6  特征值分解

函数  eig

格式  d = eig(A)         %求矩阵A的特征值d,以向量形式存放d。

d = eig(A,B)       %A、B为方阵,求广义特征值d,以向量形式存放d。

[V,D] = eig(A)      %计算A的特征值对角阵D和特征向量V,使AV=VD成立。

[V,D] =eig(A,'nobalance')  %当矩阵A中有与截断误差数量级相差不远的值时,该指令可能更精确。'nobalance'起误差调节作用。

[V,D] =eig(A,B)   %计算广义特征值向量阵V和广义特征值阵D,满足AV=BVD。

[V,D] =eig(A,B,flag)   %由flag指定算法计算特征值D和特征向量V,flag的可能值为:'chol'表示对B使用Cholesky分解算法,这里A为对称Hermitian矩阵,B为正定阵。'qz'表示使用QZ算法,这里A、B为非对称或非Hermitian矩阵。

说明  一般特征值问题是求解方程: 解的问题。广义特征值问题是求方程: 解的问题。

1.3.7  奇异值分解

函数  svd

格式  s = svd (X)          %返回矩阵X的奇异值向量

[U,S,V] = svd (X)   %返回一个与X同大小的对角矩阵S,两个酉矩阵U和V,且满足= U*S*V'。若A为m×n阵,则U为m×m阵,V为n×n阵。奇异值在S的对角线上,非负且按降序排列。

[U,S,V] = svd (X,0)  %得到一个“有效大小”的分解,只计算出矩阵U的前n列,矩阵S的大小为n×n。

 1.4 线性方程的组的求解

我们将线性方程的求解分为两类:一类是方程组求唯一解或求特解,另一类是方程组求无穷解即通解。可以通过系数矩阵的秩来判断:

若系数矩阵的秩r=n(n为方程组中未知变量的个数),则有唯一解;

若系数矩阵的秩r<n,则可能有无穷解;

线性方程组的无穷解 =对应齐次方程组的通解+非齐次方程组的一个特解;其特解的求法属于解的第一类问题,通解部分属第二类问题。

1.4.1  求线性方程组的唯一解或特解(第一类问题)

这类问题的求法分为两类:一类主要用于解低阶稠密矩阵 —— 直接法;另一类是解大型稀疏矩阵—— 迭代法。

1.利用矩阵除法求线性方程组的特解(或一个解)

方程:AX=b

解法:X=A\b

2.利用矩阵的LU、QR和cholesky分解求方程组的解

(1)LU分解:

LU分解又称Gauss消去分解,可把任意方阵分解为下三角矩阵的基本变换形式(行交换)和上三角矩阵的乘积。即A=LU,L为下三角阵,U为上三角阵。

则:A*X=b        变成L*U*X=b

所以X=U\(L\b)   这样可以大大提高运算速度。

命令  [L,U]=lu (A)

(2)Cholesky分解

若A为对称正定矩阵,则Cholesky分解可将矩阵A分解成上三角矩阵和其转置的乘积,即:   其中R为上三角阵。

方程  A*X=b 变成   

所以                        

(3)QR分解

对于任何长方矩阵A,都可以进行QR分解,其中Q为正交矩阵,R为上三角矩阵的初等变换形式,即:A=QR

方程  A*X=b 变形成    QRX=b

所以                    X=R\(Q\b)

1.4.2  求线性齐次方程组的通解

在Matlab中,函数null用来求解零空间,即满足A?X=0的解空间,实际上是求出解空间的一组基(基础解系)。

格式  z = null         % z的列向量为方程组的正交规范基,满足 。

    % z的列向量是方程AX=0的有理基

1.4.3  求非齐次线性方程组的通解

非齐次线性方程组需要先判断方程组是否有解,若有解,再去求通解。

因此,步骤为:

第一步:判断AX=b是否有解,若有解则进行第二步

第二步:求AX=b的一个特解

第三步:求AX=0的通解

第四步:AX=b的通解=AX=0的通解+AX=b的一个特解。

 1.6 秩与线性相关性

1.6.1  矩阵和向量组的秩以及向量组的线性相关性

矩阵A的秩是矩阵A中最高阶非零子式的阶数;向量组的秩通常由该向量组构成的矩阵来计算。

函数  rank

格式  k = rank(A)       %返回矩阵A的行(或列)向量中线性无关个数

k = rank(A,tol)    %tol为给定误差

1.6.2  求行阶梯矩阵及向量组的基

行阶梯使用初等行变换,矩阵的初等行变换有三条:

1.交换两行   (第i、第j两行交换)

2.第i行的K倍  

3.第i行的K倍加到第j行上去  

通过这三条变换可以将矩阵化成行最简形,从而找出列向量组的一个最大无关组,Matlab将矩阵化成行最简形的命令是rref或rrefmovie。

函数  rref或rrefmovie

格式  R = rref(A)         %用高斯—约当消元法和行主元法求A的行最简行矩阵R

[R,jb] =rref(A)     %jb是一个向量,其含义为:r =length(jb)为A的秩;A(:, jb)为A的列向量基;jb中元素表示基向量所在的列。

[R,jb] =rref(A,tol)   %tol为指定的精度

rrefmovie(A)        %给出每一步化简的过程

 1.7 稀疏矩阵技术

1.7.1  稀疏矩阵的创建

函数  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的长度。

1.7.2  将稀疏矩阵转化为满矩阵

函数  full

格式  A=full(S)  %S为稀疏矩阵,A为满矩阵。

1.7.3  稀疏矩阵非零元素的索引

函数  find

格式  k = find(x)  %按行检索X中非零元素的点,若没有非零元素,将返回空矩阵。

[i,j] = find(X)    %检索X中非零元素的行标i和列标j

[i,j,v] =find(X)   %检索X中非零元素的行标i和列标j以及对应的元素值v

1.7.4  外部数据转化为稀疏矩阵

函数  spconvert

格式  S=spconvert(D)   %D是只有3列或4列的矩阵

说明:先运用load函数把外部数据(.mat文件或.dat文件)装载于MATLAB内存空间中的变量T;T数组的行维为nnz或nnz+1,列维为3(对实数而言)或列维为4(对复数而言);T数组的每一行(以[i,j,Sre,Sim]形式)指定一个稀疏矩阵元素。

1.7.5  基本稀疏矩阵

1.带状(对角)稀疏矩阵

函数  spdiags

格式  [B,d] = spdiags(A)   %从矩阵A中提取所有非零对角元素,这些元素保存在矩阵B中,向量d表示非零元素的对角线位置。

B =spdiags(A,d)     %从A中提取由d指定的对角线元素,并存放在B中。

A =spdiags(B,d,A)   %用B中的列替换A中由d指定的对角线元素,输出稀疏矩阵。

A = spdiags(B,d,m,n)   %产生一个m×n稀疏矩阵A,其元素是B中的列元素放

在由d指定的对角线位置上。

2.单位稀疏矩阵

函数  speye

格式  S = speye(m,n)   %生成m×n的单位稀疏矩阵

S = speye(n)     %生成n×n的单位稀疏矩阵

3.稀疏均匀分布随机矩阵

函数  sprand

格式  R = sprand(S)           %生成与S具有相同稀疏结构的均匀分布随机矩阵

R = sprand(m,n,density)   %生成一个m×n的服从均匀分布的随机稀疏矩阵,非零元素的分布密度是density。

R = sprand(m,n,density,rc)  %生成一个近似的条件数为1/rc、大小为m×n的均匀分布的随机稀疏矩阵。

4.稀疏正态分布随机矩阵

函数  sprandn

格式  R = sprandn(S)            %生成与S具有相同稀疏结构的正态分布随机矩阵。

R = sprandn(m,n,density)   %生成一个m×n的服从正态分布的随机稀疏矩阵,非零元素的分布密度是density。

R = sprandn(m,n,density,rc)  %生成一个近似的条件数为1/rc、大小为m×n的均匀分布的随机稀疏矩阵。

5.稀疏对称随机矩阵

函数  sprandsym

格式  R = sprandsym(S)  %生成稀疏对称随机矩阵,其下三角和对角线与S具有相同的结构,其元素服从均值为0、方差为1的标准正态分布。

R = sprandsym(n,density)   %生成n×n的稀疏对称随机矩阵,矩阵元素服从正态分布,分布密度为density。

R =sprandsym(n,density,rc)  %生成近似条件数为1/rc的稀疏对称随机矩阵

R =sprandsym(n,density,rc,kind)  %生成一个正定矩阵,参数kind取值为kind=1表示矩阵由一正定对角矩阵经随机Jacobi旋转得到,其条件数正好为1/rc;kind=2表示矩阵为外积的换位和,其条件数近似等于1/rc;kind=3表示生成一个与矩阵S结构相同的稀疏随机矩阵,条件数近似为1/rc,density被忽略。

1.7.6  稀疏矩阵的运算

1.稀疏矩阵非零元素的个数

函数  nnz

格式  n = nnz(X)   %返回矩阵X中非零元素的个数

2.稀疏矩阵的非零元素

函数  nonzeros

格式  s = nonzeros(A)    %返回矩阵A中非零元素按列顺序构成的列向量

3.稀疏矩阵非零元素的内存分配

函数  nzmax

格式  n = nzmax(S)    %返回非零元素分配的内存总数n

4.稀疏矩阵的存贮空间

函数  spalloc

格式  S =spalloc(m,n,nzmax)   %产生一个m×n阶只有nzmax个非零元素的稀疏矩阵,这样可以有效减少存贮空间和提高运算速度。

5.稀疏矩阵的非零元素应用

函数  spfun

格式  f = spfun('function',S)  %用S中非零元素对函数'function'求值,如果'function'不是对稀疏矩阵定义的,同样可以求值。

6.把稀疏矩阵的非零元素全换为1

函数  spones

格式  R = spones(S)    %将稀疏矩阵S中的非零元素全换为1

1.7.7  画稀疏矩阵非零元素的分布图形

函数  spy

格式  spy(S)  %画出稀疏矩阵S中非零元素的分布图形。S也可以是满矩阵。

spy(S,markersize)            % markersize为整数,指定点阵大小。

spy(S,'LineSpec')            %'LineSpec'指定绘图标记和颜色

spy(S,'LineSpec',markersize)   %参数与上面相同 

http://blog.sina.com.cn/s/blog_4bbcda6d01017mb5.html>

http://wenku.baidu.com/view/c1e8c3d7360cba1aa811da99.html

30元程>序员衣装优惠券,仅剩3天!点击领取

抱歉!评论已关闭.