文章目录
说明
Matlab的版本为Matlab R2018b;学习的主要内容是Matlab相关的视频网课,可以把这理解为学习的笔记。此外学习过程中参考了以下文章,非常感谢作者的总结和分享:
Matlab 基础知识——矩阵操作及运算(矩阵、数组区别)(CSDN)
Matlab矩阵基本操作(定义运算)(360图书馆)
1、矩阵的创建
矩阵(Matrix)是一个按照长方阵列排列的复数或实数集合,有自身的计算法则,在Matlab当中以数组的形式创建和储存。
1.1 手动创建矩阵
Matlab中创建矩阵的规则:
- 矩阵中的元素放在“[ ]”内;
- 同行两个元素之间用空格或者“,”隔开;
- 非同行元素用“;”隔开;
- 矩阵的元素可以是数值、变量、表达式或者是函数;
- 矩阵的尺寸可以不事先定义。
a = [1 2 3 4 5; 6 7 8 9 10; 11 12 13 14 15];
1.2 利用函数创建矩阵
ones() 创建元素都为1的矩阵
zeros() 创建元素都为0的矩阵
rand() 创建在(0,1)之间均匀分布的矩阵
eye() 创建单位阵
randn() 创建均值为0方差为1的标准正态分布随机矩阵
magic() 创建魔方矩阵
vander() 创建范德蒙矩阵
hilb() 创建希尔伯特矩阵
toeplitz() 创建托普利兹矩阵
compan() 创建矩阵的伴随矩阵
pascal() 创建帕斯卡矩阵
1.3 利用文件数据创建矩阵
% 将matrix.txt中的数据读取为向量a,再将向量a转变为3*3矩阵
a = load('matrix.txt');
b = reshape(a, 3, 3);
2、矩阵元素的引用
矩阵元素的引用用逗号隔开,都好之前代表行,之后代表列
% 建立一个矩阵,并设置取消控制台隔行输出
format compact;
a = [1 2 3 4 5; 6 7 8 9 10; 11 12 13 14 15];
% 输出3行5列元素
% 输出2-3行,4-5列元素,当然这是一个矩阵
% 两种写法效果一样,但是行数列数较多时第二种写法更加方便
a(3, 5)
a([2 3], [4 5])
a(2 : 3, 4 : 5)
% 输出第3列元素,当然这是一个列向量
% 输出第3-4列元素,这是一个矩阵
% 两种写法等价,依旧是第二种比较方便
a(: , 3)
a(: , [3 4])
a(: , 3 : 4)
% 输出第2行元素,当然这是一个行向量
% 输出第2-3列元素,这是一个矩阵
% 两种写法等价,依旧是第二种比较方便
a(2 , :)
a([2 3], :)
a(2 : 3, :)
% 将矩阵按列合并成列向量
% 取出合并后列向量的第一个元素
% 取出合并后列向量的第5、6个元素
% 两种写法等价
a(:)
a(1)
a([5 6])
a(5 : 6)
% 引用矩阵每一列的最大值组成的行向量
% 引用矩阵每一行的最大值组成的列向量
% 求整个矩阵的最大值
max(a, [], 1)
max(a, [], 2)
max(a, [], 'all')
3、矩阵的运算
3.1 四则运算
符合矩阵四则运算规则的矩阵才能做四则运算。需要注意的是这里还有矩阵的点乘、点除、点幂,这是让矩阵的每个元素对应参与计算。
format compact;
a = [1 2 3 4 5; 6 7 8 9 10; 11 12 13 14 15];
b = [15 14 13 12 11; 10 9 8 7 6; 5 4 3 2 1];
% 这两个矩阵不符合矩阵相乘的运算规则,但是只要矩阵维度相同,可以做点乘
a .* b
% 输出
% ans =
% 15 28 39 48 55
% 60 63 64 63 60
% 55 48 39 28 15
3.2 矩阵的合并
对两个矩阵可以进行水平或者是竖直合并,生成一个矩阵。
format compact;
a = [1 2 3 4 5; 6 7 8 9 10; 11 12 13 14 15];
b = [15 14 13 12 11; 10 9 8 7 6; 5 4 3 2 1];
horzcat(a, b)
vertcat(a, b)
3.3 矩阵的关系运
% 矩阵比较的逻辑是同维矩阵逐个比较,返回0、1矩阵,标量与矩阵比较也是逐一比较,返回矩阵
a = [1 2 3 4 5; 6 7 8 9 10; 11 12 13 14 15];
b = [15 14 13 12 11; 10 9 8 7 6; 5 4 3 2 1];
a == b
a >= b
a <= b
a ~= b
% 输出:
% ans =
% 3×5 logical 数组
% 0 0 0 0 0
% 0 0 1 0 0
% 0 0 0 0 0
% ans =
% 3×5 logical 数组
% 0 0 0 0 0
% 0 0 1 1 1
% 1 1 1 1 1
% ans =
% 3×5 logical 数组
% 1 1 1 1 1
% 1 1 1 0 0
% 0 0 0 0 0
% ans =
% 3×5 logical 数组
% 1 1 1 1 1
% 1 1 0 1 1
% 1 1 1 1 1
3.4 逻辑运算
% Matlab当中的逻辑运算符
% & 与,两侧都为真才取真
% | 或,两侧只要有一侧为真即为真
% ~ 非,真假取反
% 逻辑运算和关系运算一样,都是逐个运算,返回同维矩阵
4、向量
向量是一维的矩阵,分为行向量和列向量。
4.1 向量的创建
- 直接输入
- 使用冒号表达式,指定步长生成
- 使用linspace函数指定维度生成
- 使用logspace函数对数等分生成向量
% 使用方括号和空格以及逗号做间隔,生成行向量
% 用分号分隔生成列向量
a = [1 2 3 4 5]
b = [1, 2, 3, 4, 5]
c = [1; 2; 3; 4; 5]
% 默认以1为间隔生成向量
% 以0为第一个元素,每隔0.1创建一个元素,直到1为止
% 如果不是步长的整数倍,元素不包含1
x = 0 : 6;
x = 0 : 0.1 :1;
% 默认将0-1等分,以0为第一个元素,1为第100个元素,生成100维向量
% 指定将0-1等分,以0为第一个元素,1为第200个元素,生成为200维向量
y = linspace(0, 1)
y = linspace(0, 1, 200)
% 以1为起点,10的5次方为终点,生成6维向量
y = logspace(0, 5, 6)
4.2 向量的运算
- 与数运算,每一个元素都参与运算
- 点积运算
- 叉积运算
- 混合积运算
a = [1 2 3]
b = [4 5 6]
% 与数运算
c = 3 * a
% 点积运算,有两种实现方法
d = dot(a, b)
d = sum(a.*b)
% 叉积
e = cross(a, b)