您的位置:首页 > 编程语言 > MATLAB

matlab基本知识点2

2016-03-24 11:24 489 查看
矩阵的乘方运算与开方运算

在matlab7.0中,可以使用A^p来计算A的p次方,使用sqrtm()来对矩阵开方运算,如果有X*X=A,则有sqrtm(A)=X;

矩阵的开方运算与乘方运算互为逆运算。

矩阵的指数运算用expm函数来实现,expm(X)=V*diag(exp(diag(D)))/V,其中X为已知矩阵,[V,D]=eig(X);对数运算用logm函数实现,L=logm(A),与矩阵的指数运算互为逆运算。

矩阵的逆运算

矩阵的逆运算充分必要条件为其行列式不为0,使用inv函数

>> A=[1 0 0 0;1 2 0 0;2 1 3 0;1 2 1 4]

A =

1     0     0     0
1     2     0     0
2     1     3     0
1     2     1     4

>> B = inv(A)

B =

1.0000         0         0         0
-0.5000    0.5000         0         0
-0.5000   -0.1667    0.3333         0
0.1250   -0.2083   -0.0833    0.2500


计算矩阵的行列式函数,det()函数

使用eig或eigs可以进行矩阵的特征值计算。

E = eig(X),命令生成由矩阵X的特征值所组成的列向量

[V,D]=eig(X)命令生成两个矩阵X和D,其中V 是以矩阵X的特征向量作为列向量组成的矩阵,D是由X的特征值作为主对角线元素构成的对角矩阵。

norm函数

norm(X)计算矩阵X的2-范数

norm(X,2)计算矩阵的2-范数

norm(X,1)计算矩阵的1-范数

norm(X,inf)计算矩阵的无穷范数

norm(X,'fro')计算矩阵X的Frobenius范数

normest只能计算矩阵的2-范数,并且为估计值,使用于计算norm(X)比较费时的情况。

矩阵的条件数计算:(衡量矩阵是“病态”,还是“良态”)

cond(X)返回关于矩阵X的2-范数的条件数

cond(X,P)返回关于矩阵X的P-范数的条件数

recond(X)用来计算矩阵X条件数的倒数值

condest(X)用于计算X的的1-范数的条件数的估计值

矩阵X的条件数越大,表明A越“病态”,反之,越“良态”。

矩阵的秩

函数rank();

>> T = rand(6)

T =

0.8147    0.2785    0.9572    0.7922    0.6787    0.7060
0.9058    0.5469    0.4854    0.9595    0.7577    0.0318
0.1270    0.9575    0.8003    0.6557    0.7431    0.2769
0.9134    0.9649    0.1419    0.0357    0.3922    0.0462
0.6324    0.1576    0.4218    0.8491    0.6555    0.0971
0.0975    0.9706    0.9157    0.9340    0.1712    0.8235

>> r = rank(T)

r =

6
矩阵的迹(矩阵主对角线所有元素的和)

trace()函数求得

三角分解

lu函数实现

[L,U] = lu(X),将矩阵X分解成一个上三角矩阵L和一个下三角矩阵U,使用X=L*U

正交分解

qr函数实现

[Q,R] = qr(A),产生一个与A维数相同的上三角矩阵R和一个正交矩阵Q,使得A = Q*R

特征值分解

eig()函数实现

[V,D] = eig(X)命令生成一个矩阵V和D,其中V是由矩阵X的特征向量作为列向量组成的矩阵,D由矩阵X的特征值作为主对角线元素构成的对角矩阵。

矩阵的变维

使用reshape函数来对矩阵进行变维操作

reshape(X,M,N)将矩阵X的所有元素分配到一个MxN的矩阵中,当矩阵X的元素不是MxN时,将返回一个错误。

reshape(X,M,N,P...)将矩阵X的所有元素分配到MxNxP的多维矩阵上去。

>> A = rand(4,2)

A =

0.6948    0.4387
0.3171    0.3816
0.9502    0.7655
0.0344    0.7952

>> reshape(A,2,4)

ans =

0.6948    0.9502    0.4387    0.7655
0.3171    0.0344    0.3816    0.7952


矩阵的变向包括对矩阵进行旋转,上下翻转,左右翻转,以及对指定的维进行翻转,分别由rot90,flipud,fliplr,和flipdim函数来实现。

例子省略

特殊矩阵生成函数:

zeros(),ones(),diag(V,k)V表示向量,k表示V向量偏离主对角线的个数,k>0往上偏离,k<0往下偏离,k=0就在主对角线。

rand()随机矩阵(生成的矩阵元素在0-1之间)

randn()生成的矩阵服从正态分布N(0,1)

范德蒙矩阵A=vander(v)

>> v=[1 3 5 7 9];
>> A = vander(v)

A =

1           1           1           1           1
81          27           9           3           1
625         125          25           5           1
2401         343          49           7           1
6561         729          81           9           1


magic()魔术矩阵,生成的矩阵每一行,每一列以及每条主对角线的元素和都相等。(二阶矩阵除外)

Hilbert矩阵,病态矩阵

hilb()

数组寻址和排序

>> A = randn(1,10)

A =

-0.8649   -0.0301   -0.1649    0.6277    1.0933    1.1093   -0.8637    0.0774   -1.2141   -1.1135

>> A(4)

ans =

0.6277

>> A(2:6)

ans =

-0.0301   -0.1649    0.6277    1.0933    1.1093

>> A([1 3 7 4])

ans =

-0.8649   -0.1649   -0.8637    0.6277

>> A(4:end)

ans =

0.6277    1.0933    1.1093   -0.8637    0.0774   -1.2141   -1.1135


数组排序

sort(A)若A为矩阵,默认对A各列进行升序排序

sort(A,dim)

如果dim=1

sort(A,1)等同于sort(A)

如果dim=2

将矩阵A的各行进行升序排序

数组的基本数值运算

数组运算符由矩阵运算符前面增加 " . "来表示

加减运算

>> X=[1,4,7]

X =

1     4     7

>> Y = [2,5,8]

Y =

2     5     8

>> X-Y

ans =

-1    -1    -1

>> X+Y

ans =

3     9    15


数组的 乘除运算

>> X=[10 52 96 12 56]

X =

10    52    96    12    56

>> Y = [2 26 3 4 8]

Y =

2    26     3     4     8

>> Z = [10 52 96 12 56 42]

Z =

10    52    96    12    56    42

>> Z1 = X.*Y

Z1 =

20        1352         288          48         448

>> Z2 = X.*Z
??? Error using ==> times
Matrix dimensions must agree.

>> Z3 = X./Y

Z3 =

5     2    32     3     7

>> Z4 = X.\Y

Z4 =

0.2000    0.5000    0.0313    0.3333    0.1429


数组的乘方.^

>> X = [3 6 9]

X =

3     6     9

>> Z = X.^3

Z =

27   216   729


1个数组为指数,底数为标量的情况

>> X = [4,5,6,7,8]

X =

4     5     6     7     8

>> Z = 3.^X

Z =

81         243         729        2187        6561


rem(X,n)为求余函数,X为被除数,n为除数

逻辑运算符:

&与 |或 ~非

稀疏矩阵的生成

speye函数

>> A = eye(10)

A =

1     0     0     0     0     0     0     0     0     0
0     1     0     0     0     0     0     0     0     0
0     0     1     0     0     0     0     0     0     0
0     0     0     1     0     0     0     0     0     0
0     0     0     0     1     0     0     0     0     0
0     0     0     0     0     1     0     0     0     0
0     0     0     0     0     0     1     0     0     0
0     0     0     0     0     0     0     1     0     0
0     0     0     0     0     0     0     0     1     0
0     0     0     0     0     0     0     0     0     1

>> speye(A)
??? Error using ==> speye
Please use SPEYE(N), SPEYE(M,N) or SPEYE([M,N]).

>> speye(size(A))

ans =

(1,1)        1
(2,2)        1
(3,3)        1
(4,4)        1
(5,5)        1
(6,6)        1
(7,7)        1
(8,8)        1
(9,9)        1
(10,10)       1

>> speye(2)

ans =

(1,1)        1
(2,2)        1

>> speye(7,6)

ans =

(1,1)        1
(2,2)        1
(3,3)        1
(4,4)        1
(5,5)        1
(6,6)        1


sprand函数用于生成随机稀疏矩阵函数(其元素服从0-1分布)

将稀疏矩阵与满矩阵进行相互转换的函数有sparse,full,和find函数。

sparse函数将满矩阵变为稀疏矩阵

full函数将稀疏矩阵变为满矩阵

find函数查找矩阵的非0函数位置

对稀疏矩阵的操作

nz = nnz(S)返回矩阵S中非零元素的个数

D = nnz(S)/prod(size(S))表示稀疏矩阵S中非零元素的密度

(S)生成一个与稀疏矩阵S结构相同的稀疏矩阵R,但是在矩阵S中的非零元素的位置上用元素1代替

R = spones

>> S = sprandsym(10,0.05)

S =

(9,3)      -1.4057
(10,3)      -0.7423
(3,9)      -1.4057
(3,10)     -0.7423

>> R = spones(S)

R =

(9,3)        1
(10,3)        1
(3,9)        1
(3,10)       1


spalloc用来为稀疏矩阵分配空间

issparse用来判断矩阵是否为稀疏矩阵

矩阵的乘方运算与开方运算

在matlab7.0中,可以使用A^p来计算A的p次方,使用sqrtm()来对矩阵开方运算,如果有X*X=A,则有sqrtm(A)=X;

矩阵的开方运算与乘方运算互为逆运算。

矩阵的指数运算用expm函数来实现,expm(X)=V*diag(exp(diag(D)))/V,其中X为已知矩阵,[V,D]=eig(X);对数运算用logm函数实现,L=logm(A),与矩阵的指数运算互为逆运算。

矩阵的逆运算

矩阵的逆运算充分必要条件为其行列式不为0,使用inv函数

>> A=[1 0 0 0;1 2 0 0;2 1 3 0;1 2 1 4]

A =

1     0     0     0
1     2     0     0
2     1     3     0
1     2     1     4

>> B = inv(A)

B =

1.0000         0         0         0
-0.5000    0.5000         0         0
-0.5000   -0.1667    0.3333         0
0.1250   -0.2083   -0.0833    0.2500


计算矩阵的行列式函数,det()函数

使用eig或eigs可以进行矩阵的特征值计算。

E = eig(X),命令生成由矩阵X的特征值所组成的列向量

[V,D]=eig(X)命令生成两个矩阵X和D,其中V 是以矩阵X的特征向量作为列向量组成的矩阵,D是由X的特征值作为主对角线元素构成的对角矩阵。

norm函数

norm(X)计算矩阵X的2-范数

norm(X,2)计算矩阵的2-范数

norm(X,1)计算矩阵的1-范数

norm(X,inf)计算矩阵的无穷范数

norm(X,'fro')计算矩阵X的Frobenius范数

normest只能计算矩阵的2-范数,并且为估计值,使用于计算norm(X)比较费时的情况。

矩阵的条件数计算:(衡量矩阵是“病态”,还是“良态”)

cond(X)返回关于矩阵X的2-范数的条件数

cond(X,P)返回关于矩阵X的P-范数的条件数

recond(X)用来计算矩阵X条件数的倒数值

condest(X)用于计算X的的1-范数的条件数的估计值

矩阵X的条件数越大,表明A越“病态”,反之,越“良态”。

矩阵的秩

函数rank();

>> T = rand(6)

T =

0.8147    0.2785    0.9572    0.7922    0.6787    0.7060
0.9058    0.5469    0.4854    0.9595    0.7577    0.0318
0.1270    0.9575    0.8003    0.6557    0.7431    0.2769
0.9134    0.9649    0.1419    0.0357    0.3922    0.0462
0.6324    0.1576    0.4218    0.8491    0.6555    0.0971
0.0975    0.9706    0.9157    0.9340    0.1712    0.8235

>> r = rank(T)

r =

6
矩阵的迹(矩阵主对角线所有元素的和)

trace()函数求得

三角分解

lu函数实现

[L,U] = lu(X),将矩阵X分解成一个上三角矩阵L和一个下三角矩阵U,使用X=L*U

正交分解

qr函数实现

[Q,R] = qr(A),产生一个与A维数相同的上三角矩阵R和一个正交矩阵Q,使得A = Q*R

特征值分解

eig()函数实现

[V,D] = eig(X)命令生成一个矩阵V和D,其中V是由矩阵X的特征向量作为列向量组成的矩阵,D由矩阵X的特征值作为主对角线元素构成的对角矩阵。

矩阵的变维

使用reshape函数来对矩阵进行变维操作

reshape(X,M,N)将矩阵X的所有元素分配到一个MxN的矩阵中,当矩阵X的元素不是MxN时,将返回一个错误。

reshape(X,M,N,P...)将矩阵X的所有元素分配到MxNxP的多维矩阵上去。

>> A = rand(4,2)

A =

0.6948    0.4387
0.3171    0.3816
0.9502    0.7655
0.0344    0.7952

>> reshape(A,2,4)

ans =

0.6948    0.9502    0.4387    0.7655
0.3171    0.0344    0.3816    0.7952


矩阵的变向包括对矩阵进行旋转,上下翻转,左右翻转,以及对指定的维进行翻转,分别由rot90,flipud,fliplr,和flipdim函数来实现。

例子省略

特殊矩阵生成函数:

zeros(),ones(),diag(V,k)V表示向量,k表示V向量偏离主对角线的个数,k>0往上偏离,k<0往下偏离,k=0就在主对角线。

rand()随机矩阵(生成的矩阵元素在0-1之间)

randn()生成的矩阵服从正态分布N(0,1)

范德蒙矩阵A=vander(v)

>> v=[1 3 5 7 9];
>> A = vander(v)

A =

1           1           1           1           1
81          27           9           3           1
625         125          25           5           1
2401         343          49           7           1
6561         729          81           9           1


magic()魔术矩阵,生成的矩阵每一行,每一列以及每条主对角线的元素和都相等。(二阶矩阵除外)

Hilbert矩阵,病态矩阵

hilb()

数组寻址和排序

>> A = randn(1,10)

A =

-0.8649   -0.0301   -0.1649    0.6277    1.0933    1.1093   -0.8637    0.0774   -1.2141   -1.1135

>> A(4)

ans =

0.6277

>> A(2:6)

ans =

-0.0301   -0.1649    0.6277    1.0933    1.1093

>> A([1 3 7 4])

ans =

-0.8649   -0.1649   -0.8637    0.6277

>> A(4:end)

ans =

0.6277    1.0933    1.1093   -0.8637    0.0774   -1.2141   -1.1135


数组排序

sort(A)若A为矩阵,默认对A各列进行升序排序

sort(A,dim)

如果dim=1

sort(A,1)等同于sort(A)

如果dim=2

将矩阵A的各行进行升序排序

数组的基本数值运算

数组运算符由矩阵运算符前面增加 " . "来表示

加减运算

>> X=[1,4,7]

X =

1     4     7

>> Y = [2,5,8]

Y =

2     5     8

>> X-Y

ans =

-1    -1    -1

>> X+Y

ans =

3     9    15


数组的 乘除运算

>> X=[10 52 96 12 56]

X =

10    52    96    12    56

>> Y = [2 26 3 4 8]

Y =

2    26     3     4     8

>> Z = [10 52 96 12 56 42]

Z =

10    52    96    12    56    42

>> Z1 = X.*Y

Z1 =

20        1352         288          48         448

>> Z2 = X.*Z
??? Error using ==> times
Matrix dimensions must agree.

>> Z3 = X./Y

Z3 =

5     2    32     3     7

>> Z4 = X.\Y

Z4 =

0.2000    0.5000    0.0313    0.3333    0.1429


数组的乘方.^

>> X = [3 6 9]

X =

3     6     9

>> Z = X.^3

Z =

27   216   729


1个数组为指数,底数为标量的情况

>> X = [4,5,6,7,8]

X =

4     5     6     7     8

>> Z = 3.^X

Z =

81         243         729        2187        6561


rem(X,n)为求余函数,X为被除数,n为除数

逻辑运算符:

&与 |或 ~非

稀疏矩阵的生成

speye函数

>> A = eye(10)

A =

1     0     0     0     0     0     0     0     0     0
0     1     0     0     0     0     0     0     0     0
0     0     1     0     0     0     0     0     0     0
0     0     0     1     0     0     0     0     0     0
0     0     0     0     1     0     0     0     0     0
0     0     0     0     0     1     0     0     0     0
0     0     0     0     0     0     1     0     0     0
0     0     0     0     0     0     0     1     0     0
0     0     0     0     0     0     0     0     1     0
0     0     0     0     0     0     0     0     0     1

>> speye(A)
??? Error using ==> speye
Please use SPEYE(N), SPEYE(M,N) or SPEYE([M,N]).

>> speye(size(A))

ans =

(1,1)        1
(2,2)        1
(3,3)        1
(4,4)        1
(5,5)        1
(6,6)        1
(7,7)        1
(8,8)        1
(9,9)        1
(10,10)       1

>> speye(2)

ans =

(1,1)        1
(2,2)        1

>> speye(7,6)

ans =

(1,1)        1
(2,2)        1
(3,3)        1
(4,4)        1
(5,5)        1
(6,6)        1


sprand函数用于生成随机稀疏矩阵函数(其元素服从0-1分布)

将稀疏矩阵与满矩阵进行相互转换的函数有sparse,full,和find函数。

sparse函数将满矩阵变为稀疏矩阵

full函数将稀疏矩阵变为满矩阵

find函数查找矩阵的非0函数位置

对稀疏矩阵的操作

nz = nnz(S)返回矩阵S中非零元素的个数

D = nnz(S)/prod(size(S))表示稀疏矩阵S中非零元素的密度

(S)生成一个与稀疏矩阵S结构相同的稀疏矩阵R,但是在矩阵S中的非零元素的位置上用元素1代替

R = spones

>> S = sprandsym(10,0.05)

S =

(9,3)      -1.4057
(10,3)      -0.7423
(3,9)      -1.4057
(3,10)     -0.7423

>> R = spones(S)

R =

(9,3)        1
(10,3)        1
(3,9)        1
(3,10)       1


spalloc用来为稀疏矩阵分配空间

issparse用来判断矩阵是否为稀疏矩阵
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: