《MATLAB与系统仿真》 数组和数组运算

【转载请注明出处:http://blog.csdn.net/leytton/article/details/40298909

参考视频 http://www.openke.net/show.php?id=2870第6、7讲

参考文档 http://wenku.baidu.com/view/95b06ae2524de518964b7d6f.html 

 数组的直接创建

【例2-1】 数组的直接创建

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

>>A=[1;2;3;4;5;6]
A =
     1
     2
     3
     4
     5
     6
>> A=[1 1+i 2-i 3 5];
>> B=A'
B =
   1.0000          
   1.0000 - 1.0000i
   2.0000 + 1.0000i
   3.0000          
   5.0000        
>> A=[1,2,3;4,5,6]
A =
     1     2     3
     4     5     6


函数生成数组

函数

功能

语法

备注

eye

生成单位矩阵

Y = eye(n)
Y = eye(m,n)
Y = eye(size(A))

 

linspace

生成线性分布的向量

y = linspace(a,b)
y = linspace(a,b,n)

生成从ab之间的n个(默认值100)均匀数

ones

用于生成全部元素为1的数组

Y = ones(n)
Y = ones(m,n)
Y = ones([m n])
Y = ones(size(A))

 

rand

生成随机数组,数组元素值均匀分布

Y = rand
Y = rand(n)
Y = rand(m,n)
Y = rand(size(A))

 

randn

生成随机数组,数组元素值正态分布

Y = randn
Y = randn(n)
Y = randn(m,n)
Y = randn(size(A))

 

zeros

用于生成全部元素为0的数组

Y = zeros(n)
Y = zeros(m,n)
Y = zeros(size(A))


【例2-2】 利用数组生成函数生成数组

>> ones(1,2)
ans =
     1     1
>> linspace(0,12,4)
ans =
     0     4     8    12
>> rand(1,6)
ans =
    0.7095    0.4289    0.3046    0.1897    0.1934    0.6822
>> randn(3,4)
ans =
   -0.4326    0.2877    1.1892    0.1746
   -1.6656   -1.1465   -0.0376   -0.1867
    0.1253    1.1909    0.3273    0.7258


数组寻址

【例2-3】一维数组的寻址

>> A=randn(1,6)
A =
    0.8156    0.7119    1.2902    0.6686    1.1908   -1.2025
>> A(5)
ans =
    1.1908
>> A([1 3 4 6])
ans =
    0.8156    1.2902    0.6686   -1.2025
>> A(3:5)
ans =
    1.2902    0.6686    1.1908
>> A(3:end)
ans =
    1.2902    0.6686    1.1908   -1.2025
【例2-4】 二维数组的寻址
>> A=randn(3,4)
A =
   -0.0198    0.2573   -0.8051   -0.9219
   -0.1567   -1.0565    0.5287   -2.1707
   -1.6041    1.4151    0.2193   -0.0592
>> A(6)
ans =
    1.4151
>> A(3,2)
ans =
    1.4151

数组的扩展与裁剪

【例2-5】 数组的扩展

>> X=[1 2 3;4 5 6;7 8 9];          %数组的赋值扩展
>> X(4,4)=10
X =
     1     2     3     0
     4     5     6     0
     7     8     9     0
     0     0     0    10
>> X(:,5)=20 
X =
     1     2     3     0    20
     4     5     6     0    20
     7     8     9     0    20
     0     0     0    10   20
>>  xx=X(:,[1:5,1:5])                 %多次寻址扩展
xx =
     1     2     3     0    20     1     2     3     0    20
     4     5     6     0    20     4     5     6     0    20
     7     8     9     0    20     7     8     9     0    20
     0     0     0    10   20     0     0     0    10   20

>> Y=ones(2,5)   
Y =
     1     1     1     1     1
     1     1     1     1     1
>> xy_r=[X;Y]                           %列合成扩展
xy_r =
     1     2     3     0    20
     4     5     6     0    20
     7     8     9     0    20
     0     0     0    10   20
     1     1     1     1     1
     1     1     1     1     1
>> xy_c=[X,Y(:,1:4)']                %行合成扩展
xy_c =
     1     2     3     0    20     1     1
     4     5     6     0    20     1     1
     7     8     9     0    20     1     1
     0     0     0    10   20     1     1

数组裁剪和数组元素删除

【例2-6】 数组的裁剪和数组元素的删除

>> X=rand(6,6)
X =
    0.9501    0.4565    0.9218    0.4103    0.1389    0.0153
    0.2311    0.0185    0.7382    0.8936    0.2028    0.7468
    0.6068    0.8214    0.1763    0.0579    0.1987    0.4451
    0.4860    0.4447    0.4057    0.3529    0.6038    0.9318
    0.8913    0.6154    0.9355    0.8132    0.2722    0.4660
    0.7621    0.7919    0.9169    0.0099    0.1988    0.4186
>> X(3,:)
ans =
    0.6068    0.8214    0.1763    0.0579    0.1987    0.4451
>> X(1:2:6,2:2:6)              %圆括号中表示为初值、步长、终值
ans =
    0.4565    0.4103    0.0153
    0.8214    0.0579    0.4451
    0.6154    0.8132    0.4660
>> X([1,2,5],[2,3,6])               %方括号中表示取值
ans =
    0.4565    0.9218    0.0153
    0.0185    0.7382    0.7468
    0.6154    0.9355    0.4660
>> X([1,2],:)=[]
X =
    0.6068    0.8214    0.1763    0.0579    0.1987    0.4451
    0.4860    0.4447    0.4057    0.3529    0.6038    0.9318
    0.8913    0.6154    0.9355    0.8132    0.2722    0.4660
    0.7621    0.7919    0.9169    0.0099    0.1988    0.4186
>> X(1:2:4,:)=[]
X =
    0.4860    0.4447    0.4057    0.3529    0.6038    0.9318
    0.7621    0.7919    0.9169    0.0099    0.1988    0.4186
>> X(:,[1,2,3,4])=[]
X =
    0.6038    0.9318
    0.1988    0.4186

数组的查找和排序

MATLAB提供数组查找函数find,它能够查找数组中的非零数组元素,并返回其数组索引值。find函数的语法为:
indices = find(X)
indices = find(X, k)
indices = find(X, k, 'first')
indices = find(X, k, 'last')
[i,j] = find(...)
[i,j,v] = find(...)
      其中indices表示非零元素的下标值,i,j分别表示行下标向量和列下标向量,v表示非零元素向量。


MATLAB提供数组排序函数sort,该函数可对任意给定的数组进行排序。sort函数的语法为:
B = sort(A)
B = sort(A,dim)
B = sort(...,mode)
[B,IX] = sort(...)
      其中,B为返回的排序后的数组,A为输入待排序数组,当A为多维数组时,用dim指定需要排序的维数(默认为1);mode为排序的方式,可以取值为ascend和descend,分别表示升序和降序,默认为升序;IX用于存储排序后的下标数组。


【例2-7】数组元素的查找和排序

>> X = [3 2 0; -5 0 7; 0 0 1]
>> [i,j]=find((X>2)&(X<9))
i =
     1
     2
j =
     1
     3
>> sort(X,1)   %以列维方向排序
ans =
    -5     0     0
     0     0     1
     3     2     7
>> sort(X,1,‘descend’)     %’1’表示列维降序排序
ans =
     3     2     7
     0     0     1
    -5     0     0
>>  [B,IX] = sort(X,2)       %’2’表示列维降序排序
B =
     0     2     3
    -5     0     7
     0     0     1
IX =
     3     2     1
     1     2     3
     1     2     3


数组的运算

MATLAB中数组的加减乘除运算是按元素对元素方式进行的。数组的加减法为数组对应元素的加减法,利用运算符“+”和“一”实现该运算。相加或相减的两个数组必须有相同的维数,或者是数组同标量相加减。
      数组的乘除法为对应数组元素的乘除,通过运算符“.*”和“./”实现。相乘或相除的两个数组必须具有相同的维数,或者是数组同标量相加减。
      数组幂运算用符号“.^”实现,表示元素对元素的幂。数组幂运算以三种方式进行:底为数组、底为标量和底与指数均为数组。当底和指数均为数组时,要求两个数组具有相同的维数。

【例2-7】 数组的运算

>> A=ones(3,3)
A =
     1     1     1
     1     1     1
     1     1     1
>> B=rand(3)
B =
    0.8462    0.6721    0.6813
    0.5252    0.8381    0.3795
    0.2026    0.0196    0.8318
>> C1=A+B
C1 =
    1.8462    1.6721    1.6813
    1.5252    1.8381    1.3795
    1.2026    1.0196    1.8318
>> C2=A-B
C2 =
    0.1538    0.3279    0.3187
    0.4748    0.1619    0.6205
0.7974    0.9804    0.1682
>> C3=A.*B
C3 =
    0.8462    0.6721    0.6813
    0.5252    0.8381    0.3795
    0.2026    0.0196    0.8318
>> C4=A./B
C4 =
    1.1817    1.4878    1.4678
    1.9042    1.1931    2.6352
4.9347   50.9178    1.2022
>> A=[1 2 3 4;5 6 7 8;9 10 11 12];
>> B=[1 1 1 1;2 2 2 2;3 3 3 3];
>> A.^2
ans =
     1     4     9    16
    25    36    49    64
    81   100   121   144
>> 2.^A
ans =
           2           4           8          16
          32          64         128         256
         512        1024        2048        4096
>> A.^B
ans =
           1           2           3           4
          25          36          49          64
         729        1000        1331        1728


数组操作函数

【例2-8】 数组操作函数的使用

函数

语法

说明

cat

C = cat(dim, A, B)

按指定维方向,扩展数组

diag

X = diag(v,k)
X = diag(v)
v = diag(X,k)
v = diag(X)

提取对角元素或生成对角矩阵。k=0表示主对角线,k>0表示对角线上方,k<0表示对角线下方

flipud

B = flipud(A)

以数组水平中线为对称轴,交换上下对称位置上的数组元素

fliplr

B = fliplr(A)

以数组垂直中线为对称轴,交换左右对称位置上的数组元素

repmat

B = repmat(A,m,n)

以指定的行数和列数复制数组A

reshape

B = reshape(A,m,n)

以指定的行数和列数重新排列数组A

size

[m,n] = size(X)
m = size(X,dim)

返回数组的行数和列数

length

n = length(X)

返回max(size(x))



>> A=[1,2;3,4];
>> B=[5,6;7,8];
>> cat(1,A,B)
ans =
     1     2
     3     4
     5     6
     7     8
>> cat(2,A,B)
ans =
     1     2     5     6
     3     4     7     8
>> A=rand(5)
A =
    0.0592    0.8744    0.7889    0.3200    0.2679
    0.6029    0.0150    0.4387    0.9601    0.4399
    0.0503    0.7680    0.4983    0.7266    0.9334
    0.4154    0.9708    0.2140    0.4120    0.6833
    0.3050    0.9901    0.6435    0.7446    0.2126
>> x=diag(A,1)
x =
    0.8744
    0.4387
    0.7266
    0.6833
>> B=diag(x,1)
B =
         0    0.8744         0         0         0
         0         0    0.4387         0         0
         0         0         0    0.7266         0
         0         0         0         0    0.6833
         0         0         0         0         0

A =
    0.0592    0.8744    0.7889    0.3200    0.2679
    0.6029    0.0150    0.4387    0.9601    0.4399
    0.0503    0.7680    0.4983    0.7266    0.9334
    0.4154    0.9708    0.2140    0.4120    0.6833
    0.3050    0.9901    0.6435    0.7446    0.2126
>> C=flipud(B)
C =
         0         0         0         0         0
         0         0         0         0    0.6833
         0         0         0    0.7266         0
         0         0    0.4387         0         0
         0    0.8744         0         0         0
>> D=fliplr(B)
D =
         0         0         0    0.8744         0
         0         0    0.4387         0         0
         0    0.7266         0         0         0
    0.6833         0         0         0         0
         0         0         0         0         0
>> A=randn(2)
A =
   -0.4326    0.1253
   -1.6656    0.2877
>> B=repmat(A,1,2)
B =
   -0.4326    0.1253   -0.4326    0.1253
   -1.6656    0.2877   -1.6656    0.2877
>> C=reshape(B,4,2)
C =
   -0.4326   -0.4326
   -1.6656   -1.6656
    0.1253    0.1253
    0.2877    0.2877
>> size(C)
ans =
     4     2
>> size(C,1)
ans =
4






posted @ 2014-10-20 12:50  Leytton  阅读(638)  评论(0编辑  收藏  举报