我们可以创建两种 MATLAB 向量类型:
行向量
列向量
MATLAB 行向量:
创建行向量括在方括号中的元素的集合,用空格或逗号分隔的元素。
% 行向量
r = [1 2 3 4 5 6];
disp(r);
r2 = [7, 4, 5, 6, 77];
disp(r2)
MATLAB 列向量:
创建列向量括在方括号中的元素的集合,使用分号来分隔的元素。
% 列向量
r3 = [34; 23; 44; 44];
disp(r3)
引用向量元素
例如:
% 引用(访问元素) 名字(索引) 索引从1开始
%访问 r2的第一个值
disp(r2(1));
%如果使用 名(:) 相相当于 python切片的全选
disp(r3(:));
% 切片 截取一部分 左闭右闭
sub_v = r(1:4);
disp(sub_v);
在 MATLAB 中当进行两个向量的加法与减法的时候,这两个向量的元素必须有相同的类型和数量。
% 向量运算
A = [1, 2, 3, 4, 5];
B = [6, 7, 8, 9, 10];
J = A + B;
J2 = A - B;
disp(J);
disp(J2);
MATLAB标量乘法:让一个数字乘以一个向量。
标量乘法会产生相同类型的新的一个向量,原先的向量的每个元素乘以数量。
% 向量的标量乘法
v = [12, 3, 4, 5];
m = 5 * v;
disp(m);
MATLAB中转置操作能够将一个行向量改变成一个列向量,反之亦然。
MATLAB中转置操作使用一个单引号(')来表示。
% 转置向量
r = [1, 2, 3, 4];
tr = r';
disp(tr)
cr = [2;4;5;6];
disp(cr');
MATLAB 允许在原有的向量中附加向量,共同创造新的向量。
如果有两个行向量 r1 和 r2 这两个行向量中各有 n 和 m 个元素,现在创建行向量 r 并将n和m个元素都放在行向量 r 中,通过附加这些载体
% 追加向量
r1 = [1, 2, 3];
r2 = [4, 5, 6];
res = [r1, r2];
disp(res);
res2 = [r1; r2];%矩阵
disp(res2);
r3 = [4; 5; 7];
r4 = [2; 6; 9; 0];
disp([r3; r4]);
% 向量的模
vv = 1: 2: 20;
disp(vv);
sqrtvv = vv .* vv;
disp(sqrtvv);
dp = sum(sqrtvv);
resMo = sqrt(dp);
disp(resMo);
MATLAB 中两个向量的点积 a = (a1, a2, …, an) and b = (b1, b2, …, bn) 由以下给定:
a.b = ∑(ai.bi)
下述函数可以计算两个向量 a 和 b 的点积:
dot(a, b);
%点积
dv1 = [1, 2, 3];
dv2 = [4, 5, 6];
dps = dot(dv1, dv2);
disp(dps);
当一个向量中的元素过多,同时向量的各元素有等差的规律,此时采用直接输入法将过于繁琐。针对该种情况 ,可以使用冒号( 来生成等差元素向量。
在 MATLAB 中如何建立一个等差元素向量?解决方法如下。
要建立一个矢量 v 带的第一个元素 f,最后一个元素 l 和元素之间的区别是任何真正的数 n,可以这样写:
v = [f : n : l]
% 向量的等差元素
% v = [f: n : l];
v = [1: 3: 30];
vvv = v.^2;
disp(v);
disp(vvv);
在MATLAB中创建矩阵有以下规则:
矩阵元素必须在 “[ ]” 内;
矩阵的同行元素之间用空格(或 “,”)隔开;
矩阵的行与行之间用 “;”(或回车符)隔开;
矩阵的元素可以是数值、变量、表达式或函数;
矩阵的尺寸不必预先定义。
matrix1 = [1, 2, 3; 4, 5, 6; 7, 8, 9];
disp(matrix1);
MATLAB引用一个矩阵的元素
如果要引用 mth 行和 nth 列的一个元素,写法如下:
mx(m, n);
disp(matrix1(2,2)); % 索引从1开始
% 最后一列
disp(matrix1(:, 3));
% 前两列
disp(matrix1(:, 1:2));
% [7, 8; 10, 11]子矩阵
disp(matrix1(3:4, 1:2));
MATLAB删除行或列矩阵
可以删除整行或整列的矩阵,只要分配一组空方括号 [ ] 给该行或列。
基本上,[ ] 表示一个空数组。
% 删除第二行
matrix2 = [1, 2, 3; 4, 5, 6; 7, 8, 9; 10, 11, 12];
matrix2(2, :) = [];
disp(matrix2);
% 删除最后2列
matrix3 = [1, 2, 3; 4, 5, 6; 7, 8, 9; 10, 11, 12];
matrix3(:,2:3) = [];
disp(matrix3);
建立一个3-3的矩阵 m,并把矩阵 m 中的第二行和第三行复制两次,这样就能够建立一个4×3的矩阵
m = [1, 2, 3; 4, 5, 6; 7, 8, 9];
new_mat = m([2,3,2,3], :)
disp(new_mat)
MATLAB矩阵可以有加法和减法的操作,但是两个操作数的矩阵必须具有相同的行数和列数。
%加减法
A=[1,3,5;2,4,6];
B=[7,9,11;8,10,12];
disp(A+B);
disp(A-B);
MATLAB矩阵的标量操作就是加,减,乘或者除以一个数字矩阵。
添加到具有原始矩阵的每个元素的行和列,相减,乘或除以数相同数量的标量运算会产生一个新的矩阵 /
%标量操作 + - * /
disp(3*A);
disp(A/4);
disp(A+2);
disp(A-1);
MATLAB中矩阵的转置操作是用一个单引号(')表示的,该操作能够切换一个矩阵的行和列。
%转置'
disp(A');
MATLAB中使用一对中括号“[ ]”,能够将两个矩阵连接起来,创建出一个新矩阵。
MATLAB串联矩阵的两种类型:
水平串联:要进行连接的两个矩阵是使用逗号 “,” 分隔开的。
垂直串联:要进行连接的两个矩阵是使用分号 “;” 分隔开的。
%串联矩阵 水平, 垂直;
disp([A,[2,2;4,4]]);
disp([[1,2,3];B]);
MATLAB中如果有两个矩阵 A 和 B ,其中 A 是 mn 矩阵,B 是 np 矩阵,那么他们相乘能够产生一个 m*p 的矩阵 C。
MATLAB矩阵乘法只发生在矩阵 A 的列数的数量等于矩阵 B 的行数的矩阵乘法中,具有相应的列中的第二矩阵乘以第一矩阵中的行的元素。
比如,第(i,j)个位置中的每个元素,在所得的矩阵 C 中,是在第 i 行的第一矩阵具有第二矩阵的第 j 列中的相应元素的产品的元素的总和。
在 MATLAB 中,矩阵乘法使用*
运算符。
%乘法
disp([1,2,3;4,5,6]*[1,1;2,2;1,1]);
MATLAB中矩阵A的逆矩阵被记为 A−1 ,下面的关系成立:
AA−1 = A−1A = 1
MATLAB中不是每个矩阵都有逆矩阵的,比如一个矩阵的行列式是零的话,则矩阵的逆就不存在,这样的矩阵是奇异的。
MATLAB中,逆矩阵的计算使用 inv 函数:逆矩阵A是inv(A).
a = [1, 2, 3; 2, 3, 4; 1, 2, 5];
disp(inv(a));
res = inv(a);
disp(a*res);
MATLAB中会使用一些函数来建立一些特殊的阵列,对于所有这些函数,一个参数创建一个正方形阵列,双参数创建矩形阵列。
使用 zeros() 函数建立一个元素为零的数组:
zeros(5)
ones(4,3)
eye(4)
使用 rand() 函数建立一个数组(0,1)上均匀分布的随机数:
rand(3, 5) % 3行5列
MATLAB多维数组
在MATLAB中,一个阵列如果具有两个以上的维度则被称为多维数组。
在MATLAB中的多维数组是正常的两维矩阵的延伸。
MATLAB中需要先创建一个二维数组然后对该二维数组进行扩展,这样才能生成一个多维数组