Matlab矩阵和数组

来源:互联网 发布:windows编程7 编辑:程序博客网 时间:2024/04/29 18:48

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

Linspacex=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]在水平方向上聚合矩阵AB,表达式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   -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

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

     243620981

 

矩阵A的第3行第2列元素可以看做实际保存序列中的第6个元素,要获取这个元素,可以使用标准语法A(3,2)A(6).在使用线性索引方式时,如果矩阵大小为[d1,d2]d1d2列,则位置(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

原创粉丝点击