Matlab学习之2——矩阵及矩阵运算

说明

Matlab的版本为Matlab R2018b;学习的主要内容是Matlab相关的视频网课,可以把这理解为学习的笔记。此外学习过程中参考了以下文章,非常感谢作者的总结和分享:
Matlab 基础知识——矩阵操作及运算(矩阵、数组区别)(CSDN)
Matlab矩阵基本操作(定义运算)(360图书馆)

1、矩阵的创建

矩阵(Matrix)是一个按照长方阵列排列的复数或实数集合,有自身的计算法则,在Matlab当中以数组的形式创建和储存。

1.1 手动创建矩阵

Matlab中创建矩阵的规则:

  1. 矩阵中的元素放在“[ ]”内;
  2. 同行两个元素之间用空格或者“,”隔开;
  3. 非同行元素用“;”隔开;
  4. 矩阵的元素可以是数值、变量、表达式或者是函数;
  5. 矩阵的尺寸可以不事先定义。
 a = [1 2 3 4 5; 6 7 8 9 10; 11 12 13 14 15];

1.2 利用函数创建矩阵

ones()		创建元素都为1的矩阵
zeros()		创建元素都为0的矩阵
rand()		创建在(01)之间均匀分布的矩阵
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];

% 输出35列元素
% 输出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, :)

% 将矩阵按列合并成列向量
% 取出合并后列向量的第一个元素
% 取出合并后列向量的第56个元素
% 两种写法等价
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 矩阵的关系运

% 矩阵比较的逻辑是同维矩阵逐个比较,返回01矩阵,标量与矩阵比较也是逐一比较,返回矩阵
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 向量的创建

  1. 直接输入
  2. 使用冒号表达式,指定步长生成
  3. 使用linspace函数指定维度生成
  4. 使用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为起点,105次方为终点,生成6维向量
y = logspace(0, 5, 6)

4.2 向量的运算

  1. 与数运算,每一个元素都参与运算
  2. 点积运算
  3. 叉积运算
  4. 混合积运算
a = [1 2 3]
b = [4 5 6]

% 与数运算
c = 3 * a

% 点积运算,有两种实现方法
d = dot(a, b)
d = sum(a.*b)

% 叉积
e = cross(a, b)

猜你喜欢

转载自blog.csdn.net/qq_42318112/article/details/107249271