matlab 数值数组及其运算

发布时间:2010-07-08 17:10:00

matlab 数值数组及其运算

数值数组(Numeric )和数组运算( Operation)是Matlab的核心运算

内容

一、导言

二、一维数组 (向量)

三、二维数组(矩阵)

四、高维数组

五、MATLAB 的运算符



一、导言

1、数组的定义

数组是指一组实数或复数排成的长方阵列()

一维的行或列 ? 向量

二位数组          ? 矩阵

三维的“若干矩阵的堆叠” ? 体

四维

更高维

2、数组运算

无论在数组上施加什么运算(+, -, * ,/,或函数等),该运算对数组中的每个元素都实施同样的操作。

Matlab的数组运算

使计算程序简短、易读

提高程序的向量化程度、提高计算效率

示例

x=0:0.1:1 %定义自变量的采样点取值数组

y=x.*exp(-x)   %利用数组运算计算各自变量采样点上的函数值

plot(x,y),xlabel('x'),ylabel('y'),title('y=x*exp(-x)')     %绘图

4 矩阵的索引或下标

矩阵 A 中,位于第 i 横列、第 j 直行的元素可表示为 A(i, j) ,i 与 j 即是此元素的下标(Subscript)或索引(Index)

MATLAB 中,所有矩阵的内部表示法都是以直行为主的一维向量

A(i, j) 和 A(i+(j-1)*m) 是完全一样的~m为矩阵A的列数

我们可以使用一维或二维下标来存取矩阵

矩阵的索引或下标

可以使用矩阵下标来进行矩阵的索引(Indexing)

A(4:5,2:3) -取出矩阵 A 的 第四、五 横列与 二、三 直行所形成的部份矩阵

A([9 14; 10 15]) - 用一维下标的方式来达到同样目的  

用冒号(:), 取出一整列或一整行

A(:, 5) -取出矩阵 A 的第五个直行

用 end 这个保留字来代表某一维度的最大值

A(:, end) - 矩阵 A 的最后一个直行

可以直接删除矩阵的某一整个横列或直行

A(2, :) = [] – 删除A矩阵的第二列

A(:, [2 4 5]) = [] - 删除 A 矩阵的第二、四、五直行

二、一维数组

1 一维数组的创建

(1)逐个元素输入 []

Column

>> X = [ 1 ; 2 ; 3 ];

Row

>> Y = [ 1 , 2 , 3 ];

>> Y = [ 1   2   3 ];

逗号和分号的作用

        ?逗号和分号可作为指令间的分隔符,matlab允许多条语句在同一行出现。

        ?分号如果出现在指令后,屏幕上将不显示结果。

(2)冒号生成法

start:Step:stop

%其中start为初始值,step为步长,stop为终止值。

Start: stop        %implies step=1

>> Z = 1:-0.25:0

Z = [ 1 , 0.75 , 0.5 , 0.25 , 0 ]

(3)定数线性采样法

linspace( Initial , Final , # Points )

x= linspace(a,b,n)  

%   a,b是数组首末元素,n是采样总点数

%   等同于 x= a: (b-a)/(n-1):b

>> Z = linspace( 5 , 20 , 4 )

Z =

[ 5 , 10 , 15 , 20 ];

>> x=linspace(2,8,3)

x =   

2     5     8

(4)定数对数采样法

logspace( Initial , Final , # Points )

x= logspace(a,b,n) %首点是10^a,末点是10^b

x=logspace(0,3,4)

x =     

1          10         100        1000

2 一维数组的寻访

x=rand(1,5) %产生的均布随机数组  

        x =0.9501    0.2311    0.6068    0.4860    0.8913

x(3)   %寻访数组x的第三个元素。    

x([1 2 5])     %寻访数组x的第1、2、5个元素组成的子数组

x(1:3)          %寻访前三个元素组成的子数组

x(3:end)      %寻访除前2个元素外的全部其他元素

x(3:-1:1)      %由前三个元素倒排构成的子数组

x(find(x>0.5))        %由大于0.5的元素构成的子数组

x([1 2 3 4 4 3 2 1]) %对元素可以重复寻访

X(0)    或 x(6)   ?Error

子数组的赋值(Assign)



x(3) = 0 %把上例中的第三个元素重新赋值为0

x =  

      0.9501    0.2311         0    0.4860    0.8913



x([1 4])=[1 1] %把当前x数组的第一、四个元素都赋值为1。

x =

    1.0000    0.2311         0    1.0000    0.8913

3 一维数组的操作

>> X = [ 1 ; 2 ; 3 ];

(+)

>> Z = X + 2

Z = [ 3 ; 4 ; 5 ]

(-)

(*)

>> Z = 2 * X

Z = [ 2 ; 4 ; 6 ]

(/)

>> Z = X / 2

Z = [ 0.5 ; 1 ; 1.5 ]

内积

>> X = [ 1 , 2 , 3 ]; >> Y = [ 1 ; 2 ; 3 ]; >> Z = X * Y

Z = 14

平均值

>> X = rand(10);

>> Y = mean( X )

中值

>> Y = mean( X )

最大值

>> Y = max( X )

最小值

>> Y = min( X )

Sort指令

sort 指令可对向量元素进行排序(Sorting)

x = [3 5 8 1 4];

[sorted, index] = sort(x)   % 对矩阵 x 的元素进行排序

sorted =

      1     3     4     5     8

index =

      4     1     5     2     3

sorted 是排序后的向量,index 则是每个排序后的元素在原向量 x 的位置

x(index) 即等于 sorted 向量

向量的p-norm

向量a 的 p-norm 可以定义为

p=2 时,即为向量 a 的长度,或称欧氏长度(Euclidean Length)

欲求一向量的 p-norm,可用 norm 指令 norm(x,p)

a = [3 4];

x = norm(a, 1)       % x = 7

y = norm(a, 2)       % y = 5

z = norm(a, inf)      % z = 4

三、 二维数组(矩阵)

     数组运算指元素对元素的算术运算,与通常意义上的由符号表示的线性代数矩阵运算不同

二维数组

二维数组又简称矩阵,具有两个维度

「列」(Row)

「行」(Column)

1、二维数组的创建

(1)直接输入法

a=2.7358; b=33/79;       %分别给变量 a ,b 赋值

C=[1,2*a+i*b,b*sqrt(a);sin(pi/4),a+5*b,3.5+i]

          %创建二维数组C

C =

   1.0000             5.4716 + 0.4177i   0.6909         

   0.7071             4.8244             3.5000 + 1.0000i

规则:

矩阵元素必须用[    ]括住

矩阵元素必须用逗号或空格分隔     

在[    ]内矩阵的行与行之间必须 用分号分隔

(2) 利用M文件创建和保存数组

创建和保存数组 AM的 MyMatrix.m 文件。% MyMatrix.m Creation and preservation of matrix AM

AM=[101,102,103,104,105,106,107,108,109;...

    201,202,203,204,205,206,207,208,209;...

301,302,303,304,305,306,307,308,309];

(3)特殊用途矩阵

单位阵

eye( Column , Row )

>> X = eye(2,2)

X = [ 1 , 0 ; 0 , 1 ]

Zeros & Ones Matrix

zeros( Column , Row )

ones( Column , Row )



rand 指令及 randn 指令则用于产生随机数矩阵

魔方矩阵 魔方矩阵有一个有趣的性质,其每行、每列及两条对角线上的元素和都相等。对于n阶魔方阵,其元素由1,2,3,…,n2共n2个整数组成。MATLAB提 供了求魔方矩阵的函数magic(n),其功能是生成一个n阶魔方阵

magic(3)

ans =

     8     1     6

     3     5     7

     4     9     2

2、二维数组元素的标识

(1) 全下标标识

(2) “单下标”标识

(3)“逻辑1”标识



A=zeros(2,5);  

A(:)=-4:5   

L=abs(A)>3  

islogical(L)  

X=A(L)‘

     

A =

    -4    -2     0     2     4

    -3    -1     1     3     5

L =

     1     0     0     0     1

     0     0     0     0     1

ans =

     1

X =

    -4        4      5

3、 二维数组的寻访

A(i, j) :矩阵 A 中,位于第 i 横列、第 j 直行的元素

A(i, j) 和 A(i+(j-1)*m) 是完全一样的(m为矩阵A的列数 )

A(4:5,2:3) -取出矩阵 A 的 第四、五 横列与 二、三 直行所形成的部份矩阵

用冒号(:), 取出一整列或一整行

A(:, 5) -取出矩阵 A 的第五个直行

用 end 这个保留字来代表某一维度的最大值

A(:, end) - 矩阵 A 的最后一个直行

可以直接删除矩阵的某一整个横列或直行

A(2, :) = [] – 删除A矩阵的第二列

A(:, [2 4 5]) = [] - 删除 A 矩阵的第二、四、五直行

4、 二维数组的运算

A=[1:4;5:8]   %生成数组

A =

     1     2     3     4

     5     6     7     8

pow2(A)    %计算的结果也是数组

ans =

     2     4     8    16

    32    64   128   256

(1) 矩阵加、减(+,-)运算

规则:

? 相加、减的两矩阵必须有相同的行和列,两矩阵对应元素相加减。

? 允许参与运算的两矩阵之一是标量。标量与矩阵的所有元素分别进行加减操作。

>> X = [ 1 , 2 ; 3 , 4 ]; >> Y = [ 4 , 3 ; 2 , 1 ]; >> Z = X+Y

Z = [ 5 , 5 ; 5 , 5 ]



(2) 数组乘除(??,./,.\)

a??b —— a,b两数组必须有相同的行

                               和列两数组相应元素相乘。

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

b=[2 4 6;1 3 5;7 9 10];

a.*b

ans =

      2            8           18     

      4           15          30     

    49           72          90     

a./b=b.\a

a.\b=b./a

a./b=b.\a — 都是a的元素被b的对应元

                    素除

a.\b=b./a — 都是a的元素被b的对应元

                    素除

例: a=[1 2 3];b=[4 5 6]; c1=a.\b; c2=b./a

c1 = 4.0000    2.5000    2.0000

c2 = 4.0000    2.5000    2.0000

(2) 矩阵乘(?)运算

规则:

A矩阵的列数必须等于B矩阵的行数

标量可与任何矩阵相乘。

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

b=[1;2;3];

c=a*b

ans =

     25           37           46     

     55           85         109     

     85         133         172

   矩阵除的运算在线性代数中没有,有矩阵逆的运算,在matlab中有两种数组除运算

>> X = [ 1 2 3 ; 2 3 1 ; 3 1 2];

>> Y = inv(X);

inv —— 矩阵求逆

(3) 数组乘方(.^) — 元素对元素的幂

例:

a=[1 2 3];b=[4 5 6];

z=a.^2

z =

          1.00          4.00          9.00

z=a.^b

z =

          1.00         32.00        729.00

(4). 矩阵乘方—— a.^n

(5)矩阵的其它运算

det —— 行列式的值

eig —— 矩阵的特征值

diag —— 对角矩阵

’ —— 矩阵转置

sqrt —— 矩阵开方

norm ——矩阵的p-norm

max ——矩阵的最大元素

det —— 行列式的值

>> Z = det( X )

Z = -18

EXAMPLE (2 x 2)

EXAMPLE (3 x 3)

eig —— 矩阵的特征值

   >> [ V , D ] = eig(Z)

Eigenvalues …

D = [-1.73, 1.73, 6.00]

Eigenvectors …

V = [ 0.79 0.21 0.58 ; -0.21   -0.79 0.58 ; -0.58 0.58 0.58]

矩阵转置

矩阵 z 的转置(Transpose),则表示成矩阵 z. '

    i = sqrt(-1);   % 单位虚数

    z = [1+i, 2; 3, 1+2i];

    w = z.'      % 单纯转置(注意 z 后面的句点及单引号)

w =

    1.0000+1.0000i     3.0000  

    2.0000                  1.0000+2.0000i

若 z 为实数,则 z' 和 z.' 的结果是一样的

矩阵的p-norm

一个矩阵 A 的 p-norm 可以定义如下:

norm 指令亦可用于计算矩阵的 p-norm

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

norm(A, 2)                    % ans = 16.8481

矩阵的最大元素

找出一矩阵最大元素的位置

x = magic(5);

[colMax, colMaxIndex] = max(x)

colMax =    23    24    25    21    22

colMaxIndex =       2     1     5     4     3

colMax 代表每一直行的最大值,colMaxIndex 则是每一直行出现最大值的位置

若只要找出一矩阵 x 的最大值,可输入max(x(:))

矩阵的秩 矩阵线性无关的行数与列数称为矩阵的秩。在MATLAB中,求矩阵秩的函数是rank(A)

矩阵的迹 矩阵的迹等于矩阵的对角线元素之和,也等于矩阵的特征值之和。在MATLAB中,求矩阵的迹的函数是trace(A)。

(6) 矩阵的一些特殊操作

矩阵的变维

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

   c=zeros(3,4);c(:)=a(:)

矩阵的变向

   rot90:旋转; fliplr:上翻; flipud:下翻

矩阵的抽取

   diag:抽取主对角线;tril: 抽取主下三角;

                                  triu:抽取主上三角

矩阵的扩展

数组操作函数

a=-4:4    %产生一维数组

A=reshape(a,3,3)   %把一维数组a重排成的二维数组

a =

    -4    -3    -2    -1     0     1     2     3     4

A =

    -4    -1     2

    -3     0     3

    -2     1     4

a1=diag(A,1)   %取A阵“第一上对角线”的元素

a1 =

    -1

     3

A1=diag(a1,-1) %产生以a1数组元素为“第一下对角线”元素的二维数组

A1 =

     0     0     0

    -1     0     0

     0     3     0

flipud(A)    %上下对称交换

ans =

    -2     1     4

    -3     0     3

    -4    -1     2

fliplr(A)   %左右对称交换

ans =

     2    -1    -4

     3     0    -3

     4     1    -2

rot90(A)     %逆时针旋转90度

ans =

     2     3     4

    -1     0     1

    -4    -3    -2

四、高维数组

在 MATLAB 的数据型态中,向量可视为一维数组,矩阵可视二维数组,对于维度(Dimensions)超过 1 的数组则均可视为「多维数组」(Multidimesional s,简称 N-D s)。

三维数组

将两个二维数组迭在一起,就形成第三个维度,此第三个维度称为「页」(Page),图示如下

四维数组

四维数组的第四个维度可视为「箱」(Box),而每个箱是由一个三维数组所组成,其寻址方式为(列,行,页,箱)。

一个 2×2×3×5 的四维数组,可表示成 5 个箱,每个箱都由一个 2×2×3 的三维数组所组成,图标如下:

可类推至 n 维数组,n 为任意自然数。

1 高维数组的创建

直接通过“全下标”赋值

由低维数组组合

由函数ones, zeros,rand,randn

借助cat, repmat, reshape

“全下标”元素赋值方式创建高维数组演示。

A(2,2,2)=1   %单元素赋值创建数组

A(:,:,1) =

     0     0

     0     0

A(:,:,2) =

     0     0

     0     1

B(2,5,:)=1:3   %子数组赋值创建数组

B(:,:,1) =

     0     0     0     0     0

     0     0     0     0     1

B(:,:,2) =

     0     0     0     0     0

     0     0     0     0     2

B(:,:,3) =

     0     0     0     0     0

     0     0     0     0     3

低维数组合成高维数组。

clear,A=ones(2,3);

A(:,:,2)=ones(2,3)*2;

A(:,:,3)=ones(2,3)*3

A(:,:,1) =

     1     1     1

     1     1     1

A(:,:,2) =

     2     2     2

     2     2     2

A(:,:,3) =

     3     3     3

     3     3     3

由函数ones, zeros, rand, randn直接创建标准高维数组的示例。

rand('state',1111),rand(2,4,3)

ans(:,:,1) =

    0.6278    0.9748    0.2585    0.6949

    0.2544    0.2305    0.0313    0.1223

ans(:,:,2) =

    0.4889    0.3898    0.8489    0.0587

    0.9138    0.3071    0.4260    0.6331

ans(:,:,3) =

    0.2802    0.2073    0.7438    0.2714

    0.4051    0.2033    0.4566    0.2421

借助cat, repmat, reshape等函数构作高维数组。



cat(3,ones(2,3),ones(2,3)*2,ones(2,3)*3)

ans(:,:,1) =

     1     1     1

     1     1     1

ans(:,:,2) =

     2     2     2

     2     2     2

ans(:,:,3) =

     3     3     3

     3     3     3

2 高维数组的标识

维数、大小和长度

clear;A=reshape(1:24,2,3,4);

dim_A=ndims(A)   %测量A的维数

size_A=size(A)    %测量A的大小

L_A=length(A)    %求A的长度

dim_A =

              3

size_A =

              2     3     4

L_A =

            4

3 高维数组操作函数汇总

A=reshape(1:18,2,3,3) %创建3维数组

A(:,:,1) =

     1     3     5

     2     4     6

A(:,:,2) =

     7     9    11

     8    10    12

A(:,:,3) =

    13    15    17

    14    16    18

flipdim(A,1) %关于“行平分面”交换对称位置上的元素

ans(:,:,1) =

     2     4     6

     1     3     5

ans(:,:,2) =

     8    10    12

     7     9    11

ans(:,:,3) =

    14    16    18

    13    15    17

五、MATLAB 的操作数

操作数分为五大类:

1. 数学操作数

2. 关系操作数

3. 逻辑操作数

4. 位操作数

5. 及集合操作数

1 数学操作数

数学操作数之优先级:

1. 转置(.’),幂次(.^).共轭转置(’),矩阵幂次(^)

2.正号(+),负号(-)

3.乘法(.*),元素右除(./),元素左除(.\),矩阵乘法(*),矩阵右除(/),矩阵左 除(\)

4.加法(+),减法(-)

5.冒号(:)(例如: x = 1:2:5 等)

同一类的操作数均具有相同的优先度因此在计算上,是由左至右依次完成

2 关系操作数

3 逻辑操作数

MATLAB 的逻辑操作数(Logical Operators)

数值为1则为True, 0 则为False

4 位操作数

MATLAB 的位操作数(Bitwise Operators)可对非负整数进行位对位的逻辑运算

5 集合操作数

MATLAB 的集合操作数(Set Operators)可将向量视为集合,来进行各种集合运算

总结

(1)冒号生成法   start:Step:stop

(2)定数线性采样法 linspace( Initial , Final , # Points )

(3)定数对数采样法logspace( Initial , Final , # Points )

(4)一维数组的操作

(5)二维数组的操作

matlab 数值数组及其运算

相关推荐