matlab软件的矩阵和数组操作解析

矩阵和数组操作

Matlab中文含义就是矩阵实验室的意思,轻松灵活的处理矩阵式Matlab语言的特色。

概念:

数组:与其它编程语言一样,定义是:相同数据类型元素的集合。

矩阵:数学中早已定义。不再赘述,matlab中处理最多的是二维矩阵

矩阵的创建:

1直接输入

              在命令行窗口中定义  A=[1,2,3;4,5,6;7,8,9]  分好是换行,逗号是本行  回车后如下图:

2函数法生成特殊的矩阵

(1)零矩阵:zeros(n) :生成n*n的零矩阵

zeros(n,m): 生成n*m的零矩阵

如下图:

(2)单位矩阵:eye(n): 生成n*n的单位矩阵(对角线元素为1 其余元素为0)

eye(n,m):  生成n*m的单位阵

如下图:

(3)魔方矩阵(行、列、对角线元素和相同):magic()用法和以上函数一样

(4)对角矩阵(对角线上的矩阵非0):dig(1:5)  :生成对角线元素为1,2,3,4,5 的5*5矩阵  如下图:

(5)上三角矩阵(对角线以下的元素为0): triu()

(6)下三角元素(对角线元素以上为0):  tril()

代码:

>> a=[1,2,3;4,5,6;7,8,9]

 

a =

 

     1     2     3

     4     5     6

     7     8     9

 

>> a=zeros(3,2)

 

a =

 

     0     0

     0     0

     0     0

 

>> a=eye(4)

 

a =

 

     1     0     0     0

     0     1     0     0

     0     0     1     0

     0     0     0     1

 

>> a=magic(3)

 

a =

 

     8     1     6

     3     5     7

     4     9     2

 

>> a=diag([1:5])

 

a =

 

     1     0     0     0     0

     0     2     0     0     0

     0     0     3     0     0

     0     0     0     4     0

     0     0     0     0     5

 

>> b=magic(3)

a=triu(b)

 

b =

 

     8     1     6

     3     5     7

     4     9     2

 

 

a =

 

     8     1     6

     0     5     7

     0     0     2

 

>> b=magic(3)

a=tril(b)

 

b =

 

     8     1     6

     3     5     7

     4     9     2

 

 

a =

 

     8     0     0

     3     5     0

     4     9     2

3 矩阵的基本操作

       显示矩阵:直接在命令中输入矩阵名称回车即可,或者使用函数disp(矩阵名字) 也可以

       矩阵判空:isempty(A)  为空返回1  不空返回0

 isequal(A ,B)  判断矩阵A和矩阵B是否相等(矩阵相等当且仅当矩阵行列一样,并且对应元素都相等)

size(A)   获取矩阵行数和列数

length(A)   获取矩阵的长度(行数和列数中的最大值)

numel(A)    获取A矩阵中元素个数之和

ndims(A)     获取A矩阵的维度(注意是维度不是列数)

代码:

>> a=magic(4);

>> a=magic(4);

dsip(a)

未定义与 'double' 类型的输入参数相对应的函数 'dsip'。

 

是不是想输入:

>> a=magic(4);

disp(a)

    16     2     3    13

     5    11    10     8

     9     7     6    12

     4    14    15     1

 

>> b=magic(4);

disp(isequal(A,B))

未定义函数或变量 'A'。

 

是不是想输入:

>> b=magic(4);

disp(isequal(a,b))

     1

 

>> [m,n]=size(a)

 

m =

 

     4

 

 

n =

 

     4

 

>> disp(length(a))

     4

 

>> numel(a)

 

ans =

 

    16

 

>> ndims(a)

 

ans =

 

     2

 

 

4 访问矩阵元素

圆括号访问:A(3,4)   访问矩阵第三行第四列的元素

       A(3)  访问矩阵中按列排列的第3个元素(按列排列也成线性编码,就是第一列排完,再排第二列。。。。依次)

注意:访问矩阵元素在matlab中使用的是圆括号。而在其他高级编程语言中却使用的是方括号[] ,在matlab中方括号[]用到矩阵或者数组定义的使用。

冒号运算符:

       冒号运算符很强大,使用频率也很高。A(:,1)  访问矩阵A第一列的所有元素。    A(1,:)  访问矩阵A的第一行的所有元素  

A(:,n)  访问矩阵A的第n列元素  

A(:,:)  访问矩阵A的所有元素

diag(A)  访问矩阵A的对角线元素

diag(A,k)  访问矩阵A的第K条对角线元素(主对角线为第0条)、

end   A(1,2:end)   访问矩阵A的第一行的第二列到最后一列的元素

A(end,end)   访问矩阵A的最后一个元素

 

find()  查找矩阵中满足一定条件的元素

index=find(A)    查找矩阵A中非零的元素,并返回矩阵中非零元素的线性索引(按列排列)

[m,n]=find(A==1)    查找矩阵A中等于1的元素的行列下标   行给m  列给n

[m,n]=find(A==1,k)   查找矩阵A等于1的元素的行列下标,返回前K个满足要求的元素的下标

 

连接矩阵:

[A,B]   水平方向上连接两个矩阵

[A;B]    A在上,B在下,垂直方向上连接矩阵

 

矩阵求逆: A’  即是矩阵A的逆矩阵

改变矩阵大小(假若A是3*3的矩阵):A(:,4)=1   向矩阵A中添加第四列元素,并赋值为1 ,A变成3*4的矩阵。

A(4,1)=1  :第四行第一列为1,剩余的矩阵A的第四行元素为0

   矩阵大小重排:reshape(A ,m,n)  用于重新排列矩阵A,返回大小m*n的矩阵,前提是A的行列乘积=m*n

repmat() 复制矩阵函数 B=repmat(A,m,n)  将A当做一个整体单元,复制成大小为m*n的矩阵

B=unique(A)    去除矩阵A中重复的元素,将不重复的元素从小到大排列传给B,B以向量形式接受

代码:

>> a=magic(5)

 

a =

 

    17    24     1     8    15

    23     5     7    14    16

     4     6    13    20    22

    10    12    19    21     3

    11    18    25     2     9

 

>> a(1,2)

 

ans =

 

    24

 

>> a(:,1)

 

ans =

 

    17

    23

     4

    10

    11

 

>> diag(a)

 

ans =

 

    17

     5

    13

    21

     9

 

>> diag(a)

 

ans =

 

    17

     5

    13

    21

     9

 

>> diag(a,1)

 

ans =

 

    24

     7

    20

     3

 

>> a(1,end)

 

ans =

 

    15

 

>> a(:,end)

 

ans =

 

    15

    16

    22

     3

     9

 

>> a(2,2:end)

 

ans =

 

     5     7    14    16

 

>> a(end,end)

 

ans =

 

     9

 

>> index=find(a)

 

index =

 

     1

     2

     3

     4

     5

     6

     7

     8

     9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

 

>> find(a>10)

 

ans =

 

     1

     2

     5

     6

     9

    10

    13

    14

    15

    17

    18

    19

    21

    22

    23

 

>> [m,n]=find(a==1)

 

m =

 

     1

 

 

n =

 

     3

 

>> a=[1,2,3;4,5,6]

 

a =

 

     1     2     3

     4     5     6

 

>> b=[7,8,9;1,2,3]

 

b =

 

     7     8     9

     1     2     3

 

>> [a,b]

 

ans =

 

     1     2     3     7     8     9

     4     5     6     1     2     3

 

>> [a;b]

 

ans =

 

     1     2     3

     4     5     6

     7     8     9

     1     2     3

 

>> a=magic(3)

 

a =

 

     8     1     6

     3     5     7

     4     9     2

 

>> a'

 

ans =

 

     8     3     4

     1     5     9

     6     7     2

 

>> a(4,1)=2

 

a =

 

     8     1     6

     3     5     7

     4     9     2

     2     0     0

 

>> a(:,4)=1

 

a =

 

     8     1     6     1

     3     5     7     1

     4     9     2     1

     2     0     0     1

 

>> a=[1:12]

 

a =

 

     1     2     3     4     5     6     7     8     9    10    11    12

 

>> reshape(a,3,4)

 

ans =

 

     1     4     7    10

     2     5     8    11

     3     6     9    12

 

>> a=[1,2;3,4]

 

a =

 

     1     2

     3     4

 

>> repmat(a,2,2)

 

ans =

 

     1     2     1     2

     3     4     3     4

     1     2     1     2

     3     4     3     4

 

>> a=repmat(a,2,2)

 

a =

 

     1     2     1     2

     3     4     3     4

     1     2     1     2

     3     4     3     4

 

>> a=unique(a)

 

a =

 

     1

     2

     3

     4

 

 

 

矩阵加减乘除乘方运算

A+B  矩阵加(要求A,B有相同的行列数)

A-B   矩阵减(要求A,B有相同的行列数)

A+1(标量)  矩阵加标量 等价于矩阵的每一个元素都加上标量

A*B    矩阵的乘法  前提是矩阵A的列数等于矩阵B的行数
A.*B    A点乘B   A矩阵的元素乘上B矩阵对应位置的元素(前提是矩阵行列数一样)

A*标量   矩阵A中的每一个元素都乘以标量

A/B    右除 计算Bx=A

A\B    左除 计算Ax=B

(区分左除还是右除很简单,就是看除号往那边倒,哪边就是除数)同样左除和右除也在数值的计算中,如1/2   1\2

A^2  矩阵乘方运算,A*A

A.^2  矩阵的点乘方运算  矩阵A中每一个元素的平方

det(A)   求矩阵A的行列式

inv(A)   求矩阵A的逆

rank(A)    求矩阵A的秩

[v,d]=eig(A)   求矩阵A的特征值和特征向量,   V是矩阵,每一列对应一个特征向量,d是特征向量对应的特征值。

C=A>B  判断A中的元素是否大于B中的元素,返回一个大小一样的矩阵,在其对应的位置上赋值,1表示大于,0表示不大于。

C=A<B  原理和上述一样

C=find(A>k)  将矩阵A中大于k的元素按照线性编码传入C中。

 

 

 

 

数组和向量的一些运算和矩阵的运算基本一致,向量就是一个一维的数组,而数组运算无非就比矩阵运算多了个关系和逻辑运算。在matlab中我们使用最多的就是向量和矩阵

代码:

>> a=[1,2,3;4,5,6]

 

a =

 

     1     2     3

     4     5     6

 

>> b=[1,1,1;8,10,12]

 

b =

 

     1     1     1

     8    10    12

 

>> a+b

 

ans =

 

     2     3     4

    12    15    18

 

>> a-b

 

ans =

 

     0     1     2

    -4    -5    -6

 

>> a./b

 

ans =

 

    1.0000    2.0000    3.0000

    0.5000    0.5000    0.5000

 

>> a/b

 

ans =

 

   -3.0000    0.5000

   -0.0000    0.5000

 

>> a\b

 

ans =

 

    3.0000    4.0000    5.0000

         0         0         0

   -0.6667   -1.0000   -1.3333

 

>> a.\b

 

ans =

 

    1.0000    0.5000    0.3333

    2.0000    2.0000    2.0000

 

>> a^2

错误使用  ^

输入必须为标量和方阵。

要按元素进行 POWER 计算,请改用 POWER (.^)。

 

>> a=[1,2,3;4,5,6;7,8,9]

 

a =

 

     1     2     3

     4     5     6

     7     8     9

 

>> a^2

 

ans =

 

    30    36    42

    66    81    96

   102   126   150

 

>> a.^2

 

ans =

 

     1     4     9

    16    25    36

    49    64    81

 

>> det(a)

 

ans =

 

   6.6613e-16

 

>> a=ones(3)

 

a =

 

     1     1     1

     1     1     1

     1     1     1

 

>> det(a)

 

ans =

 

     0

 

>> inv(a)

警告: 矩阵为奇异工作精度。

 

ans =

 

   Inf   Inf   Inf

   Inf   Inf   Inf

   Inf   Inf   Inf

 

>> a=dig(3)

未定义与 'double' 类型的输入参数相对应的函数 'dig'。

 

是不是想输入:

>> a=diag(3)

 

a =

 

     3

 

>> a=eye(3)

 

a =

 

     1     0     0

     0     1     0

     0     0     1

 

>> det(a)

 

ans =

 

     1

 

>> inv(a)

 

ans =

 

     1     0     0

     0     1     0

     0     0     1

 

>> rank(a)

 

ans =

 

     3

 

>> [v,d]=eig(a)

 

v =

 

     1     0     0

     0     1     0

     0     0     1

 

 

d =

 

     1     0     0

     0     1     0

     0     0     1

 

>> a=[1,2,3;3,2,1;4,5,6]

 

a =

 

     1     2     3

     3     2     1

     4     5     6

 

>> b=magic(3)

 

b =

 

     8     1     6

     3     5     7

     4     9     2

 

>> c=a>b

 

c =

 

     0     1     0

     0     0     0

     0     0     1

 

>> a<b

 

ans =

 

     1     0     1

     0     1     1

     0     1     0

 

>> a==b

 

ans =

 

     0     0     0

     1     0     0

     1     0     0

 

>> a=[1,2,3;4,5,6]

 

a =

 

     1     2     3

     4     5     6

 

>> find(a)

 

ans =

 

     1

     2

     3

     4

     5

     6

 

>> v=find(a)

 

v =

 

     1

     2

     3

     4

     5

     6

 

>> v=find(a)

 

v =

 

     1

     2

     3

     4

     5

     6

 

>> v=find(a>2)

 

v =

 

     2

     4

     5

     6

 

>> a=3

 

a =

 

     3

 

>> ~a

 

ans =

 

     0

 

>> 

 

 

 

 

                            

posted @ 2016-08-31 15:14  不矜不伐的小学生  阅读(2757)  评论(0编辑  收藏  举报