matlab 数值数组及其运算

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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 1
5 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 3
2.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)二维数组的操作。

相关文档
最新文档