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/21\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 =

12 3

45 6

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

b =

11 1

810 12

>> a+b

ans =

23 4

1215 18

>> a-b

ans =

01 2

-4-5 -6

>> a./b

ans =

1.00002.0000 3.0000

0.50000.5000 0.5000

>> a/b

ans =

-3.00000.5000

-0.00000.5000

>> a\b

ans =

3.00004.0000 5.0000

0 0 0

-0.6667-1.0000 -1.3333

>> a.\b

ans =

1.00000.5000 0.3333

2.00002.0000 2.0000

>> a^2

错误使用 ^

输入必须为标量和方阵。

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

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

a =

12 3

45 6

78 9

>> a^2

ans =

3036 42

6681 96

102126 150

>> a.^2

ans =

14 9

1625 36

4964 81

>> det(a)

ans =

6.6613e-16

>> a=ones(3)

a =

11 1

11 1

11 1

>> det(a)

ans =

0

>> inv(a)

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

ans =

InfInf Inf

InfInf Inf

InfInf Inf

>> a=dig(3)

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

是不是想输入:

>> a=diag(3)

a =

3

>> a=eye(3)

a =

10 0

01 0

00 1

>> det(a)

ans =

1

>> inv(a)

ans =

10 0

01 0

00 1

>> rank(a)

ans =

3

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

v =

10 0

01 0

00 1

d =

10 0

01 0

00 1

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

a =

12 3

32 1

45 6

>>b=magic(3)

b =

81 6

35 7

49 2

>> c=a>b

c =

01 0

00 0

00 1

>> a<b

ans =

10 1

01 1

01 0

>> a==b

ans =

00 0

10 0

10 0

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

a =

12 3

45 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

>>

流过泪的眼睛更明亮,滴过血的心灵更坚强!

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

相关文章:

你感兴趣的文章:

标签云: