matlab 数值数组及其运算

阅读: 评论:0

2024年2月3日发(作者:)

matlab 数值数组及其运算

matlab 数值数组及其运算

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

内容

一、导言

二、一维数组 (向量)

三、二维数组(矩阵)

四、高维数组

五、MATLAB 的运算符

一、导言

1、数组的定义

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

一维的行或列 ? 向量

二位数组 ? 矩阵

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

四维

更高维

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 Arrays,简称 N-D Arrays)。

三维数组

将两个二维数组迭在一起,就形成第三个维度,此第三个维度称为「页」(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 数值数组及其运算

本文发布于:2024-02-03 14:49:36,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170694297650668.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:矩阵   数组   元素   运算   计算
留言与评论(共有 0 条评论)
   
验证码:
排行榜

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23