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

Matlab矩阵和数组

2013-10-26 16:36 218 查看
1. 数组和矩阵

数组:用空格或者逗号间隔数组元素,用方括号括起来

构造数组的方法:增量法和linspace函数法

增量法:>> b=10:2:15

b =

10 12 14

>> a=10:15

a =

10 11 12 13 14 15

>> b=3.3:5.5

b =

3.3000 4.3000 5.3000

>> 9:-1:1

ans =

9 8 7 6 5 4 3 2 1

Linspace:x=linspace(first,last,num) first,last首位元素,num是个数(输出几个数)

>> x=linspace(1,9,9)

x =

1 2 3 4 5 6 7 8 9

>> x=linspace(1,9,2)

x =

1 9

矩阵:Matlab中,二维数组称为矩阵。

创建矩阵最简单的方法是用[ ] ,在方括号内输入多个元素可以创建矩阵的一个行,并用逗号或者空格把每个元素间隔开:

>> row=[1 3 5 7 9]

row =

1 3 5 7 9

>> row=[1,3,5,7,9]

row =

1 3 5 7 9

如果想开始一个新行,则用分号终止当前行:

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

A =

1 2 3

4 5 6

7 8 9

构造特殊矩阵:

构造特殊矩阵用函数来实现:

特殊矩阵构造函数如下表所示:

函数

功能

ones

创建一个所有元素都为1的矩阵

zero

创建一个所有元素都为0的矩阵

eye

创建对角线元素为1,其他元素为0的矩阵

accumarray

将输入矩阵的元素分配到输出矩阵中的指定位置

diag

根据矢量创建对角矩阵

magic

创建一个方形矩阵,其中行、列和对角线上元素的和相等

rand

创建一个矩阵或者数组,其中的元素为服从均匀分部的随机数

randn

创建一个矩阵或数组,其中的元素为服从正态分布的随机数

randperm

创建一个矢量(1*n的矩阵)

A=zero(4,6,’uint32’)

A=magic(5)

A=rand(5)*20

A=[1 23 4 5 6 7 ];

B=diag(A,0) % A中的元素为对角线

3、聚合矩阵

聚合矩阵是通过连接一个或多个矩阵来形成新的矩阵。表达式 C=[A,B]在水平方向上聚合矩阵A和B,表达式C=[A;B]将在垂向上聚合他们。

A =

1 1 1 1 1

1 1 1 1 1

B =

0.9501 0.4860 0.4565 0.4447 0.9218

0.2311 0.8913 0.0185 0.6154 0.7382

0.6068 0.7621 0.8214 0.7919 0.1763

C=[A;B]

C =

1.0000 1.0000 1.0000 1.0000 1.0000

1.0000 1.0000 1.0000 1.0000 1.0000

0.9501 0.4860 0.4565 0.4447 0.9218

0.2311 0.8913 0.0185 0.6154 0.7382

0.6068 0.7621 0.8214 0.7919 0.1763

可以用聚合的方法创建矩阵甚至多维数组,但不能生成不规则的形状,只能是矩形。(此时要注意行数和列数是否匹配)

矩阵聚合函数

cat() 沿指定的维数聚合矩阵

horzcat()水平聚合矩阵

vercat() 垂向聚合矩阵

repmat() 通过复制和叠置矩阵来创建新矩阵

blkdiag() 用已有矩阵创建块对角矩阵

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

A =

8
1 6

3
5 7

4
9 2

>> B=repmat(A,2,4)

B =

8
1 6 8
1 6 8
1 6 8
1 6

3
5 7 3 5 7
3 5 7 3
5 7

4
9 2 4
9 2
4 9 2 4
9 2

8
1 6
8 1 6
8 1 6 8
1 6

3
5 7 3
5 7
3 5 7 3
5 7

4
9 2 4
9 2
4 9 2 4
9 2

>> A=magic(3);

>> B=[-5 -6 -9;-4 -4 -2];

>> C=eye(2)*8;

>> D=blkdiag(A,B,C)

>> D =

8
1 6 0 0 0 0 0

3
5 7 0 0 0 0 0

4
9 2 0 0 0 0 0

0 0 0
-5
-6 -9 0 0

0 0 0
-4
-4 -2 0 0

0 0 0 0 0 0
8 0

0 0 0 0 0 0
0 8

4、组合不同类型的数据

构造矩阵时,如果矩阵的数据类型不同,则MATLAB会自动对某些元素进行类型转换,然后生成的矩阵具有相同的类型。

用一个高精度的矩阵和一个低精度的矩阵构造新矩阵时,新矩阵是低精度的。例如,聚合double型和single型的矩阵。MATLAB会将double型元素转换为single型。

1)single型和double型矩阵聚合----------single型

2)integer型和double型矩阵聚合---------int8型

3)字符型和double型聚合----------------字符型

4)逻辑型和double型聚合--------------double型

例子:

>>x=[true false false pi sqrt(7)]

x =

1.0000 0 0 3.1416 2.6458

>>class(x)

ans =

double

5获取矩阵的元素

利用编号和索引,可以获取MATLAB矩阵的元素:

>> A=magic(4)

A =

16 2 3 13

5 11 10 8

9 7 6 12

4 14 15 1

>> A(4,2)

ans =

14

给出一个矩阵:

>> A=[2 6 9;4 2 8;3 0 1]

A =

2 6 9

4 2 8

3 0 1

在内存中是按下面的序列保存的:

2,4,3,6,2,0,9,8,1

矩阵A
的第3行第2列元素可以看做实际保存序列中的第6个元素,要获取这个元素,可以使用标准语法A(3,2)和A(6).在使用线性索引方式时,如果矩阵大小为[d1,d2]即d1行d2列,则位置(i,j)处的元素在保存序列中的位置为:

(j-1)d1+i

举例:

>>
A=[26 9;4 2 8;3 0 1];

>>linearindex=sub2ind(size(A),3,2)

linearindex =

6

>> [rowcol]=ind2sub(size(A),6)

row =

3

col =

2

冒号运算符

A =

2 6 9

4 2 8

3 0 1

>> A(1:2:end)=-10

A =

-10 6 -10

4 -10 8

-10 0 -10

6、获取与矩阵有关的信息

length( ) 返回最长维的长度

ndims( )
返回维数

numel ( ) 返回元素个数

size() 返回每一维的长度

求平均值用numel()函数实现

>> A=rand(5)*10;

A(4:5,:)=[]

A =

1.9343 6.9790 4.9655 6.6023 7.2711

6.8222 3.7837 8.9977 3.4197 3.0929

3.0276 8.6001 8.2163 2.8973 8.3850

sum(A(:))/numel(A)

ans =

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