数值计算功能
向量及其运算
1、向量生成
(1)、直接输入
向量元素用“[]”括起来,用空格或逗号生成行向量,用分号生成列向量
a1=[11141718]
a2=[11,14,17,18]
a2=[11;14;17;18] %列向量
用“’”可以进行向量转置
a1=[11 14 1718]
a4=a1'??%a1行向量,a4列向量
也可以用组合方法:
A=[1 2 3];
B=[7 8 9];
C=[A 4ones(1,2)B]
(2)、等差元素向量生成
冒号生成法:Vec=Vec0:n:Vecn,其中Vec表示生成的向量,Vec0表示第一个元素,n表示步长,Vecn表示最后一个元素
使用linespace函数:Vec=linespace(Vec0,n,Vecn),其中Vec表示生成的向量,Vec0表示第一个元素,n表示生成向量元素个数(默认n=100),Vecn表示最后一个元素
vec1=10:5:50
vec2=50:-5:10
vec3=linspace(10,50,6)
2、向量的基本运算
(1)、向量与数的四则运算
向量中每个元素与数的加减乘除运算(除法运算时,向量只能作为被除数,数只能作为除数)vec1=linspace(10,50,6)
vec1+100
vec2=logspace(0,10,6)??%对数等分向量
vec2/100
(2)、向量与向量之间的加减运算
向量中的每个元素与另一个向量中相对应的元素的加减运算
vec1=linspace(10,50,6)
vec2=logspace(0,2,6)
vec3=vec1+vec2
(3)、点积、叉积和混合机
点积:dot函数,注意向量维数的一致性
x1=[11 22 33 44]
x2=[1 2 3 4]
a=dot(x1,x2)
sum(x1.*x2) %还可以采用sum函数计算向量的点积
叉积:cross函数,注意向量维数的一致性(由几何意义可知,向量维数只能为3)
x1=[11 2233 44]
x2=[1 2 3 4]
x3=cross(x1,x2)?%报错,维数只能为3
x1=[1122 33]
x2=[1 23]
x3=cross(x1,x2)
混合积:结果为一个数,先求cross,再求dot
a=[1 23]
b=[243]
c=[5 2 1]
v=dot(a,cross(b,c))
v=cross(a,dot(b,c)) ?%报错
矩阵及其运算
MATLAB的基本单位是矩阵,逗号或空格区分同一行不同元素,分号区分不同行
1、矩阵的生成
4种方法:在command window直接输入;通过语句和函数产生;M文件中建立;外部数据文件中导入
(1)、直接输入:把矩阵元素直接排列到方括号中,每行元素用逗号或空格相隔,行与行之间用分号相隔
martix=[1 1 11;2,2,2,2;3,3,3,3;4 44 4]
冒号用法:
A=[1 1 1;123;1 36]
B=A(1:2,:)
(2)文件导入:
*.mat
*.txt
*.dat
load 文件名参数
直接导入:File—Import Data
2、矩阵的基本数值运算
(1)、矩阵与是常数的四则运算(除法时,常数只能作为除数)
matrix=[11 1 1;2,2,2,2;3,3,3,3;4 4 44]
m1=100+matrix
m2=100-matrix
m3=100*matrix
m4=matrix/2
(2)、矩阵之间的四则运算
加减法:矩阵各个元素之间的加减法,必须是同型矩阵
matrix=[1 1 11;2,2,2,2;3,3,3,3;4 4 4 4]
m1=20*matrix
m2=m1+matrix
m3=[11 2233;1 23;4 5 6]
m4=matrix-m1
m5=m3+m1??%报错,非同型矩阵
乘法:用*,左矩阵的列数需等于右矩阵的行数
A=[1 1 1 1;22 2 2;3 3 3 3;4444]
B=[1 5 92;6357;2 5 89;456 3]
C=A*B
D=[1 5 9;6 35;2 5 8]
E=A*D??%报错,4*4矩阵不能与3*3矩阵相乘
除法:
左除\(AX=B则X=A\B,相当于X=inv(A)*B,但是左除稳定性好)
右除/(XA=B则X=B/A,相当于X=B*inv(A))
个人认为:左除相当于逆矩阵左乘,右除相当于逆矩阵右乘
%解方程组XA=B的解,本列中A=[2 1 -1;2 10;1 -11] ;B=[1 -13;4 3 2]A=[2 1-1; 2 10;1-1 1]
B=[1 -1 3;4 3 2]
X=B/A
矩阵可以使用比较运算符:结果矩阵的对应位置为0或1
数据变换:
floor
ceil
round
fix
rem
[n,d]=rat(A):A表示为两个整数阵对应元素相除的形式A=n./d
3、矩阵的特征参数运算
(1)、乘方与开方
乘方:A^p计算A的p次方
p>0:A的p次方
p<0:A逆矩阵的abs(p)次方
A=[12 34;4567;45 6 7;891011]
B=A^10
开方:若有X*X=A,则有sqrtm(A)=X
A=magic(5)
B=sqrtm(A)
B^2?%验证正确性
(2)、指数与对数
指数:expm(X)=V*diag(exp(diag(D)))/V([V,D]=eig(X))
对数:L=logm(A),与指数运算互逆
X=rand(4)
Y=expm(X)
A=randn(4)
B=logm(A)
(3)、逆运算
inv函数,充要条件:矩阵的行列式不为0
A=[10 0 0;12 0 0;21 3 0;1 214]
B=inv(A)
广义逆矩阵(伪逆):
pinv(A)
非奇异矩阵的pinv与inv相同
(4)、行列式
det函数
A=[1 0 00;1 2 00;2 1 3 0;1 2 14]
B=inv(A)
x=det(A)
y=det(B)
i=x*y
(5)、特征值
E=eig(X):生成由X的特征值组成的列向量
[V,D]=eig(X):V是以X的特征向量为列向量的矩阵,D是由矩阵X的特征值构成的对角阵D=eigs(X):生成由X的特征值组成的列向量(eigs函数使用迭代法求解矩阵的特征值和特征向量,X必须是方阵,最好是大型稀疏矩阵)
[V,D]=eig(X):V是以X的特征向量为列向量的矩阵,D是由矩阵X的特征值构成的对角阵X=magic(3)
A=[100;003;0 9 0]
E=eig(X)
[VD]=eig(X)
D=eigs(A)
[VD]=eigs(A)
(6)、矩阵(向量)的范数
norm(X):2-范数
norm(X,2):2-范数
norm(X,1):1-范数
norm(X,inf):无穷范数
norm(X,’fro’):Frobenius范数
normest(X):只能计算2-范数,并且是2-范数的估计值,用于计算norm(X)比较费时的情况X=hilb(4)
norm(4)
norm(X)
norm(X,2)
norm(X,1)
norm(X,inf)
norm(X,'fro')
normest(X)
(7)、矩阵的条件数运算
矩阵的条件数是判断矩阵“病态”成都的一个度量,矩阵A的条件数越大,表明A越病态,反之,表明A越良态,Hilbert矩阵就是有名的病态矩阵
cond(X):返回关于矩阵X的2-范数的条件数
cond(X,P):关于矩阵X的P-范数的条件数(P为1、2、inf或’fro’)
rcond(X):计算矩阵条件数的倒数值,该值越接近0就越病态,越接近1就越良态condest(X):计算关于矩阵X的1-范数的条件数的估计值
M=magic(3);
H=hilb(4);
c1=cond(M)
c2=cond(M,1)
c3=rcond(M)
c4=condest(M)
h1=cond(H)
h2=cond(H,inf)
h3=rcond(H)
h4=condest(H)
由以上结果可以看出,魔术矩阵比较良态,Hilbert矩阵是病态的
(8)、秩
rank函数
T=rand(6)
rank(T) ?%6,满秩矩阵
T1=[1 1 1;2 2 3]
r=rank(T1)??%r=2,行满秩矩阵
(9)、迹
trace函数,主对角线上所有元素的和,也是特征值之和
M=magic(5)
T=trace(M)
T1=eig(M)
T2=sum(T1)
4、矩阵的分解运算
(1)、三角分解(lu)
非奇异矩阵A(n*n),如果其顺序主子式均不为0,则存在唯一的单位下三角L和上三角阵U,从而使得A=LU
[L,U]=lu(X):产生一个上三角矩阵U和一个下三角矩阵L,使得X=LU,X可以不为方阵[L,U,P]=lu(X):产生一个单位下三角矩阵L、一个上三角矩阵U和交换矩阵P,PX=LU
Y=lu(X):如果X是满矩阵,将产生一个lapack’s的dgetrf和zgetrf的输出常式矩阵Y;如果X是稀疏矩阵,产生的矩阵Y将包含严格的下三角矩阵L和上三角矩阵U,这两种情况下,都不会有交换矩阵P
X=[6 2 1 -1;2410;114-1;-1 0-1 3]
[L U]=lu(X)
[LUP]=lu(X)
Y=lu(X)
(2)、正交分解(qr)
对于矩阵A(n*n),如果A非奇异,则存在正交矩阵Q和上三角矩阵R,使得A满足关系式A
=QR,并且当R的对角元都为正时,QR分解是唯一的
[Q,R]=qr(A):产生一个与A维数相同的上三角矩阵R和一个正交矩阵Q,使得满足A=QR [Q,R,E]=qr(A):产生一个交换矩阵E、一个上三角矩阵R和正交阵Q,这三者满足AE=QR[Q,R]=qr(A,0):对矩阵A进行有选择的QR分解,当矩阵A为m*n且m>n,那么只会产生具有前n列的正交矩阵Q
R=qr(A):只产生矩阵R,并且满足R=chol(A’*A)
A=[173 4;3112;4 128]
[QR]=qr(A)
[QRE]=qr(A)
[Q R]=qr(A,0)
R=qr(A)
[Q,R]=qrdelete(A,j):去除第j列求QR分解
[Q,R]=qrdelete(A,j,x):在第j列插入x后求QR分解
(3)、特征值分解(eig)
[V,D]=eig(X):V是以矩阵X的特征向量作为列向量构成的矩阵,D是矩阵X的特征值构成的对角阵,满足XV=VD
[V,D]=eig(A,B):对矩阵A、B做广义特征值分解,使得AV=BVD
A=magic(4)
[V D]=eig(A)
Z=A*V-V*D
B=[173 4 2;3 112 6;4 12 87;1 2 34]
[V D]=eig(A,B)
Z=A*V-B*V*D
(4)、Chollesky分解(chol)
当矩阵A(n*n)对称正定时,则存在唯一的对角元素为正的上三角矩阵R,使得A=R’*R,当限定R的对角元素为正的时候,该分解是唯一的
当矩阵A为非正定阵时,会提示出错
A=[4 -1 1;-1 4.25 2.75;1 2.75 3.5]
R=chol(A)
R'*R?%=A
A=[0 4 0;3 01;0 1 3]
R=chol(A)?%报错,A为非正定阵
(5)奇异值分解(svd)
[U,S,V]=svd(X):与矩阵X维数相同的对角阵S、正交矩阵U和正交矩阵V,使得满足X=USV’[U,S,V]=svd(X,0):X为M*N矩阵,当M>N时,生成的矩阵U只有前N列元素被计算出来,并且S为N*N矩阵
X=[123;456;7 8 9]
[USV]=svd(X)
X=[123;456;7 8 9;10 11 12]
[US V]=svd(X)
X=[1 2 3;4 5 6;7 89;10 11 12ckl
[U S V]=svd(X,0)
Schur分解(正交阵和schur阵)
[U,T]=schur(A):A=UTU’
schur阵是主对角线元素为特征值的三角阵
5、矩阵的一些特殊处理
size(A):求矩阵A的行数、列数
diag(A):求出矩阵A的对角元素
repmat(A):将矩阵A作为单位,赋值成m*n矩阵,其中每个元素都是A矩阵
cat(k,A,B):k=1合并后形如[A;B](A,B列数相等);k=1合并后形如[A,B](A,B行数相等)
(1)、矩阵的变维
reshape(X,M,N):将矩阵X的所有元素分配到一个M*N的新矩阵,当矩阵X的元素不是M*N时,返回错误
reshape(X,M,N,P,…):返回由矩阵X的元素组成的M*N*P*…多维矩阵,若果M*N*P*…与X 的元素数不同时,将返回错误
reshape(X,[M,N,P,…]):与上一条相同
A=rand(4,2)
reshape(A,2,4)
reshape(A,[2,2,2])
用冒号变维:
A=[1 2 3 4;5678;9 10 11 12];
B=ones(2,6);
B(:)=A(:)
(2)、矩阵的变向
rot90(A):A按逆时针旋转90度
rot90(A,K):A按逆时针旋转90*K度
filpud(X):将X上下翻转
fliplr(X):将X左右翻转
flipdim(X,DIM):将X的第DIM维翻转
X=[14;25;3 6]
rot90(X)
rot90(X,-1)
flipud(X)
fliplr(X)
flipdim(X,2)??%左右翻转
6、特殊矩阵的生成
(1)、零矩阵和全1矩阵的生成
A=zeros(M,N):生成M*N的零矩阵
A=zeros(size(B)):生成与B同型的零矩阵
A=zeros(N):生成N阶零矩阵仿真
全1矩阵的生成与零矩阵的生成类似,使用ones函数
A=zeros(4,5)
B=[1 2 3 4 5;2 3 4 5 6;98 7 6 5;8 7654]
A=zeros(size(B))
A=zeros(5)
C=ones(5,6)
C=ones(3)
(2)、对角矩阵的生成
A=diag(V,K):V为某个向量,K为向量V偏离主对角线的列数,K=0表示V为主对角线,K>00表示V在主对角线以上,K<0表示V在主对角线以下
A=diag(V):相当于K=0
v=[1 9 81 6]
diag(v,1)
diag(v)
(3)、随机矩阵的生成
rand(N):生成N*N的随机矩阵,元素值在(0.0,1.0)之间
rand(M,N)
randn(N):生成N*N的随机矩阵,元素之服从正态分布N(0,1)
randn(M,N)
rand(5)
randn(5)
(4)、范德蒙德矩阵的生成
A=vander(V):有A(I,j)=v(i)n-j
v=[1 3 579]
A=vander(v)
(5)、魔术矩阵的生成
它是一个方阵,方阵的每一行,每一列以及每条主对角线的元素之和都相同(2阶方阵除外) magic(N):生成N阶魔术矩阵,使得矩阵的每一行,每一列以及每条主对角线元素和相等,N>0(N=2除外)
magic(2)
magic(3)
magic(4)
(6)、Hilbert矩阵和反Hilbert矩阵的生成
Hilbert矩阵的第i行、第j列的元素值为1/(i+j-1),反Hilbert矩阵是Hilbert矩阵的逆矩阵
hilb(N):生成N阶的Hilbert矩阵
invhilb(N):生成N阶的反Hilbert矩阵
A=hilb(5)
B=invhilb(5)
C=A*B
randpem(n):随机排列
hess(A):hess矩阵
pascal(n):Pascal矩阵
hankel(c):Hankel矩阵
wilkinson(n):wilkinson特征值测试矩阵
blkdiag(a,b,c,d):产生以输入元素为对角线元素的矩阵
注:diag函数的输入参数只能有一个(可以为向量)
compan(u):友矩阵
hadamard(n):hadamard矩阵
toeplitz(c,r):托布列兹阵
数组及其运算
1、数组寻址和排序
(1)、数组的寻址
A=randn(1,10)
A(4)??%访问A的第4个元素
A(2:6)??%访问A的第2到6个元素
A(6:-2:1)
A([1 374]) %访问A中1、3、7和4号元素
A(4:end)??%end参数表示数组的结尾
(2)、数组的排序
sort(X):将数组X中的元素按升序排序
X是多维数组时,sort(X)命令将X中的各列元素按升序排序
X是复数时,sort(X)命令将X中的各个元素的模abs(X)按升序排序
X是一个字符型单元数组,sort(X)命令将X中的各列元素按ASCII码升序排序
Y=sort(X,DIM,MODE):DIM选择用于排列的维,MODE决定了排序的方式(’ascend’升序,’descend’降序),该命令生成的数组Y与X是同型的
X=[3 7 5;0 4 2]
sort(X,1) %纵向升序排序
sort(X,2)?%横向升序排序
sort(2)
2、数组的基本数值运算
(1)、加减法(与矩阵加减法相同)
X=[1 4 7]
Y=[2 5 8]
Z=X-Y
V=X+Y
(2)、数组的乘除法
乘法用“.*”:X、Y有相同维数,X.*Y表示X和Y中单个元素之间的对应乘积
除法用“./”:注意“./”和“.\”完全不同
X=[1052 96 1256]
Y=[2 263 4 8]
Z=[10529612 5642]
Z1=X.*Y
Z2=X.*Z?%报错,维数问题
Z3=X./Y %Z3=5,2,32,3,7
Z4=X.\Y??%Z4=0.2,0.5,0.0313,0.3333,0.1429
Z5=X.\Z??%报错,维数问题
(3)、数组的乘方
两个数组之间的乘方
X=[1 4 7]
Y=[2 58]
Z=X.^Y
乘方运算时指数为标量
X=[3 69]
Z=X.^3
乘方运算时底数为标量
X=[456 7 89]
Z=3.^X
数组和矩阵也可以进行exp、log、sqrt等运算,是对每个对应元素进行运算
3、数组的关系运算
小于(<),小于等于(<=),大于(>),大于等于(>=),等于(==),不等于(~=),结果为1,则关系式为真,结果为0,则关系式为假
%rem(X,n),求余函数,X为被除数,n为除数
M=magic(7)
N=(rem(M,3))
N=(rem(M,3)<=1)
N=(rem(M,3)==1)
N=(rem(M,3)>=1)
4、数组的逻辑运算
与(&),或(|),非(~),其中与、或可以比较两个标量或者两个同阶数组(或矩阵),非运算时针对数组(或矩阵中的每一个元素),当逻辑为真则返回1,当逻辑为假则返回0
M=[1 1 0;0 1 0;1 0 0]
N=[1 0 1;1 1 1;0 0 0]
M|N
M&N
~N
cat:串接
flipdim
fliplr
flipud
kron:积数组
permute:重组
repmat
reshape
rot90
稀疏型矩阵
1、稀疏矩阵的生成
(1)、speye函数:生成单位稀疏矩阵
speye(size(A))
speye(M,N):维数为M和N中较小的一个
speye(N)
A=eye(10)
speye(size(A))