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

Matlab软件的矩阵和数组操作

2016-08-31 15:11 260 查看
矩阵和数组操作
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);

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))

     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

 

>> 

 

 

 以下是代码操作:

eye(5)   %生成一个5*5的单位矩阵(除主对角线上元素是1外,其余全是0)
zer0(5)  %生成一个5*5的全零矩阵
ones(5)  %生成一个5*5的全1矩阵
a=[1,2,3;4,5,6;7,8,9];
a(3,2)    %圆括号访问矩阵
a(:,2)     %访问矩阵a的第二列全部元素
mean(a)   %按列求每一列的均值,返回一个行向量,若a是一个向量,则返回一个数,即均值
mean(a,2)  %按行求每一行的均值,即返回一个列向量  注意:matlab函数中默认的对矩阵操作都是以列的,参数为2的是以行的。例如求最大值,最小值,排序函数等
tril(a)   %抽取下三角形
triu(a)    %抽取上三角形

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

a=zeros(3,2)

a=eye(4)

a=magic(3)

a=diag([1:5])

b=magic(3)
a=triu(b)

b=magic(3)
a=tril(b)

a=magic(4);
disp(a)

b=magic(4);
disp(isequal(a,b))

[m,n]=size(a)

disp(length(a))

numel(a)

ndims(a)

% 访问元素
a=magic(5)
a(1,2)
a(:,1)
diag(a)
diag(a,1)
a(1,end)
a(:,end)
a(2,2:end)
a(end,end)

index=find(a)

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

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

a=magic(3)
a'
a(4,1)=2
a(:,4)=1

a=[1:12]
reshape(a,3,4)

a=[1,2;3,4]
a=repmat(a,2,2)
a=unique(a)

a=[1,2,3;4,5,6]
b=[1,1,1;8,10,12]
a+b
a-b
a./b
a/b
a\b
a.\b

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

a=eye(3)
det(a)
inv(a)
rank(a)
[v,d]=eig(a)

a=[1,2,3;3,2,1;4,5,6]
b=magic(3)
c=a>b
a<b
a==b

a=[1,2,3;4,5,6]
v=find(a>2)

a=3


 

                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息