1、向量
(1)生成方式1:
x = [值]
x = [3 5 6 7 8] % 行向量 y = [4;5;6;7] % 列向量 y = x' % 行向量转为列向量
(2)生成方式2:
x = 初始值:[步长]:终值
x = 初始值:终值 (默认步长是1)
x = 5:2:20 x = 3:15
(3)生成方式3:
x = linspace(初值,终值,个数n) 步长 = (终值-初值)/ n
x = linspace(初值,终值) 生成100个,均匀分布
x = linspace(4,12,5) % 生成5个 y = linspace(1,10) % 默认生成100个
(4)生成方式4:
x = logspace(初值,终值,个数) 生成[10^初值,10^终值]之间的数
个数省略,默认50个
x = logspace(1,2,10) % 10到100之间10个数,均匀分布 y = logspace(1,2) % 1到100之间50个数
2、二维数组
(1)直接创建
空格 或 逗号 区分同一行的不同元素;分号 或者 回车 区分不同行的元素。
(2)函数创建
① ones(n):生成n行n列,里面都是1; ones(n,m)生成n行m列
② zeros(n):生成n行n列,里面都是0; zeros(n,m)生成n行m列
③ eye(n):生成n行n列,主对角线是1,其他均为0; eye(n,m)生成n行m列
④ rand(n) :生成n行n列随机数,分布在(0~1)之间;rand(n,m)生成n行m列
⑤ randn(n,m) :生成n行n列标准正态分布的伪随机数,均值为0,方差为1;
⑥ randi(max,n) :生成n行n列整数,数组分布在闭区间[1,max];
randi(max,n,m) 指定最大值,生成n行m列 ;
randi([iMin,iMax],n)指定最小和最大值;生成n行n列;
randi([iMin,iMax],n,m)指定最小和最大值,生成n行m列 ;
%% 二维数组1 直接创建 x = [1 2 3;4 5 6] % 分号换行 y = [1 2 3 % 回车换行 4 5 6 7 8 9] %% 二维数组2 函数创建 x = ones(9) y = ones(3,5) x = zeros(5) y = zeros(3,4) x = eye(9) y = eye(4,7) x = rand(5) y = rand(6,7) r = randn(5,6) r = randi(7,5) r = randi(5,6,7) % 6行7列,最大随机数5 r = randi([5,10],5) % 最小5,最大10,5行5列 r = randi([5,10],3,5) % 最小5,最大10,3行5列
3、数组大小
(1)d = size(数组名) 返回值为一个行向量
(2)[m,n] = size(数组名) 返回 m是行的尺寸大小,n是列的尺寸大小
%% 数组大小1 x = randi(7,4,6) d = size(x) % 4 6 [m,n] = size(x) % 分别返回 m=4 n=6
(3)length(数组名)
空——>返回0;
标量——>返回1;
向量——>返回实际个数;
多维数组——>返回较大维度。
%% 数组大小2 x = [3 4 5; 6 7 8; 6 8 9] y = [1 3 5 7 9] a = length(x) % 3 最大维度 b = length(y) % 5 实际个数
(4) numel函数:返回数组总的个数,n*m
%% 数组大小3 x = ones(4,5) a = numel(x) % 20 总的个数
4、数组的索引
(1)双下标索引
方法:数组名(所在行,所在列)
(2)单下标索引
方法:数组名(所在序号) 列优先排序
(3)双下标转为单下标索引
方法:单下标索引 = sub2ind(size,m,n) (size数组大小=size(数组名))
(4)单下标转为双下标索引
方法:[行,列] = ind2sub(数组大小,单下标索引)
%% 数组的索引 x = magic(6) % 生成一个魔方数组(每行的值相加相等) a = x(3,4) % 获取位于数组3行4列的值 b = x(4) % 获取第4列第一个数 c = sub2ind(size(x),3,4) % 21 位于3行4列的单下标索引为21 [m,n] = ind2sub(size(x),21) % m=3 ,n=4
【索引扩展】直接指定当前数组外的一个位置,并对其进行赋值。确保数组以最小代价完成扩展。
%% 索引扩展 a = zeros(3,3); a(2,4) = 9; % 现在的a是3行4列 a(5,8) = 5; % 现在的a是5行8列
5、数组扩展
(1)cat函数
方法:扩展结果 = cat(标识,数组1,数组2,...)
标识:1或2 1表示列组合(列一致) 2表示行组合(行一致)
(2)vercat函数
方法:扩展结果 = vertcat(数组1,数组2,...) 垂直拓展
(3)horzcat函数
方法:扩展结果 = horzcat(数组1,数组2,...)水平拓展
%% 数组扩展 a = ones(3,4); b = zeros(2,4); b1 = zeros(3,5); c = cat(1,a,b); % 列组合 d = vertcat(a,b); % 列组合 e = horzcat(a,b1); % 行组合
6、块操作
(1)repmat函数:重复数组
方法:数组B = repmat(数组A,m,n) 把数组A变成m行n列个,赋给数组B
% repmat函数 A = [1 2 3; 4 5 6]; % 2行3列 B = repmat(A,3,4); % 6行12列 C = repmat(A,2); % 4行6列
(2)blkdiag函数:对角线拼接数组
方法:数组D = blkdiag(数组A,数组B,数组C,...)
% blkdiag函数 A = magic(3); B = magic(4); C = blkdiag(A,B); % 7行7列,对角线拼接
(3)kron函数:将数组A的元素每一个乘以数组B为一个块,最优所有的块是数组A的行列数
方法:数组C = kron(数组A,数组B)
% kron函数 A = [0 1; 2 3]; % 2行2列 B = [1 1 1;1 1 1;1 1 1]; % 3行3列 C = kron(A,B)
7、数组裁剪
(1)罗列序号裁剪:直接将需要保留的序号罗列出来
剪裁结果 = 原数组(保留的行,保留的列)
% 罗列序号裁剪 a = magic(6); b =a([2,3,4],[3,5]); % 保留原数组的2,3,4行和3,5列
(2)冒号区间裁剪:
m:n m—初始值,n—终止值
% 冒号区间剪裁 c = a(1:2,3:5); % 保留原数组的第1行到第2行与第3列到第5列交叉的值
(3)冒号等差序列:
m:k:n m—初始值,k—等差值,n—终止值
% 冒号等差序列 d = a(1:2:5,2:2:6); % 保留原数组第1行,第3行,第5行与第2列,第4列,第6列交叉的值
(4)冒号全部:
% 冒号全部 e = a(3:5,:); % 第3行到第5行的所有列
(5)删除整行整列:
数组(要删除的行,:)= [ ]
数组(:,要删除的列)= [ ]
% 删除整行整列 x = [1 2 3; 4 5 6; 7 8 9; 3 6 8; 3 6 8; 1 4 7]; x(2:4,:) = [] % 删除2,3,4行 x(:,2:3) = [] % 删除2,3列
8、数组转置
(1)实数
操作符:' 或者 .'
函数: transpose 或 ctranspose
% 实数 a = magic(3); b = a'; c = transpose(a); d = ctranspose(a);
(2)含复数
非共轭转置: .' 或 transpose
共轭转置: ' 或 ctranspose
% 含复数 a = rand(3,4) +rand(3,4)*i; b = a.' % 非共轭转置 c = a' % 共轭转置 % 结果 b = 0.1465 + 0.8877i 0.6311 + 0.0646i 0.8593 + 0.4362i 0.9742 + 0.8266i 0.5708 + 0.3945i 0.9969 + 0.6135i 0.5535 + 0.8186i 0.5155 + 0.8862i 0.3307 + 0.9311i 0.4300 + 0.1908i 0.4918 + 0.2586i 0.0710 + 0.8979i c = 0.1465 - 0.8877i 0.6311 - 0.0646i 0.8593 - 0.4362i 0.9742 - 0.8266i 0.5708 - 0.3945i 0.9969 - 0.6135i 0.5535 - 0.8186i 0.5155 - 0.8862i 0.3307 - 0.9311i 0.4300 - 0.1908i 0.4918 - 0.2586i 0.0710 - 0.8979i
9、数组的翻转
(1)上下翻转flipud
结果数组B = flipud(数组A)
(2)左右翻转fliplf
结果数组B = fliplr(数组A)
(3)flip函数
结果数组B = flip(数组A)
结果数组B = flip(数组A,1) 等价上下翻转
结果数组B = flip(数组A,2) 等价左右翻转
(4)rot90函数
结果数组B = rot90(数组A,k ) 把数组A按照逆时针旋转90*k度,k默认值为1;
k为负数时为顺时针旋转。
%% 数组翻转 % flipud A = magic(4); B = flipud(A); % fliplr A = magic(4); B = fliplr(A); % flip A = magic(3); B = flip(A,1); % 上下 C = flip(A,2); % 左右 % rot90 A = magic(3) B = rot90(A) % 逆时针旋转90度 C = rot90(A,2) % 逆时针旋转180度
10、数组尺寸调整
(1)reshape函数
结果数组B = reshape(数组A,a,b) 将数组A调整为a行
单索引不变
%% 数组尺寸调整 A = magic(4); B = reshape(A,2,8); % 将数组A变换为2行8列
11、数组与标量的运算
(1)基本运算
加:结果数组B = 数组A + 标量
减:结果数组B = 数组A - 标量
乘:结果数组B = 数组A * 标量
除:结果数组B = 数组A / 标量
% 基本运算 a = ones(5) b = a + 2 % 加 c = a - 2 % 减 d = a * 5 % 乘法 e = a / 10 % 除法 a = 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 b = 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 c = -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 d = 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 e = 0.1000 0.1000 0.1000 0.1000 0.1000 0.1000 0.1000 0.1000 0.1000 0.1000 0.1000 0.1000 0.1000 0.1000 0.1000 0.1000 0.1000 0.1000 0.1000 0.1000 0.1000 0.1000 0.1000 0.1000 0.1000
(2)乘方运算
正整数:结果数组B = 数组A^2 (要求A是方阵)——两个数组相乘
负数:结果数组B = 数组A^(-1) 计算数组A的逆矩阵
小数:结果数组B = 数组A^(0.25) B^4 = A
% 乘方运算 a = [1 3; 5 7]; b = a^2; % 计算a的2次幂 c = a^(-1); % 计算a的逆矩阵 d = a^(0.25); % 计算a的小数次幂 b = 16 24 40 64 c = -0.8750 0.3750 0.6250 -0.1250 d = 0.8898 + 0.5551i 0.3180 - 0.2108i 0.5300 - 0.3514i 1.5259 + 0.1334i
12、数组之间的运算
(1)加减法运算:(点对点相加减)
要求:参与运算的数组应该具有相等的尺寸。
% 加减法运算 a = [1 2; 3 4]; b = [2 3 ;4 5]; c = a+b; d = b-a; c = 3 5 7 9 d = 1 1 1 1
(2)乘法:(正常的矩阵乘法运算)
要求:数组维数相容 A*B,A的列数等于B的行数
a = [1 2 3;4 5 6]; b = ones(3)*3; c = a*b c = 18 18 18 45 45 45
(3)除法:
A/B:A*inv(B) 或 A*pinv(B)
AB:inv(A)*B 或 pinv(A)*B
inv数组求逆矩阵,pinv广义数组求逆函数
% 除法运算 a = rand(4); b = rand(4); c = a/b % a除去b的逆 d = a % a的逆除以b c = 1.5629 -0.3945 -1.5193 -0.1687 0.3468 -0.6816 0.3584 0.3173 2.1534 -1.1947 -1.4572 -0.1862 -0.4125 0.9986 1.4803 -0.0680 d = 2.2385 2.0726 1.8485 1.5375 1.9528 1.4157 2.0773 1.1141 -4.3650 -2.5815 -2.8704 -1.3101 3.4662 1.2311 1.4120 0.6752
13、数组的点运算
(1)乘法:(点对点相乘)
【注意】:参与运算的数组应该具有相同的的尺寸;
a.*b 表示a和b中对应的元素相乘;
a.*b 与 b.*a 等价
% 乘法 a = magic(3); b = eye(3); c = a.*b c = 8 0 0 0 5 0 0 0 2
(2)除法:
参与运算的两个数组必须大小相等;
参与运算的两个数组的对应元素做除法;
分为a.(b做分子) 与 b./a(b做分子)——总结:斜杠上的为分子
% 除法 a = magic(3); b = ones(3); c = a. % b做分子 d = a./b % a做分子 c = 0.1250 1.0000 0.1667 0.3333 0.2000 0.1429 0.2500 0.1111 0.5000 d = 8 1 6 3 5 7 4 9 2
(3)乘方:求幂
求n个相同因数乘积的运算,叫做乘方。
乘方的结果叫做幂(power)。
【分类】:(点对数或点对点)
数组.^标量 A.^3 ——数组的各个点3次幂,数组元素为底
标量.^数组 3.^A ——分别把这个数组中的元素做为幂,3为底
数组.^数组 A.^B ——A数组的元素为底,B数组的元素为幂
% 乘方 a = magic(3) b = ones(3); c = a.^3 d = 2.^a e = a.^b a = 8 1 6 3 5 7 4 9 2 c = 512 1 216 27 125 343 64 729 8 d = 256 2 64 8 32 128 16 512 4 e = 8 1 6 3 5 7 4 9 2