7. 行向量
res = 8; % 一行一列,8B,double
a = [5 88 3 11]; % 一行四列,32B,double
b = [3:1:9]; % =[3:9],从3开始,以1为步长,直到9结束,3 4 5 6 7 8 9
c = [9:-1:3]; % 从9开始,以-1为步长,直到3结束
d = linspace(3,9,7); % 等差数列,3开始,9结束,7个元素
e = logspace(3,9,7); % 等比数列,从10^3到10^9,7个元素
f = [a b]; % a行向量和b行向量组合为新的行向量
a(1); % 取出a行向量中的第一个元素,5
a([2 4]); % 取出a行向量中的第2个元素和第4个元素,88 11
a(end); % 返回a行向量中最后一个元素 11
a(1) = 1; % 令a中第一个元素变为 1
a(1:2) = [1 2]; % 改变a中第1到2个元素的值
a(6) = 6; % 不提倡用,增加a的第6个元素值为6, 5 88 3 11 0 6
a(b[2,1]); % =a([4,3]),11 3
8. 列向量与矩阵
8.1 列向量
a = [3;7;4]; % 一个列向量
b = [3,7,4]'; % ' 实数转置,行向量转置为列向量
c = [1+3i,2-7i,5+4i].'; % .' 这是共轭复数转置
v_col = (3:9)'; % =[3:9]',3 4 5 6 7 8 9 的列向量
v_row = (3:9); % =[3:9],3 4 5 6 7 8 9 的行向量
v_col([3:5]); % 5 6 7 ,列向量中第3行到第5行元素
v_row([3:5]); % 5 6 7 , 行向量中第3列到第4列元素
v_col([3:5]'); % 5 6 7 , 列向量中第3行到第5行元素,与数组指标方向无关
8.2 矩阵
m = [9,6,3;5,7,2]; % 矩阵
rand(); % 1行1列
rand(2); % n维方阵,2行2列
rand(2,3); % 两行三列矩阵
randi([1,10]); % 1-10随机整数,1行1列
randi([1,10],3,4); % 1-10随机整数,3行4列
zeros(3); % 3行3列,全是0
zeros(3,4); % 3行4列,全是0
ones(3); % 3行3列,全是1
ones(3,4); % 3行4列,全是1
eye(4); % 4维单位方阵
v = [3:9];
diag(v); % 对角线元素为v的元素,其余为0的方阵
diag(-1:-1:-6,-1); % 主对角线标号为0,下三角主对角线下方元素为-1到-6,其余元素为0的方阵
diag(-1:-1:-6,-1)+diag(v); %对角线元素为v的元素,主对角线下方元素为-1到-6,其余元素为0的方阵
% 返回矩阵元素
m(2,3); % 返回m矩阵第2行第3列元素,2
m(2,[1 3]); % 返回m矩阵第2行的第1,3列元素,5 2
m(1,1:3); % 返回m矩阵第1行的第1列到第3列元素,9 6 3
m(1,:); % 返回m矩阵第1行元素
m(:,2); % 返回m矩阵第2列元素
m(:,end); % 返回m矩阵最后一列元素,3 2
m(end-1,:); % 返回m矩阵倒数第二行元素,9 6 3
% 线性下标
m(2); % 第二行第一列元素,5
m([1 2 3 4 5 6]); % 9 5 6 7 3 2,矩阵的线性下标从第一列开始依次往下排列
% 改变矩阵值
m(2,3) = NaN; % 改变第二行第三列元素值
m(1,:) = [1 2 3]; % 改变矩阵第一行元素值
m(1,:) = [1;2;3]; % =[1 2 3],改变第一行值,只要提供相同个数元素即可,一维
m(1:2,1:2) = [7,8;9,10]; %改变第1行到第2行,第1列到第2列元素
m(1:2,1:2) = [7,8,9,10]; % 错误,必须提供相同维数的元素,即不能用一维改变二维
m(1,:) = 0.5; % 第一行元素赋值为0.5
m(1:2,1:2) = 0.5; % 正确,右边为标量可以赋值,这是特例
length(m); % 返回矩阵行或列最大值
size(m); % 返回矩阵行和列大小
vector_size = size(m); % vector_size 为一行两列向量,[2 3]
[n_row,n_col] = size(m); % 分别赋值,n_row = 2,n_col=3
numel(m); % 6,返回矩阵元素个数
zeros(size(m)); % 2行3列的0矩阵
0*NaN; % NaN
% 0 ->{1,1/2,1/4,1/8,...1/2^n}
% NaN ->{1,2^2,1,2^3,1,2^4,...1,2^n,...}
% 0*NaN ->{1*1,2^2/2,1/4,1,...1/2^n,1,...}
9. 向量和矩阵的常用函数
m = randi([1,9],3,4); % 3行4列矩阵
reshape(m,2,6); % 生成2行6列的矩阵,必须确保与原矩阵m的元素个数相同,保留列的方式重新生成,即从m的第一列开始依次赋值给新的第一列开始的元素
flipud(m); % 上下翻转 ,如:第1行到最后一行,最后一行到第一行
fliplr(m); % 左右翻转,如:第1列到最后一列,最后一列到第一列
flip([1 3 5]); % 按列翻转,[5 3 1],根据较大的维度翻转,
flip([1 3 5]'); % 按行翻转,[5 3 1]’,根据较大的维度翻转
rot90(m); % 矩阵m逆时针旋转90度
a = [1 2;3 4];
repmat(a,2,3); % 重复矩阵a,纵向2个横向3个
repelem(a,2,3); % 把每一个元素用2行3列子阵代替,重复a的每一个元素
e = []; % 建立一个空矩阵
size(e); % [0 0]
[e a]; % [1 2;3 4]
e = [e,randi([1,6])];
% 三维矩阵
T(:,:,1) = m; % 第一个:代表访问T的所有行,第二个:代表访问T的所有列,第三个1代表访问T的第1页,整体代表访问T的第1页
T(:,:,2) = randi([1,9],3,4); %
T(:,:,3) = randi([1,9],3,4); %
size(T); % [3 4 3]
numel(T); % 48
abs(-5); % 5
v = randi([-5,5],[1,4]); % v = [-5 1 5 -3],一维
abs(v); % [5 1 5 3]
sign(v); % [-1 1 1 -1]
min(v); % -5,返回数组中元素最小值
max(v); % 5,返回数组中元素最大值
sum(v); % 返回数组中所有元素的和
prod(v); % -5*1*5*-3,回数组中所有元素的乘积
cumsum(v); % [-5 -4 1 -2], 依次扩大求和范围,即[-5,-5+1,-5+1+5,-5+1+5-3]
cumprod(v); % 分别扩大乘积范围
cummin(v); % 依次计算最小值
cummax(v); % 依次计算最大值
m = [1 2;3 4]; % 二维
min(m); % [1 3],对每一列进行min,结果存为行向量
10. 向量运算与矩阵运算
10.1 向量运算
diff([1 4 7 8 3]); % [3 3 1 -5},相邻元素做差,即第i+1个元素-第i个元素
[1 4 7 8 3] * 3; % [3 12 21 24 9]
[1 4 7 8 3] + 1; % [2 5 8 9 4]
10.2 矩阵与矩阵间的运算
a = [1 2];
b = [3 4];
a + b ; % [4 6]
a - b ; % [-2,-2]
a * b; % 错误
a .* b; % [3,8],矩阵对应元素间运算
a ./ b; % [1/3,2/4]
a .^ b; % [1^3,2^4]
11. 逻辑向量与逻辑矩阵
v = rand(1,5); % 0.8147 0.9058 0.1270 0.9134 0.6324
u = v > 0.5 ; % 1 1 0 1 1
v(u); % 0.8147 0.9058 0.9134 0.6324 ,只返回logical为1的元素
v(v>0.5); % 0.8147 0.9058 0.9134 0.6324
vec = [5 9 3 4 6 11];
v = [0 1 0 0 1 1];
vec(v); % 报错,因为v中元素不是逻辑类型
v = logical([0 1 0 0 1 1]); % 将v中元素转为逻辑类型
vec(v); % 9 6 11
log_true = ones(3,4,'logical'); % 返回一个3行4列的逻辑矩阵,均为1
any(v); % v是一维行向量,返回logical, 1,v是逻辑数组,any判断v里是否至少有一个真值
all(v); % logical, 0,判断v里是否全为真值
R = rand(50,50);
any(R<0.001); % R<0.001 是一个50*50的矩阵,当参数是矩阵时,返回矩阵中每一列对应的值
v = rand(1,5); % 0.8147 0.9058 0.1270 0.9134 0.6324
u = v > 0.5 ; % 1 1 0 1 1
find(v); % v为逻辑数组,会返回v中真值的位置,1 2 4 5
min(find(v)); % 1
find(v,1,'first'); % 找第一个为逻辑真的位置,1
find(v,2,'first'); % 找前两个为逻辑真的位置, 1 2
v1 = [1 2 3 4];
v2 = [1 2 3 4];
v1 == v2; % 1 1 1 1
all(v1 == v2); % logical,1, ==: 数组的行和列数必须相同
isequal(v1,v2); % logical,1, 比较两个数组,行和列数必须相同可以不同
sum(v1 == 1 & v2 == 2); % 2,逻辑数组要用&
sum(v1 == 1 && v2 == 2); % 错误
12. 矩阵乘法
12.1 矩阵乘法
m1 = randi([1,9],[3,4]); % 1-9,3行4列
m2 = randi([1,9],[4,3]); % 1-9,4行3列
m1*m2; % 3行3列
m1^2; % m1 * m1
12.2 向量相乘
v1 = randi([1,9],[1,3]); % 9 2 8
v2 = randi([1,9],[1,3]); % 7 3 5
v1 .* v2; % 63 6 40, 内积
cross(v1,v2); % -14 11 13 ,矩阵叉乘
12.3 常用矩阵
hilb(3); %
pascal(3);
magic(4);
ind2sub(size(m),find(m == 1)); % 线性下标转为行标和列标
|